vsftpd 虚拟用户.note
一、配置 vsftpd 虚拟用户:
·查看配置参考:
cat /usr/share/doc/vsftpd/example/VIRTUAL_USERS/vsftpd.conf
·虚拟用户的作用:
隔离用户
独立管理
针对单个用户划分不同的权限
所有非匿名的用户都被归为 guest,进行重新映射、定义使用 guest_enable
1、配置 虚拟用户:
vim /etc/vsftpd.conf
virtual_use_local_privs=yes 表示用户登陆后拥有与本地用户相同的权限(与映射用户 ftpuser 权限相同)
注意:需要开启 write_enable=YES 才能够写入

# 添加用于映射的虚拟用户:
echo -e "Skills39\nSkills39" | adduser ftpusersystemctl restart vsftpd
·客户端测试:

查看文件的属主,是映射用户:ftpuser

2、为每个虚拟用户配置单独的目录:
# 配置同上,添加两条:
vim /etc/vsftpd.conf
systemctl restart vsftpd
前提是这个目录必须存在(权限使用mkdir创建的默认的即可正常登陆)
·客户端测试:
最后的效果是这样的:


二、基于 PAM 的 ftp 虚拟用户:

·安装必须软件包:
apt install -y libpam-pwdfile apache2-utils1、用户名密码使用DES算法加密:
(1)生成 用户名、密码:
mkdir /etc/vsftpd
## htpasswd默认是 apr1类型的 MD5加密,pam 不支持apr1类型的MD5加密,因此需要加上 -d 使用 DES加密。
htpasswd -cd /etc/vsftpd/user ftp1 //只有第一次创建文件时需要 -c 参数(理解为 -create)
# 输入密码。
htpasswd -d /etc/vsftpd/user ftp2
# 输入密码。
cat /etc/vsftpd/user
## (可选)设置文件的权限(可以不设置[不设置也能配置成功],但是如果是主观评分,就建议设置为安全权限)
chmod 600 /etc/vsftpd/user(2)编辑 PAM 文件:
·同时允许pwdfile文件认证 和 本地用户认证:
vim /etc/pam.d/vsftpd
# debug 参数不是必须参数,只是让其错误输出输出到日志中,方便排错而已
## 可以在末尾添加 crypt=des,但是没必要,因为默认就是des
# sufficient 参数可以在 /etc/pam.d/su 文件中照抄添加这两行,其它无需修改

·仅允许pwdfile虚拟用户认证,拒绝本地用户认证:
vim /etc/pam.d/vsftpd添加这两行,然后注释其它行:

·配置好 pam 后,可以先使用 pamtester 进行本地测试:
# 首先要确定 /etc/pam.d 下的文件配置无误
## 如果测试通过,那么PAM一般就没问题
pamtester [用户名文件路径] [用户] authenticate
pamtester /etc/vsftpd/user ftp1 authenticate
(3)编辑 vsftpd:
mkdir /etc/vsftpd/users_dir
vim /etc/vsftpd.conf


systemctl restart vsftpd
users_dir 是一个目录(可以自定义)
目录下可以单独定义每个虚拟用户的配置(不是必选项,不需要可以不加 user_config_dir)
2、用户密码使用其它加密算法(使用 openssl):

openssl passwd 如果不加参数,默认使用 类型 1的md5加密
openssl passwd 生成的用户和密码无法通过 pamtester 的验证,但是能够登陆 vsftpd
# htpasswd 命令默认生成的是 apr1类型的md5加密密码
# pam不支持 apr1类型的md5加密
# pam支持 类型1的md5(常规),类型6的md5(SHA-512)[两个类型都已经测试过可用](1)使用 类型1 常规md5加密:
1.1、生成 类型1 md5密码:
## 两种 配置方式效果一样,但是 openssl命令方便
# 使用 htpasswd 生成密码:
htpasswd -c -p -b /root/users ftp1 $(openssl passwd -1 Skills39)
# 使用 openssl 命令生成密码:
echo ftp1: > users
echo ftp2: >> users
openssl passwd -1 Skills39 >> /root/users
openssl passwd -1 Skills39 >> /root/users
# -1 表示生成类型1的md5密码,要生成什么类型,就用 -[类型] 即可
vim users //修改文件,使其格式为:“[用户名]:[加密密码]”
1.2、vsftpd配置:
vim /etc/vsftpd.conf
# vsftpd配置与上述相同:


systemctl restart vsftpd
1.3、pam 配置:
vim /etc/pam.d/vsftpd
# pam 配置与上述相同
·测试登陆:
虚拟用户 ftp1:

登陆成功
虚拟用户 ftp2:

登陆成功
本地用户 ftpuser:

登陆成功
(2)使用 类型6 SHA-512 md5 加密(最安全):
2.1、生成 类型 6 SHA-512 md5 密码:
echo ftp1: > users
echo ftp2: >> users
openssl passwd -6 Skills39 >> /root/users
openssl passwd -6 Skills39 >> /root/users
vim users //修改文件,使其格式为:“[用户名]:[加密密码]”
2.2、vsftpd配置:
vim /etc/vsftpd.conf
# vsftpd配置与上述相同:


systemctl restart vsftpd
2.3、pam 配置:
vim /etc/pam.d/vsftpd
# pam 配置与上述相同
·测试登陆:
虚拟用户ftp1登陆:

登陆成功
虚拟用户ftp2登陆:

登陆成功
本地用户 ftpuser登陆:

登陆成功