通过vsftpd实现虚拟用户登录,不同的用户登录不同的目录,使用不同的权限

虚拟用户:
  所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
    各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
  虚拟用户帐号的存储方式:
文件:编辑文本文件,此文件需要被编码为hash格式
奇数行为用户名,偶数行为密码
db_load -T -t hash -f vusers.txt vusers.db
关系型数据库中的表中:
实时查询数据库完成用户认证
mysql库:pam要依赖于pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README

一、创建用户数据库文件

vim /etc/vsftpd/vusers.txt
ftpuser1
centos
ftpuser2
China123

cd /etc/vsftpd/
db_load -T -t hash -f vusers.txt vusers.db
chmod 600 vusers.db

二、创建用户和访问FTP目录

useradd -d /var/ftproot -s /sbin/nologin vuser
chmod a=rx /var/ftproot/

centos7 还需要执行以下操作:
chmod -w /var/ftproot/
mkdir /var/ftproot/upload
setfacl -m u:vuser:rwx /var/ftproot/upload

三、创建pam配置文件

vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

这个意思表示调用验证模块pam_userdb.so    验证的时候是由这个文件定义的/etc/vsftpd/vusers,文件名vsftp.db可以自定义,vusers 写的时候可以不带后缀,目前配置文件中还没有调用我们刚刚新建的vsftpd.db 模块

四、指定pam配置文件

vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.db
guest_enable=YES
guest_username=vuser

guest_enable=YESguest_username=vuser这两行表示将操作系统用户映射成vuser,pam_service_name=vsftpd.db这行就表示使用第三步的配置文件

通过ftp测试,报错如下的话,是因为ftp不能运行在一个可写的根上,就是根目录不能有写权限

ftp 192.168.1.7
Connected to 192.168.1.7 (192.168.1.7).
220 (vsFTPd 3.0.2)
Name (192.168.1.7:root): ftpuser1
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
chmod 555 /var/ftproot/ #这行只是不能对/var/ftproot/这个有写权限,可以直接新建个目录,这样就可以了。

修改权限为555表示所有人只有读和执行权限,没有写的权限
这里的根不是真正的系统根,而是用户的家目录,将用户的家目录映射成根,在这里其他用户,登录进去看到的文件和权限都是一样的,

创建upload 文件夹,并对其设置vuser 用户,读写执行权限

mkdir upload

setfacl -m u:vuser:rwx upload

对每个用户授权不同的访问权限

1、修改配置文件

vim /etc/vsftpd/vsftpd.conf

2、

user_config_dir=/etc/vsftpd/vusers.d/

这行表示每个用户有独有的配置文件,配置文件,存放在/etc/vsftpd/vusers.d/这个下,

3、创建配置文件存放位置

mkdir /etc/vsftpd/vusers.d

4、新建文件,和虚拟用户名一样

vim ftpuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

这里给的权限是能上传和下载的,而ftpuser2 我是没有创建文件,所以还是和之前的权限一样,只能下载,不能上传

5、重启vsftpd服务

systemctl restart vsftpd

对每个用户登录之后,查看到的目录各不相同

1、新建一个文件夹,

mkdir /var/ftproot2

2、新建一个ftpuser2的配置文件

vim ftpuser2

local_root=/var/ftproot2

登录目录改变至指定的目录

------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------- 博客均为个人笔记,无所追求,仅供参考~~~ QQ--2382990774
原文地址:https://www.cnblogs.com/alexlv/p/14848191.html