前言:

  以vsftpd搭建的ftp服务有三种认证模式,分别是匿名,本地用户和虚拟用户,本次我们就来一起实现基于文件验证的虚拟用户。(博主基本上所有的环境都是centos7,一般来讲和centos6没太多区别)

正文

  虽然,我们可以在linux上新建不同的用户来进行认证,但是此方法对用户的管理不方便且还得注意不少安全问题,本次我们直接把虚拟用户的用户名和密码保存到文件中,登陆时再通过pam模块进行认证,并且同一转为本地的ftp用户,并且给不同的两个用户以不同的权限,一个可以上传文件,一个只能下载。那就开始实现把~

  第一步,当然是安装我们的ftp服务程序啦,我们用到的是一个叫vsftpd的软件。

yum install vsftpd -y

配置文件在/etc/vsftpd目录下,默认使用ftp用户,其家目录在/var/ftp。第一步,先做最基础的初始化配置(以下只显示修改的配置条目),修改配置文件/etc/vsftpd/vsftpd.conf

#/etc/vsftpd/vsftpd.conf
anonymous_enable=NO   #禁止匿名用户访问
guest_enable=YES      
guest_username=ftp    #上面两个选项表示,任何登陆的用户,均会被假设称为guest,且身份为ftp
pam_service_name=vsftpd.db  #指定pam的命令,放在/etc/pam.d/vsftpd.db

最后一条我们指定了一个文件vsftpd.db存放的pam模块的命令,此文件不存在,得我们自己手动创建,在/etc/pam.d/目录下,因为会自动去找此路径,所以我们指定文件名即可,接下来我们在此目录下新建一个文件vsftpd.db

#/etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/ftp
account required pam_userdb.so db=/etc/vsftpd/ftp  

#指定pam模块要验证的用户数据库的位置为/etc/vsftpd/ftp

此处要注意,虽然我们指定的是/etc/vsftpd/ftp但是文件ftp其实真正的名称为ftp.db必须以.db结尾哦,配置文件中不用写拓展名。此数据库文件也是不存在的,也得我们手动创建。此过程有两步,所以我们先切换到/etc/vsftpd目录下

#cd /etc/vsftpd
#vim ftp.txt  #我们得先创建一个文本文件,输入以下内容后再转换才db文件
xiaofengfeng  #单数行为登录ftp的帐号
1234          #双数行为登录ftp的密码
xiaofengfeng2 #帐号
1234          #密码
#db_load -T -t hash -f ftp.txt ftp.db #通过命令进行hash运算生成db文件
#chmod 600 ftp.db  #为了安全起见设置较低的权限

到此为止,我们基本上就做好了虚拟用户的基本配置,应该就能用这两个帐号登录ftp啦。在此之前我们还得检查一下我们的防火墙和SeLinux是否关闭,或者放行我们的ftp服务。

getenforce   #查看selinux是否为 Enforcing,如果是得先关闭
iptables -vnL #查看是否有规则限制ftp,如果有得调整或关闭
setenforce 0   #暂时关闭selinux
iptables -F    #清空iptables规则

博主第一次搭建ftp服务的时候,老是显示不了目录,或者开启了上传功能也不能上传文件排查了很久很久才忽然想起selinux这个坑爹的东东。j_0012.gif所以,不过做什么,这玩意儿还是关闭的好。。。

现在我们启动服务,如果已经启动就重启服务 

#systemctl restart vsftpd

到此我们就可以通过xiaofengfeng和xiaofengfeng2进行ftp登录了,如果登录时遇到 错误可以查看日志文件tail /var/log/secure.如果我们向实现让xiaofengfeng可以上传文件,新建目录,而xiaofengfeng2不可以该怎么做?我们可以针对每个用户分别设置配置文件让不同的用户有不同的权限。首先得在配置文件/etc/vsftpd/vsftpd.conf中设置用户自己的配置文件存放位置:

#/etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/ftp.d
mkdir /etc/vsftpd/ftp.d

然后在/etc/vsftpd/ftp.d目录中新建与用户xiaofengfeng同名的配置文件xiaofengfeng,并且开启匿名上传,配置如下:

anon_upload_enable=YES       
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

配置就是这么简单,但是我们还是不能上传文件,为什么呢?但我们以小风风登录ftp时,实际上服务器是把我们当作ftp用户的,而ftp用户对于/var/ftp/pub没有写权限 ,所以并不能上传文件,所以我们可以单独为ftp用户在/var/ftp/pub目录上开启写权限,此处我们用acl来进行权限控制。命令如下 :

#setfacl -m u:ftp:rwx /var/ftp/pub

此时我们在重启ftp服务

#systemctl restart vsftpd

此时进行测试就会发现,xiaofengfeng登录ftp可以上传文件,下载文件,创建目录,而xiaofengfeng2就只能下载文件了~~

到此就搭建完了

到此基于文件认证的ftp就搭建完了~有问题可留言,可私信,可发email。一般email回复最快~