目录
一、FTP协议两种工作模式
二、FTP数据两种传输模式
三、FTP用户分类
四、VSFTP配置案例
4.1匿名开放模式
4.2本地用户模式
4.3虚拟用户模式
五、实验总结
一、FTP协议两种工作模式
主动模式:
1、客户端主动向ftp服务器发送控制连接,三次握手控制连接建立成功(密码认证)。
源端口:随机端口1026 目的端口:21
2、用于传输控制命令的控制连接建立成功之后,客户端向ftp服务器发送port消息来告诉ftp服务器接下来要与其传输数据所使用的端口号。
如:随机端口号1027
3、若要彼此传输数据,ftp服务器主动与客户端建立数据连接。
源端口号:20 目的端口号:1027(客户端通过控制连接发送过来的port消息携带的 )
说明:我们知道防火墙是根据报文五元组建立会话,来对外部流量进行筛选是否允许其访问内网。如果ftp客户端位于防火墙的内网,此时防火墙只缓存的有客户端与ftp服务器之间控制会话。如果采用主动模式,当ftp服务器要向客户端发送数据连接请求时,在经过防火墙时由于会话表里保存的没有此五元组端口号的记录,因此防火墙就会禁止ftp请求数据连接报文的通过,因此彼此之间无法进行ftp文件的传输。
被动模式:
1、客户端主动向ftp服务器建立控制连接,三次握手控制连接建立成功(密码认证)。
源端口: 随机端口1025 目的端口: 21
2、控制连接建立成功后,客户端向ftp服务器发送PASV被动消息,告诉ftp服务器在接下来传输数据时其处于被动模式,由客户端向ftp服务器建立数据连接。
3、ftp服务器收到PASV消息后,自己开放个用于传输数据的随机端口号如:m,并将其端口号告诉给客户端。
4、要传输数据时由客户端发送数据连接。
源端口:1026随机端口 目的端口:m
说明:被动连接解决了在防火墙的环境下处于内外区域的c/s之间无法通过ftp传输数据的问题。因为不管是控制连接还是数据连接都是先由客户端主动发起的,因此防火墙会话表里就含有彼此报文交互的五元组会话记录,当ftp要向客户端回复数据连接建立成功经过防火墙时,报文匹配会话五元组放行流量。
二、FTP数据两种传输模式
1、ASCLL传输方式:用于传输文本文件。如果用户使用的是windows系统,需要从unix系统搭建的服务器上下载一个文本文件。由于不同操作系统之间对文本内容文件的换行符表示的字符不同(如:win /r/n ,unix /n)如果直接将unix的文本文件原样下载到win系统上,在win系统上查看文本内容时,文本之间将没有换行,在换行处会出现无法解析的乱码。因此ASCLL文本传输模式会自动将不同主机之间传输的文本文件中的换行符转换成本地的表示形式在存到本机。这样在向ftp服务器上传或下载文本文件后就不会出现换行处不换行,乱码的情况了。
2、Binary二进制传输形式:用于传输二进制文件。在此模式下不会对文件进行任何处理即保存文件的位序。因此如果下载的是二进制非文本文件,如果使用ASLL数据传输模式无疑会把二进制文件中原本的字符当换行符转换后破坏其整个二进制文件。
三、FTP用户分类
1、匿名用户:即anonymous用户。当客户端要访问ftp服务器时,可以在没有服务器用户名和密码的前提下,通过匿名用户访问ftp服务器的共享资源。
2、实体用户:指在ftp服务器上创建注册的本地账户。其用户在登录到ftp服务器后默认的当前工作目录为以自己命名的工作目录,可以修改。不仅可以访问ftp的共享资源,还可以访问其系统下该用户的其它资源。
3、虚拟用户:为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户相对安全,因此正逐步替代本地用户账号的使用。
四、VSFTP配置案例
实验环境
VSFTP-Server | IP:192.168.200.254/24 |
VSFTP-Client | IP:192.168.200.28/24 |
4.1匿名开放模式
FTP-Server:
1、安装vsftp服务
2、查看vsftp服务相关配置文件
3、在客户机上安装ftp客户端工具,用于登录到ftp服务器
4、备份/etc/vsftpd/vsftpd.conf主配置文件、生成vsftp主配置文件、修改并添加匿名用户的配置参数
5、防火墙放行ftp服务,否则ftp拒绝用户登录;匿名用户默认登录到ftp服务器的主目录为/var/ftp/pub目录,授予匿名用户映射服务器的真实用户ftp的写权限,并设置selinux的布尔值参数,否则匿名用户无法创建上传文件。
6、开启vsftpd服务
7、客户端登录ftp服务器,下载并上传文件测试
4.2本地用户模式
FTP-Server:
1、安装vsftpd服务程序、备份主配置文件/etc/vsftpd/vsftpd.conf。前面已有做过,再此略过。
2、修改并添加主配置文件中本地用户相关配置参数,将之前实验的匿名用户登录关闭。与本地用户配置相关的主要参数local_enable=YES,write_enable=YES,local_umask=022其它可选。
3、创建用于客户端登录测试的ftp本地账户
4、防火墙放行ftp服务流量、设置selinux的布尔值策略、因为本地用户默认登录到ftp服务器工作主目录为自己的家目录,因此在自己的家目录拥有写入的权限。由于上面演示过了此处不在表述。
5、重启ftp服务
6、客户端使用测试本地账户ftpclient,登录ftp服务器进行测试。
7、客户端使用ftp系统的root用户登录到ftp服务器进行测试。
8、从ftp服务器黑名单中删除root用户,来允许其登录到ftp服务器
9、重启ftp服务、客户端使用root用户重新登录ftp测试。
10、去除ftp主配置文件中的chroot_local_user=YES根锁定参数,在用客户端登录测试。
4.3虚拟用户模式
VSFTP-Server:
1、在ftp服务器的/etc/vsftpd目录下创建包含有虚拟账户和其密码的文件。
2、使用db-load命令将创建的虚拟用户信息文件转化成vsftpd服务可以直接加载的数据库文件。
3、创建用于虚拟用户权限身份验证的PAM文件(文件名任意),将刚才生成的虚拟用户信息数据库文件关联到PAM认证文件内。
4、创建虚拟用户映射到ftp服务器的真实账户,并通过指定真实用户的家目录来映射虚拟目录登录到服务器的主目录。并修改权限允许其它人查看,但不能修改其虚拟用户的文件。
5、在vsftp主配置文件中配置虚拟用户的相关参数。指定之前创建的PAM认证文件以及与虚拟用户关联的本地用户。
6、给虚拟用户配置不同的权限,如:只允许vuser1查看文件,而允许vuser2上传、创建、修改、查看、删除文件。这种需求在企业真实环境中是常见的,我们可以通过vsftpd服务器程序来实现。
6.1、修改vsftpd主配置文件,过添加 user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。
*标注下滑线是配置虚拟用户所使用到的配置参数。
6.2、在/etc/vsftpd/respective目录下创建分别以虚拟用户名命名的配置文件(使vsftp通过虚拟用户名来找到各自的权限配置文件),并写入相应的权限。
7、重启vsftpd服务,使配置文件立即生效。
VSFTP-Client:
1、使用vuser1登录测试验证其是否具有创建目录权限。
2、使用vuser2登录测试其是否具有创建、删除、修改、上传文件权限。
五、实验总结
(1)配置了虚拟用户登录后,本地用户登录就会失效。可以通过修改PAM认证文件调用的模块函数库可以解决。
(2)vsftpd主配置文件中必须要开启本地登录模式。如果不开,将报错,提示本地模式和匿名模式必须开启一个,显然虚拟用户模式就是为了提高安全,因此我们不开匿名模式而开启本地模式。
(3)2.6.4节中的主配置文件参数allow_writeable_chroot=YES必须开启如果不开将报错。
(4)防火墙影响ftp登录,默认情况防火墙策略阻止了ftp端口,ftp客户端登录将得到“无法路由到主机”的报错。
(5)SELinux阻止文件创建,本来vuser2是有创建文件权限的,但是由于受到默认SELinux策略影响,将不能创建文件。此时需要在ftp服务器执行:setsebool -P ftpd_full_access=off命令即可。
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!