一、FTP的工作原理
FTP是一种文件传输协议,一般使用21端口连接,用来上传和下载,实现远程共享文件,和统一管理文件它的工作原理是:工作在TCP/IP协议簇,其传输协议是TCP协议,以提高文件传输的共享性和可靠性,使用C/S模式的工作方式连接,同时处理服务器和客户端的连接命令和数据传输,FTP将命令和数据分开传输,提高传输效率。
二、FTP的两种传输模式和工作模式
1. 文本模式:ASCII模式美国信息交换信息标准码,这种模式传输文件使用ASCII标准字符序列,一般只用于传输文件。
2. 二进制模式:又称为Binary。这种模式不会转换文件中的字符序列,更适合传输图片这种非文本文件。
FTP连接方式分为两个阶段:管理连接和数据连接。在管理连接阶段,使用的是21号端口进行连接,而在数据连接阶段,就会根据工作模式使用不同的端口进行连接。只要在FTP的连接过程中,就属于管理连接阶段,只有在数据传输过程中,才会打开数据连接,并在传输结束后,关闭数据连接。
FTP也有两种工作模式,分别是主动模式和被动模式。主动和被动都是指服务器的工作状态:
1. 主动模式:客户端使用随机端口(这个随机端口必须大于1024)与服务器的21号端口建立控制连接,服务器端主动使用固定的20号端口向客户端的随机端口建立数据连接,经过三次握手完成。下面是主动模式下,进行FTP连接的图示:
2. 被动模式:客户端使用随机端口向服务器的21号端口建立管理连接,服务器使用建立好的管理通道向客户端发送一个自己的随机端口号,然后客户端向服务器端发过来的端口经过三次握手后建立好这个数据连接。FTP是被动模式,且模式的转换是由客户端进行的。下面是被动模式下,进行FTP连接的图示:
要开启主动模式,要确保"connect_from_port_20"设置为"yes",且"pasv_enable"设置为"no"(关闭被动模式)。
注意:若修改了ftp管理连接的端口号,则需要在IP地址末尾添加修改后的端口号,以端口号2121为例:
ftp 192.168.20.3 2121
且不论是主动模式还是被动模式,被连接的一方的随机端口都由管理连接提供给连接的一方。
三、三种用户登陆方式
1. 匿名用户:在服务器下载vsftpd服务后,就会自动创建一个ftp用户,用于客户端的匿名的登录。该用户没有密码,只用于ftp连接,且登录之后的目录位置在/var/ftp目录中,默认只有下载的权限。
2. 虚拟用户:虚拟用户的引入是为了解决匿名用户模式存在的一些问题,比如匿名用户不会进行身份验证,匿名用户通常具有相同的访问权限,这可能导致管理上的困难等。虚拟用户模式会提供更高的安全性、灵活性以及支持多个用户的并发访问。以下仅讲述虚拟用户的大致配置步骤:
第一步:创建文本格式的用户名和密码 奇数行为用户名,偶数行为密码
第二步:建立虚拟FTP用户的数据库文件
第三步:添加虚拟用户的映射账号
第四步:为虚拟用户建立PAM认证文件
第五步:修改配置文件添加虚拟用户的支持
配置“/etc/vsftpd/vsftpd.conf”文件(以下统称为vfstpd配置文件):
Local_enable=YES #需要映射本地用户所以启用
Write_enable=YES ##启用上传写入权限
Guest_enable=YES ##开启虚拟用户
Anon_umask=022 ### 指定上次权限掩码
Guest_username=* ###指定映射的本地系统用户
Pam_serrivce_name=vsftpd.vu ##指定新的pam认证文件
User_config_dir=/*/*/*/ ###为不同的虚拟用户设置不同的权限
3. 普通本地用户:客户端登录时,可以使用服务器端的普通用户账号进行登录,登录之后会直接进入该用户的home目录中,且能够切换到服务器中任意一个目录,为了安全,通常通过配置vsftpd的配置文件中的chroot_local_user项,将普通用户的登录位置限制在自己的home目录中,不能进入其他目录。此外,root用户默认是不能登录的,可以通过修改/etcvsftpd/user_list和/etc/vsftpd/ftpusers这两个文件,让root用户也可以通过ftp登录。
ftpusers文件:
user_list文件:
注意user_list文件本身对账号有两种限制方式:不允许这个文件中的账号登录和只允许这个文件中的账号登录,可以通过编辑或添加vsftpd的配置文件中的”userlist_deny“项实现这种控制,"yes"为不允许文件中的账号登录,"no"为只允许文件中的账号登录。
四、修改FTP数据连接端口号和用户的默认FTP目录
1. 修改FTP数据连接端口号
在被动模式下,服务器进行数据连接额端口号到的范围为1025~65535,范围过大,不适合使用防火墙根据端口控制来自FTP的访问流量,所以需要限制端口号的范围,方便进行流量控制。通过在主配置文件中添加:
pasv_min_port=端口号的开始位置
pasv_max_port=端口号的结束位置
之后重启服务即可。
2. 修改匿名用户的默认FTP目录
默认的ftp匿名用户的目录在/var/ftp下,可以通过在主配置文件中添加:
anon_root=目录位置 #确保该位置有目录的存在,没有可以自己创建,文件名必须是ftp
3. 修改系统用户的目录
在主配置文件中添加:
local_root=目录位置
chroot_local_user=yes #限制系统用户只能在自己的home目录中,不能切换到其他目录
allow_writeable_chroot=yes #设置系统用户对该目录有写的权限。
还要注意,FTP服务给客户端的文件访问权限要和服务器本身的文件修改权限一致,否则会导致权限冲突,就比如一个房子的两道门,外门打开,内门关闭,人不能进;内门打开,外门关闭,人也不能进。