文件传输协议(FTP)是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
FTP服务器中的文件按目录结构进行组织,用户通过网络与服务器建立连接,FTP仅基于TCP服务,不支持UDP。分为两个端口:20(数据端口),21(控制端口)。
FTP分为主动模式和被动模式:
-
主动FTP
主动方式的FTP客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口21,然后客户端开始监听端口N+1,并发送FTP命令“port+1”到FTP服务器,接着服务器会从自己的数据端口(20)连接到客户端指定的数据端口(N+1) 。主动模式下,服务器端开启的是20和21端口,客户端开启的是1024以上的端口。
-
被动FTP
为了解决服务器发起到客户的连接的问题采取了被动方式,或叫做PASV,当客户端通知服务器处于被动模式才启用,在被动方式FTP中,命令连接和数据连接都由客户端发起,当开启一个FTP连接时,客户端打开两个任意的非特权本地端口N和N+1,第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交port命令并允许服务器来回连接他的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权P(P>1024),并发送port p 命令给客户端,然后客户端发起从本地端口N+1到服务器的端口P的连接,用来传送数据,此时服务端的数据端口不再是20端口,此时服务端开启的是21命令端口和大于1024的数据连接端口,客户端开启的是大于1024的两个端口。
1、安装
我这里安装的是vsftp,因为它小巧轻快,安全易用。
1 | yum install -y vsftp |
2、创建用户
一般的话,我是用匿名用户的方式进行登录,为了安全使用虚拟ftp用户映射到真实系统用户的方式去使用ftp服务,从而避免ftp用户直接登陆系统。
1 | useradd -s /sbin/nologin xiaoming |
3、修改主配置文件/etc/vsftpd/vsftpd.conf
此处guest_username=xiaoming是将虚拟用户映射为xiaoming
Allow_writeable_chroot=YES 或者将匿名用户的家目录减去写权限,否则报错,新版本会检查这一点。
4、创建chroot_list
创建chroot_list文件并将xiaoming加入,目的是限制xiaoming只可以访问自己的目录,如果此处不设置,虚拟用户将无法登陆ftp。
5、创建虚拟用户并设置密码
注:奇数行写用户名,偶数行写密码,多个用户就写多组,中间不能有空格
6、生成虚拟用户密码库(基于pam模块认证)
1 | yum install -y db4* |
7、修改PAM文件
注释前面的所有,在后面加上认证,路径不需要加.db
8、为虚拟用户创建配置文件目录和配置文件
注:配置文件的名字要与创建的虚拟用户名保持一致
关于配置文件参数说明
9、创建虚拟ftp用户的家目录,并创建测试文件
级联更改系统用户virftp家目录的属主属组:
添加测试文件:
10、放行防火墙以及开启服务
1 | systemctl enable vsftp |
11、测试
在客户端或者pc机上访问该服务器上的ftp服务,登陆后即可看见。
注:如果出现500 oops或者530 登录失败,仔细检查有关配置文件,以及文件目录的权限