vsftpd(very secure ftp daemon),非常安全的FTP守护进程,是基于FTP进行数据传输的,允许用户以三种模式登录到FTP服务器。
匿名开放模式:任何人都可以无需密码验证而直接登录,默认访问目录为/var/ftp
本地用户模式:通过linux系统本地用户的帐号密码信息进行登录。
虚拟用户模式:最安全的一种,需要为FTP单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,仅供FTP服务认证使用。
1.匿名开放模式配置
查看配置文件,并写入允许匿名用户创建目录和开发匿名用户其他写入权限
[root@localhost ~]# grep -v "#" /etc/vsftpd/vsftpd.conf |grep -v "^$"
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost ~]# cat >>/etc/vsftpd/vsftpd.conf<<EOF
> anon_mkdir_write_enable=YES
> anon_other_write_enable=YES
> EOF
重启服务并设置开机自启服务
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
检查匿名用户家目录权限,并设置/var/ftp目录所属用户为ftp
[root@localhost ~]# ls -ld /var/ftp/
drwxr-xr-x. 3 root root 16 Mar 15 17:07 /var/ftp/
[root@localhost ~]# chown -Rf ftp /var/ftp/pub/
[root@localhost ~]# ls -ld /var/ftp/pub/
drwxr-xr-x. 2 ftp root 6 Mar 7 2014 /var/ftp/pub/
登录ftp进行测试,发现仍然不能进行创建操作。
[root@localhost ~]# ftp 172.24.8.10
Connected to 172.24.8.10 (172.24.8.10).
220 (vsFTPd 3.0.2)
Name (172.24.8.10:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub
250 Directory successfully changed.
ftp> pwd
257 "/pub"
ftp> mkdir files
550 Create directory operation failed.
ftp> exit
221 Goodbye.
检查selinux对ftp是否存在限制
[root@localhost ~]# getsebool -a |grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost ~]# setsebool -P ftpd_full_access on
设置完成selinux安全域后发现ftp匿名模式已经可以正常登录以及创建目录等。
2.本地用户模式配置
在本地模式配置中对应的目录为对应用户的家目录
配置文件进行如下配置:
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# grep -v "#" /etc/vsftpd/vsftpd.conf |grep -v "^$"
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
在重启服务后,发现新增的用户chb可以登录但是root用户确提示login failed .
这是因为vsftpd服务程序存放着两个用户名单文件/etc/vsftpd/ftpusers 和/etc/vsftpd/user_list,只要在这两个名单中的用户均不可登录,删除需要的用户重启服务后方可登录。
同时对所需要登录用户的家目录设置selinux 允许策略
setsebool -P ftpd_full_access on
设置完成后既可以获取相应权限进行读写操作。
3.虚拟用户模式 对应的目录为映射用户的家目录
1.创建用户FTP认证的用户数据文件

使用db_load命令用哈希算法将明文信息转换为数据库文件

-T 表示进行加密, -t 指定加密协议,-f 需要加密的文件

2.创建vsftpd服务程序用与存储文件的根目录以及虚拟用户(zhangsan,lisi)映射的系统本地用户virtual

3.创建用于虚拟用户virtual认证的PAM文件vsftpd.vu(注:db应该为db=/etc/vsftpd/vusr)

4.编辑配置文件
anonymous_enable=NO##禁止匿名开放模式
guest_enable=YES#开启虚拟用户模式
guest_username=virtual#指定虚拟用户
pam_service_name=vsftpd.vu#指定PAM文件
allow_writeable_chroot=YES#允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求

5.为虚拟用户设置不同的权限,并修改配置文件,以及重启服务

6.设置selinux域允许策略
setsebool -P ftpd_full_access on
7.进行测试发现已经可以正常登录且zhangsan lisi 的权限不同。

来源:oschina
链接:https://my.oschina.net/u/4312865/blog/3195500