vsftp 虚拟用户配置[测试通过]
系统用户访问可以解决匿名用户带来的安全问题,但是系统用户一般可以用于登录linux系统,存在安全隐患,故可以使用多个虚拟用户映射一个服务器系统用户,对外只暴露虚拟用户,该虚拟用户不能登录linux系统,并且可以设置相应的权限来保障系统安全。
1、安装Vsftpd虚拟用户需用到的软件及认证模块:
yum install pam* libdb-utils libdb* --skip-broken -y
2、创建虚拟用户列表
vim /etc/vsftpd/ftpusers.txt #第一行账号 第二行密码 以此类推 longtao01 passwd123 longtao2 passwd123
3、生成Vsftpd虚拟用户数据库认证文件,设置权限600:
#db_load 将virtusers中的密码加密,并生成vsftpd_login.db给系统使用,ftpusers.txt文件可删除 db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db chmod 600 /etc/vsftpd/vsftpd_login.db
4、配置PAM认证文件,/etc/pam.d/vsftpd 加入如下两行,其他行全部注释。
vim /etc/pam.d/vsftpd auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login account required pam_userdb.so db=/etc/vsftpd/vsftpd_login #db=后面的文件要与步骤二中的一致
5、新建一个系统用户(不需要设置密码,不需要登录系统)
useradd -s /sbin/nologin ftpuser
6、配置虚拟用户配置文件
mkdir -p /etc/vsftpd/vsftpd_user_conf/ #创建longtao01私有的虚拟目录,代码如下: vim /etc/vsftpd/vsftpd_user_conf/longtao01 local_root=/home/ftpuser/longtao01 write_enable=YES anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES #创建longtao02私有的虚拟目录,代码如下: vim /etc/vsftpd/vsftpd_user_conf/longtao02 #longtao02虚拟用户配置文件路径; local_root=/home/ftpuser/longtao02 #允许登陆用户有写权限 write_enable=YES #允许匿名用户下载,然后读取文件; anon_world_readable_only=YES #允许匿名用户上传文件权限,只有在write_enable=YES时该参数才生效; anon_upload_enable=YES #允许匿名用户创建目录,只有在write_enable=YES时该参数才生效; anon_mkdir_write_enable=YES #允许匿名用户其他权限,例如删除、重命名等。 anon_other_write_enable=YES
7、创建虚拟用户各自虚拟目录并设置权限
mkdir -p /home/ftpuser/{longtao01,longtao02} chown -R ftpuser:ftpuser /home/ftpuser
8、配置vsftpd.conf文件
vim /etc/vsftpd/vsftpd.conf
完整vsftpd.conf配置文件代码如下:
#拒绝匿名用户登录 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 # --------------(可选)访问权限控制------------------- # 是否禁止本地用户切换到家目录上级目录,绑定家目录为用户的根目录 chroot_local_user=YES # 是否启用chroot列表文件,写入文件中的用户将锁定家目录 chroot_list_enable=YES # 指定不受目录限制的用户列表文件的路径,当chroot_list_enable=YES才需要配置用户列表文件的路径 chroot_list_file=/etc/vsftpd/chroot_list # 将用户目录限制为根目录(看不到家目录里的其他用户目录) allow_writeable_chroot=YES #--------------------------------------------------------- listen=NO listen_ipv6=YES userlist_enable=YES #pam_service_name=vsftpd 位置下移 tcp_wrappers=YES #-----------------config virtual user FTP(必要配置)----------------- #虚拟用户启用pam认证; pam_service_name=vsftpd #启用虚拟用户 guest_enable=YES #映射虚拟用户至系统用户ftpuser guest_username=ftpuser #设置虚拟用户配置文件所在的目录 user_config_dir=/etc/vsftpd/vsftpd_user_conf #虚拟用户使用与本地用户相同的权限 virtual_use_local_privs=YES #--------------------------------------------------------- # ----------------(可选) 被动模式------------------------- # 启用被动模式 pasv_enable=YES # 端口范围 pasv_min_port=30000 pasv_max_port=31000 #需要修改上面的此项为 Connect_from_port_20=NO #---------------------------------------------------------
9、重启服务,测试虚拟用户
systemctl restart vsftpd
注意:如果输入账号密码打不开,使用linux系统ftp连接过去,会提示报错信息
强调:/etc/vsftpd/vsftpd.conf配置文件参数行末尾不要有空格。
10、(可选)实际生产中需要对虚拟用户进行访问控制
限制虚拟用户访问其他目录
在vim /etc/vsftpd/vsftpd.conf配置中添加如下
# 将用户目录限制为根目录(看不到家目录的其他目录) allow_writeable_chroot=YES # 是否禁止本地用户切换到家目录上级目录,绑定家目录为用户的根目录 chroot_local_user=YES
测试效果:连接只能看到自己的家目录文件。
如果只需要个别用户可以访问其他目录,需要创建chroot_list文件
假设用户longtao02可以访问其他用户
vim /etc/vsftpd/chroot_list # 用户名称 longtao02
vim /etc/vsftpd/vsftpd.conf
# 指定用户列表文件的文件路径 chroot_list_file=/etc/vsftpd/chroot_list # chroot_list_file文件中的用户可以切换到其他目录 chroot_local_user=YES chroot_list_enable=YES