vsftpd 虚拟用户.note

noteId: WEB13167ac7bedd52d14f919419203581ec · 原始路径:/ALL/Linux - A模块/服务配置/FTP - TCP 21、TCP 990/vsftpd/vsftpd 虚拟用户.note · 图片:33 · 附件待处理:0

 
一、配置 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 ftpuser
 
systemctl restart vsftpd
 
·客户端测试:
 
查看文件的属主,是映射用户:ftpuser
 
 
 
2、为每个虚拟用户配置单独的目录:
# 配置同上,添加两条:
vim /etc/vsftpd.conf
systemctl restart vsftpd
前提是这个目录必须存在(权限使用mkdir创建的默认的即可正常登陆)
 
·客户端测试:
最后的效果是这样的:
 
 
二、基于 PAM 的 ftp 虚拟用户:
 
·安装必须软件包:
apt install -y libpam-pwdfile apache2-utils
 
 
1、用户名密码使用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登陆:
登陆成功