FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。

实验准备

  • 两台虚拟机,Windows7和linux(Red Hat Enterprise 6.5)
  • 两台虚拟机都选择仅主机模式,确保两台虚拟机能够互相ping通
  • 利用rpm安装为Linux虚拟机安装vfstpd软件包

实验开始

本次实验分为三个部分,分别包括匿名用户访问、本地用户访问和虚拟用户访问,下面我就开始一一介绍。

匿名用户访问

下面我就来演示如何让匿名用户获得可以上传,下载,写入,删除的权限(权限最大)
在配置文件(/etc/vsftpd/vsftpd.conf)中开启以下功能。

anonymous_enable=YES         //开启匿名用户访问
anon_mkdir_write_enable=YES   //匿名用户上传/建立目录
anon_upload_enable=YES       //匿名用户上传权限

将配置文件中相应内容行首的“#”去掉即可执行命令(加“#”表示注释,即不执行该命令,去掉“#”则表示执行该命令)
以下内容配置文件中没有需要我们手动添加。

anon_other_write_enable=YES
//默认没有这一项,允许匿名用户具有建立目录,上传之外的权限,如重命名,删除

FTP文件服务器的匿名、本地、虚拟,账户访问
此时匿名用户的权限已经放到最大了,但是匿名用户需要执行写入权限时还是会遇到问题,此时我们检查匿名用户默认文件存放路径(/var/ftp),可以发现是文件夹的权限不够,我们要将文件夹的权限放大,就可以执行写入权限了。

当给文件夹的权限时不能直接给/ftp,因为当ftp文件夹权限最大时(777)服务器会自动关闭远程连接(Linux系统自动保护程序)。若是想要写入权限可以更改ftp目录下的子文件的权限最大(只能作用在子目录中)。
FTP文件服务器的匿名、本地、虚拟,账户访问
当这些设置都已经做完之后,我们就要开启服务,同时关闭Linux系统的防火墙

service vsftpd start      //开启服务
service iptables stop  //关闭防火墙
setenforce 0                //关闭selinux防火墙

测试

匿名用户下载文件
FTP文件服务器的匿名、本地、虚拟,账户访问
FTP文件服务器的匿名、本地、虚拟,账户访问
匿名用户上传权限(更改文件夹权限之后才可以使用,两者权限都必须要有)没有文件夹权限时。
FTP文件服务器的匿名、本地、虚拟,账户访问
开启文件夹权限
FTP文件服务器的匿名、本地、虚拟,账户访问
FTP文件服务器的匿名、本地、虚拟,账户访问
FTP文件服务器的匿名、本地、虚拟,账户访问

本地用户访问

本地用户登陆就简单了,只要在登陆时使用本地账户的用户名和密码就可以直接登陆。但是这里存在一个系统漏洞,我们要开启执行配置文件中的一条命令。如果在实际应用中普通用户可以随意切换目录将会对服务器造成威胁。

chroot_local_user=YES  //禁锢用户不能离开家目录,默认用户登录后都在其家目录下,当开启该选项后,用户就不可以随意跳转其他目录。

FTP文件服务器的匿名、本地、虚拟,账户访问
FTP文件服务器的匿名、本地、虚拟,账户访问

虚拟账户访问

往往在实际应用中,即使本地用户的用户名都不愿意透露给使用者使用,这时我们就可以使用账户映射,创建虚拟账户登陆
在 /etc/vsftd 文件夹下新建vuser文件,写入虚拟账户的用户名和密码,这里还有格式要特别注意,不可写错。奇数行为用户,偶数行为密码。
FTP文件服务器的匿名、本地、虚拟,账户访问

db_load -T -t hash -f vuser vuser.db             //将vuser文件转换成vuser.db的数据库文件
db_load -T -t hash -f
转换命令 转换 type类型 哈希算法 指定要转换的文件

这两个文件在系统中的的权限是所有人都可以查看,我们应该避免这种情况,所以我们要更改文件权限为只有root用户可以查看。

chmod 600 vuser
chmod 600 vuser.db

FTP文件服务器的匿名、本地、虚拟,账户访问
创建一个系统用户,指定家目录和登陆环境(nologin 不允许系统内登陆)

useradd -d /opt/vuser -s /sbin/nologin vuser

编辑pam认证模块支持虚拟用户的登陆
创建一个文件,为其编辑pam认证模块,认证vuser.db数据库文件

vim /etc/pam.d/vsftpd.vu

将以下内容添加到刚才创建的文件中

auth required pam_userdb.so db=/etc/vsftpd/vuser 
account required pam_userdb.so db=/etc/vsftpd/vuser //此处的两个vuser文件并不是普通文件,而是刚才转换过后的数据库文件。因为前面写了db=,所以此处不加后缀名,且为必须省略不写。

FTP文件服务器的匿名、本地、虚拟,账户访问
编辑完pam认证模块之后,我们就要将其添加到配置文件中去使其生效。vim进入配置文件,在文末写入如下语句

guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.vu    //开启虚拟用户,使用pam认证登陆

使用了新的pam认证模块登陆,同时我们就要注释掉vsftpd的pam认证。
此时重启服务即可使用虚拟账户登陆系统。
FTP文件服务器的匿名、本地、虚拟,账户访问
使用匿名用户登陆系统
FTP文件服务器的匿名、本地、虚拟,账户访问

总结

1.在做服务验证前一定确保两台虚拟机可以互相ping通,防火墙也都是关闭的。
2.配置文件中每一条命令都代表不同的权限,开启执行时要确认清楚
3.当遇到操作失败时,要冷静,逐个排查错误
4.每次配置文件更改之后都需要重启服务,使更改生效
5.针对用户和文件夹的权限都要有