一、FTP工作原理

(1)FTP使用端口

[root@localhost ~]# cat /etc/services | grep ftp
ftp-data 20/tcp #数据链路:端口20
ftp 21/tcp #控制链路:端口21

(2)FTP连接方式
     支持两种连接模式:主动模式(Port)和被动模式(Pasv),这两种模式都是针对数据链路进行的,与控制链路无关。

  • 主动模式工作过程:

1.客户端从自己的一个任意端口(N > 1024)和FTP服务器的21端口建立控制链路
2.然后客户端发出Port指令告诉服务器连接自己的N+1端口来建立一条数据通道
3.当FTP服务器接到这一指令时,会使用20端口连接用户在Port指令中指定的端口号N+1来发送数据

  • 被动模式工作过程:

1.客户端从自己的一个任意端口(N > 1024)和FTP服务器的21端口建立控制链路
2.然后客户端发送Pasv指令,告诉服务器自己要连接服务器的某一个端口
3.如果服务器上的这个端口是空闲可用的,那么服务器会返回确认信息,之后数据传输通道被建立;但如果服务器上的这个端口被另一个资源所使用,那么服务器返回不确认的信息,那么这是客户端会再次发送Pasv命令。

注意:

  • 在FTP客户连接服务器的整个过程中,控制信道是一直保持连接的,而数据传输通道是临时建立的;
  • 主动模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端某一个大于1024的端口;
  • 被动模式中建立数据传输通道是由客户端发起的,它使用一个大于1024的端口连接服务器的1024端口以上的某一个端口。

二、ftp服务器搭建

需求:在Linux中搭建一个ftp服务器在存储文件,创建一个ftp用户:test,主目录是:/home/test,设置该用户不允许登录服务器,并需要限制该用户不能离开自己的主目录。

【实现步骤】

1.查看系统有没有安装vsftpd
# rpm -qa | grep vsftpd
vsftpd-3.0.2-21.el7.x86_64
:vsftp(Very Secure FTP)是Linux系统下使用最多的FTP服务端。

2.查看vsftpd服务是否开机自启
# chkconfig --list vsftpd
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

3.建立一个新用户账户test,-d 参数指定用户登入时的主目录,参数-m 表示如果主目录不存在则自动创建
# useradd -d /home/test -m test

为用户设置密码,输入命令:
# passwd 密码

4.vsftpd的配置
安装完成后,执行命令【rpm -ql vsftpd】可以查看与vsftpd相关的配置文件和文档,其中在/etc/vsftpd目录下有三个主要配置文件:

  • vsftpd.conf 主配置文件
  • ftpusers 指定哪些用户不能访问FTP服务器
  • user_list 指定的用户是否可以访问ftp服务器

查看vsftpd.conf配置文件
内容如下:

 1 [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf | grep -v '^#'
2 #----匿名用户设置----
3 anonymous_enable=NO #禁止匿名用户登录
4
5 #----本地用户设置----
6 local_enable=YES #允许本地用户登录ftp服务器
7 write_enable=YES #允许用户想服务器执行写入操作
8 local_umask=022 #设置服务器上本地用户创建文件的权限掩码
9
10 #----欢迎语设置----
11 dirmessage_enable=YES #启用目录提示消息
12
13 #----日志文件设置----
14 xferlog_enable=YES #启用日志文件功能,记录于/var/log/xferlog
15 xferlog_std_format=YES #启用标准的日志格式
16
17 #----FTP工作方式与端口设置----
18 connect_from_port_20=YES #主动模式下,是否启用默认的20端口进行数据传输
19
20 #----与连接相关的设置----
21 listen=NO #vsftpd不是以独立的服务运行,要受到xinetd服务的管控,功能上会受到限制
22 listen_ipv6=YES
23
24 #----控制用户是否允许切换到上级目录----
25 chroot_list_enable=YES #开启限制用户在主目录的功能
26 chroot_list_file=/etc/vsftpd/chroot_list #在chroot_list文件中加入你要限制的用户名,一行一个用户
27
28 #----虚拟用户设置----
29 pam_service_name=vsftpd #虚拟用户使用PAM认证方式
30
31 #----控制用户访问(通过vsftpd.user_list和ftpusers文件来实现)----
32 userlist_enable=YES #是否启用userlist_file文件
33 userlist_file=/etc/vsftpd/user_list #允许user_list文件中加入的用户访问ftp服务器
34
35 #----控制主机访问----
36 tcp_wrappers=YES #vsftpd服务器检查/etc/hosts.allow和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器
37
38 #----其它设置----
39 allow_writeable_chroot=YES #去除用户主目录的写权限

在上述vsftpd.conf的相关选项的配置下,对ftpuser文件和user_list文件的配置如下:

  • ftpusers文件:不添加test用户,表示该用户不能访问ftp服务器
  • user_list文件:在/etc/vsftpd.conf主配置文件中设置了userlist_deny=YES(默认情况),则不添加test用户,表示该用户不能访问ftp服务器

5.开启vsftpd服务
#service vsftpd start

6.访问ftp服务器方法

  • 浏览器:ftp://ip地址
  • ftp客户端软件,比如FileZilla,输入ftp服务器IP,用户名,密码,端口:21
  • 命令行终端:ftp 用户名@ftp服务器IP,或 ftp 127.0.0.1

注意:关闭ftp服务器上的防火墙及Selinux(防止端口限制)

-------------------------------

补充知识点

  • FTP日志功能配置

xferlog_enable=YES //开启日志功能
xferlog_file=/var/log/xferlog //日志文件的存放位置
xferlog_std_format=YES //使用标准格式记录日志

xferlog该日志文件记录了FTP会话,可以显示出用户向从FTP服务器拷贝了什么文件。其中一条记录如下:

Thu Feb 16 10:09:05 2017 1 10.10.10.9 990 ./home/ftpie.txt b _ o r test ftp 0 * c

含义:在某个时间test用户向主机10.10.10.9上传了哪些文件

数据参数说明

记录数据 参数名称 参数说明
Thu Feb 16 10:09:05 当前时间 当前服务器本地时间
1 传输时间 传送文件所用时间,单位为秒
10.10.10.9 远程主机名称/IP 远程主机名称/IP
990 文件大小 传送文件的大小,单位为byte
./home/ftpie.txt 文件名 传输文件名,包括路径
b 传输类型

传输方式的类型,包括两种:
a以ASCII传输 b以二进制文件传输

特殊处理标志

特殊处理的标志位,可能的值包括:
_ 不做任何特殊处理
C 文件是压缩格式
U 文件是非压缩格式
T 文件是tar格式

o 传输方向

文件传输方向,包括两种:
o 从FTP服务器向客户端传输
i 从客户端向FTP服务器传输

r 访问模式

用户访问模式,包括:
a 匿名用户
g 来宾用户
r 真实用户,即系统中的用户

test 用户名 用户名称
ftp 服务名 所使用的服务名称,一般为FTP
0 认证方式

认证方式,包括:
0 无
1 RFC931认证

* 认证用户id 认证用户的id,如果使用*,则表示无法获得该id
c 完成状态

传输的状态:
c 表示传输已完成
i 表示传输示完成

  • 匿名用户ftp

服务器安装完成vsftpd后是允许匿名用户访问的,匿名访问的用户名是ftp,密码为空。这个用户可以在/etc/passwd文件中找到

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

数据参数说明:
在ftp用户这行中,一共有七个字段,每个字段之间用冒号分割;

  • ftp 用户名
  • x 密码字段,是隐藏的
  • 14 用户的UID字段,是唯一的
  • 50 用户组的GID,是唯一的
  • FTP User 是用户说明字段
  • /var/ftp 是ftp用户的家目录
  • /sbin/nologin 表示不能登录系统;如果把/sbin/nologin改为/bin/bash,这样ftp用户可以通过本地或远程工具ssh或telnet以真实用户身份登录到系统。

默认情况下,匿名用户登录所访问的文件夹一般是/var/ftp,当然也可以由用户自行添加或删除。而且,匿名用户的权限只能是下载,而不能上传或是其它写操作。

  • 配置vsftpd服务器在非标准端口(非21端口)工作

在/etc/vsftpd.conf中,将list_port=10034或者其它端口号选项加入该文件中即可,然后重新启动vsftp守护进程。

# ftp 127.0.0.1 10034

注:此时测试以前使用的21端口,该端口已经不再有用;如果要使用ftp默认的21端口工作,需要删除或者使用#屏蔽掉前面加入的选项即可。

Linux中ftp服务器搭建的更多相关文章

  1. 《Linux下FTP服务器搭建及FTP使用》

    .LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...

  2. FTP-Linux中ftp服务器搭建

    一.FTP工作原理 (1)FTP使用端口 [root@localhost ~]# cat /etc/services | grep ftp ftp-data 20/tcp #数据链路:端口20 ftp ...

  3. Linux 之 FTP服务器搭建

    FTP服务器搭建 参考教程:[千峰教育] 1.关闭防火墙: service iptables stop 2.关闭Selinux setenforce 0 3.安装所需要依赖及编译工具 yum inst ...

  4. linux 中 svn 服务器搭建 重启

    鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...

  5. Linux中FTP服务器的搭建

    vmware12上安装的CentOs6.8,最终实现物理机上的windows10能正常访问CentOs上的FTP服务器. 一.查看是否安装有ftp相关的安装包. # rpm -qa | grep vs ...

  6. linux下FTP服务器搭建教程1

    你买了个主机就像是买了块地皮,搭建FTP就像是盖房子,我在地皮上建房子,然后创建的用户就像是钥匙,我给谁钥匙(权限),谁就可以到我家去玩,去放东西,拿东西. 虽然我们买不起现实的房子,但是我们可以买互 ...

  7. linux上FTP服务器搭建

    一.启动vsftpd服务 1. 启动VSFTP服务器 A. cenos下运行:yum install vsftpd B. 登录Linux主机后,运行命令:"service vsftpd st ...

  8. 一起来学linux:FTP服务器搭建

    首先安装vsftpd: apt install vsftpd有下面几个重要的配置文件:1 /etc/vsftpd.conf. 这个是vsftpd的配置文件.通过“参数=设置值”的方式来设置的. 2 / ...

  9. Linux中ftp服务器的安装与部署

    一.ftp简介FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FTP ...

随机推荐

  1. Step By Step(C调用Lua)

    Step By Step(C调用Lua) 1. 基础:    Lua的一项重要用途就是作为一种配置语言.现在从一个简单的示例开始吧.    --这里是用Lua代码定义的窗口大小的配置信息    wid ...

  2. Nginx 配置实例-配置高可用

    Nginx 配置实例-配置高可用 1. 实现效果 2. 两台机器 nginx 的安装 2.1 192.168.25.120 中 nginx 的安装 2.1.1 安装 pcre 依赖 2.1.2 安装其 ...

  3. node.js学习(3)模块

    1.创建文件 count.js 2 调用 3 改造 4 调用 5 再改造 6 在再改造

  4. Jmeter- 笔记10 - 在GUI生成html报告

    步骤1.在聚合报告,浏览一个存放jtl文件的路径,输入不存在的jtl文件,确定后会出现如下图弹窗,不用理会,关掉 步骤2.运行脚本 步骤3.打开工具 -> Generate HTML repor ...

  5. 3D点云完美匹配

    3D点云完美匹配 The Perfect Match: 3D Point Cloud Matching with Smoothed Densities 地址链接: http://openaccess. ...

  6. 基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化

    基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化 Optimizing NVIDIA TensorRT Conversion for Real-time Inference on Auto ...

  7. 我的第一部原创《JavaScript 全栈开发》正式上市了!

    在经过了漫长的创作.审校过程之后,<JavaScript 全栈开发>终于迎来了在各大平台上正式出版的日子,以下是这本书的基本信息: 出品方: 异步社区:https://www.epubit ...

  8. NOIP模拟测试21「折纸&#183;不等式」

    折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...

  9. Eureka中读写锁的奇思妙想,学废了吗?

    前言 很抱歉 好久没有更新文章了,最近的一篇原创还是在去年十月份,这个号确实荒废了好久,感激那些没有把我取消关注的小伙伴. 有读者朋友经常私信问我: "你号卖了?" "文 ...

  10. R语言六种数据类型

    1 向量 1.1 定义向量 向量使用c来赋值,向量中不能混合不同类型的数据 x<-c(2,3,7,6,8)  数值型num y<-("one","two&qu ...