实验环境:
FTP服务器IP为192.168.149.143,centos7系统。
实验步骤:
第一部分 基本安装
1.安装vsftpd软件
# yum install -y vsftpd*
...
Installed:
vsftpd.x86_64 0:3.0.2-25.el7 vsftpd-sysvinit.x86_64 0:3.0.2-25.el7
Complete!
2.启动进程
# systemctl start vsftpd.service
# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2019-09-03 10:22:11 CST; 1s ago
Process: 2105 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 2108 (vsftpd)
Tasks: 1
CGroup: /system.slice/vsftpd.service
└─2108 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Sep 03 10:22:10 agent.domain.com systemd[1]: Starting Vsftpd ftp daemon...
Sep 03 10:22:11 agent.domain.com systemd[1]: Started Vsftpd ftp daemon.
3.在客户端已经可以登陆查看了。使用win7,访问ftp://192.168.149.143,看到pub共享目录:
4.关闭匿名用户权限。匿名用户只有查看权限,无法创建,删除,修改。
/etc/vsftpd/vsftpd.conf:
anonymous_enable=YES
YES改为NO,并重启服务。
第二部分 系统用户权限配置
5.系统用户权限配置
(1)这里的系统用户,指的是操作系统中存在的用户。所以实验中,需要在操作系统中新增用户并设置密码:
# useradd ftpuser1
# useradd ftpuser2
# echo 123456 |passwd --stdin ftpuser1
# echo 123456 |passwd --stdin ftpuser2
(2)使用用户名密码登陆,实现了用户隔离:
第三部分 虚拟用户权限配置
6.虚拟用户权限配置:
(1)安装pam相关软件包。实际上,我也没验证是否必须要全部安装,感觉有个pam包就可以了。
# yum install pam* -y
(2)在/etc/vsftpd下创建ftpusers.txt,输入虚拟用户的用户名和密码。
# cat ftpusers.txt
ftpuser3
123456
ftpuser4
123456
(3)生成虚拟用户数据库认证文件,并设置权限为700:
# db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db
# chmod 700 vsftpd_login.db
(4)配置pam文件/etc/pam.d/vsftpd,添加2行代码,并注释掉其他代码。
# cat vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
#session optional pam_keyinit.so force revoke
ceed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
(5)操作系统内添加用户,作为FTP虚拟用户映射到操作系统的真实用户。
# useradd -s /sbin/nologin ftpuser
(6)最后的vsftpd.conf文件如下,注意各项配置最后不能有空格,比如“YES”不能写成“YES ”,否则重启vsftpd服务会报错:
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
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
部分说明如下:
pam_service_name=vsftpd #虚拟用户启用pam认证
guest_enable=YES #启用虚拟用户
guest_username=ftpuser #映射虚拟用户至系统用户ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf #设置虚拟用户配置文件所在的目录
(7)最后,在/home/ftpuser目录下创建ftpuser3 ftpuser4 2个虚拟用户目录。并在/etc/vsftpd/vsftpd_user_conf下创建配置文件ftpuser3和ftpuser4:
# cat ftpuser3
local_root=/home/ftpuser/ftpuser3
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# cat ftpuser4
local_root=/home/ftpuser/ftpuser4
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
(8)重启vsftpd服务,完成配置。注:使用虚拟用户配置后,原系统用户ftpuser1 ftpuser2就无法使用了。