老习惯先吐槽,总共花费接近6个小时,遇到各种奇葩问题,决定把问题记录下来,作为知识储备~
调整前背景:
vsftp已有全部为实体用户,不同的用户对不同的目录有权限,但现在由于需求,后续接近上百的用户要使用不同账号,且不同账号对不同目录有不同权限,这种需求创建实体用户是不现实的,且以后做ftp迁移也极为不方便。
操作步骤:
1、修改配置文件 /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/userconfig (该配置已存在,用于控制用户的不同操作目录)
guest_enable=YES 开启虚拟用户
guest_username=ftpvirtual 虚拟用户映射到的实用户ftpvirtual ,即系统用户,用户名称任意
pam_service_name=vsftpd pam验证文件,名称任意,但是要和/etc/pam.d/下文件名保持一致,我这边均是vsftpd ,默认。
2、创建被映射的系统用户
#useradd -s /sbin/nologin -d /data/virtual ftpvirtual
#mkdir -p /data/virtual
#chown -R ftpvirtual: /data/virtual/
3、创建虚拟用户 vtest1 vtest2
a、创建虚拟用户文件virtual
#touch virtual
#vim virtual 奇数行是账户名,偶数行是账户密码,!!!用户名和用户密码前后一定不要留空格,我就吃了大亏,好久才查到原因!
添加 vtest1
vtest1pass
vtest2
vtest2pass
b、创建虚拟用户文件库
#db_load -T -t hash -f /etc/vsftpd/virtual /etc/vsftpd/virtual.db 有的系统应该是db4_load ,还没有细追究这些问题,后续补充
此时,可以看到生成了用户db文件virtual.db,这时virtual 文件可以删除,但是保留和可以方便记忆用户名和密码~
4、修改pam验证模块
#vim /etc/pam.d/vsftp 这时可以看到文件中已包含一些数据,这些数据为实用户验证模块,一定要保留,删除后就实用户就会登陆失败!!
在文件开通添加
auth sufficient pam_userdb.so db=/etc/vsftpd/virtual
account sufficient pam_userdb.so db=/etc/vsftpd/virtual 添加完之后应该是如下图所示:virtual是指步骤3中生成的db文件,但是这里不能加db后缀,会出问题(其中我机器上的用户db文件和文章略有不同virtual_list)
图片中可以看到有两对注释掉的auth account ,据验证都有问题,细节尚未追究,后续补充,貌似require 不能验证通过实用户,后面一对说明auth 和account 对必须要放在原实体验证之前。
5、修改配置文件chroot_list user_list配置文件
#vi chroot_root
添加 ftpvirtual 添加需用户对应的实用户,原因后续补充
#vim userconfig
添加vtest1 若不添加,将报错530 premisson denied
vtest2
6、配置虚用户的控制目录,以及权限
#mkdir -p /etc/vsftpd/userconfig/vtest1
#mkdir -p /etc/vsftpd/userconfig/vtest2 文件名一定和虚拟用户的名称完全一样
#vim vtest1
添加local_root=/data/virtual/vtest1 vtest1只对vtest1 目录有操作权限,下面各权限若不赋予,
write_enable=yes 该虚拟用户将不能上传和下载文件,问题也找了半天
download_enable=yes
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
anon_world_readable_only=no
vtest2文件类似
7、 修改虚拟用户操作目录权限
虚拟目录权限全部赋给映射的实用户ftpvirtual 即可
#chown -R ftpvirtual: /data/virtual
8、验证登陆成功