1.推荐使用dnf安装
sudo dnf install vsftpd -y
或者下载安装https://security.appspot.com/vsftpd.html
rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm
2.检查是否安装
rpm -qa | grep vsftpd
3.安装完成后,启动 vsftpd 服务并设置开机自启动
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
sudo systemctl status vsftpd
4.创建虚拟用户(不建议创建系统用户):安装libdb-utils
sudo yum install vsftpd libdb-utils -y
5.创建虚拟用户配置
sudo nano /etc/vsftpd/virtual_users.txt
在文件中按如下方式配置,用户名和密码交替书写(如 ftpuser1
的密码是 123456
,ftpuser2
的密码是 password
):
ftpuser1
123456
ftpuser2
654321
6.创建虚拟用户数据库
使用 db_load
命令将上面的用户名和密码文件转换为数据库文件,并设置权限
sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
sudo chmod 600 /etc/vsftpd/virtual_users.db
后续每增加一个用户,都需要执行上面的第一行命令进行用户同步,可以将此命令写入脚本文件,后续只需执行脚本即可。
7.配置 PAM 认证,创建或编辑 /etc/pam.d/vsftpd.virtual
文件
sudo nano /etc/pam.d/vsftpd.virtual
在文件中添加以下内容:
auth required pam_userdb.so db=/etc/vsftpd/virtual_users
account required pam_userdb.so db=/etc/vsftpd/virtual_users
这将告诉 vsftpd
使用 /etc/vsftpd/virtual_users.db
作为虚拟用户认证数据库。
8.配置 vsftpd,编辑 vsftpd
配置文件 /etc/vsftpd/vsftpd.conf
,以启用虚拟用户并为每个用户指定不同的配置文件。
sudo nano /etc/vsftpd/vsftpd.conf
确保有以下配置:
# 允许本地用户
local_enable=YES
# 允许写入
write_enable=YES
# 禁用匿名用户
anonymous_enable=NO
# 启用虚拟用户
guest_enable=YES
guest_username=ftp
# 使用 PAM 认证
pam_service_name=vsftpd.virtual
# 启用 chroot 将用户限制在主目录
chroot_local_user=YES
# 虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/vuser_conf
9.为每个虚拟用户配置访问权限
创建用户配置文件目录
sudo mkdir /etc/vsftpd/vuser_conf
为每个虚拟用户创建配置文件
为 ftpuser1
创建配置文件,并添加以下内容,设置用户的根目录和写权限:
sudo nano /etc/vsftpd/vuser_conf/ftpuser1
添加内容:
#根目录根据需要更改成实际存在的目录即可
local_root=/ftp_users/ftpuser1
write_enable=YES
为 ftpuser2
创建类似的配置文件:
sudo nano /etc/vsftpd/vuser_conf/ftpuser2
添加内容:
#根目录根据需要更改成实际存在的目录即可
local_root=/ftp_users/ftpuser2
write_enable=YES
设置虚拟用户的目录访问权限
#根据需要将目录改成自己的
sudo mkdir -p /ftp_users/ftpuser1
sudo mkdir -p /ftp_users/ftpuser2
sudo chown -R ftp:ftp /ftp_users/ftpuser1
sudo chown -R ftp:ftp /ftp_users/ftpuser2
10.设置防火墙并重启vsftpd服务
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload
sudo systemctl restart vsftpd
现在可以使用 ftpuser1
和 ftpuser2
测试连接(端口21),并验证他们各自是否只能访问指定的目录。
用FileZilla尝试连接报错:
响应: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决办法:编辑 vsftpd
配置文件
sudo nano /etc/vsftpd/vsftpd.conf
添加或修改以下配置
allow_writeable_chroot=YES
保存文件并重启 vsftpd
sudo systemctl restart vsftpd