首先确保系统已安装vsftpd,若未安装可通过以下命令完成:
sudo apt update
sudo apt install vsftpd
编辑vsftpd主配置文件/etc/vsftpd.conf
,调整以下核心参数以定义用户权限框架:
local_enable=YES
(启用本地系统用户访问FTP)。write_enable=YES
(允许用户上传、删除、修改文件)。chroot_local_user=YES
(将用户锁定在自己的主目录,提升安全性);allow_writeable_chroot=YES
(允许chroot目录可写,避免因目录不可写导致的权限错误)。anonymous_enable=NO
(关闭匿名用户登录,防止未授权访问)。xferlog_enable=YES
(记录文件传输日志,便于审计)。使用useradd
命令创建专用FTP用户,并设置密码:
sudo useradd -m ftpuser -d /home/ftpuser # -m创建家目录,-d指定家目录路径
sudo passwd ftpuser # 设置用户密码
755
(用户可读写执行,组和其他用户仅可读执行):sudo chown ftpuser:ftpuser /home/ftpuser
sudo chmod 755 /home/ftpuser
775
,所有者为用户:sudo mkdir -p /home/ftpuser/uploads
sudo chown ftpuser:ftpuser /home/ftpuser/uploads
sudo chmod 775 /home/ftpuser/uploads
/etc/vsftpd.conf
,启用用户列表功能:userlist_enable=YES
userlist_file=/etc/vsftpd.userlist # 指定用户列表文件路径
userlist_deny=NO # 只允许列表中的用户登录(若设为YES,则拒绝列表中的用户)
sudo nano /etc/vsftpd.userlist
# 示例:添加ftpuser1和ftpuser2
ftpuser1
ftpuser2
编辑PAM认证文件/etc/pam.d/vsftpd
,确保以下行未被注释(用于关联用户列表与PAM认证):
auth required pam_listfile.so item=user sense=allow file=/etc/vsftpd.userlist onerr=succeed
account required pam_listfile.so item=user sense=allow file=/etc/vsftpd.userlist onerr=succeed
若需要更灵活的权限控制(如不同用户对应不同目录、权限级别),可使用虚拟用户:
sudo nano /etc/vsftpd/virtual_users.txt # 格式:username password(每行一个用户)
ftpvirt1
pass123
ftpvirt2
pass456
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 # 设置数据库文件权限
/etc/pam.d/vsftpd
,替换为虚拟用户认证:auth required pam_userdb.so db=/etc/vsftpd/virtual_users
account required pam_userdb.so db=/etc/vsftpd/virtual_users
/etc/vsftpd.conf
:guest_enable=YES
guest_username=ftpvirt # 虚拟用户的系统映射账户(需提前创建,如ftpvirt)
virtual_use_local_privs=YES # 虚拟用户继承本地用户权限
user_sub_token=$USER # 动态生成用户主目录(如/home/virt/ftpuser1)
local_root=/home/virt/$USER # 虚拟用户的主目录路径
chroot_local_user=YES
allow_writeable_chroot=YES
sudo useradd -m ftpvirt -d /home/virt/ftpvirt -s /sbin/nologin # 系统账户,无登录权限
sudo chown ftpvirt:ftpvirt /home/virt/ftpvirt
sudo chmod 755 /home/virt/ftpvirt
完成配置后,重启vsftpd服务使更改生效:
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd # 设置开机自启
使用FTP客户端(如FileZilla)或命令行工具测试连接,验证用户权限是否符合预期(如能否登录、上传/下载文件、是否被限制在主目录)。
30000:31000
):sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp
sudo ufw reload
ssl_enable=YES
),避免密码和数据明文传输;避免将用户主目录权限设为777
(完全开放),以免造成安全隐患。