首先更新系统软件包列表并安装vsftpd:
sudo apt update
sudo apt install vsftpd
编辑/etc/vsftpd.conf(建议先备份原文件),根据需求调整以下关键参数:
local_enable=YES # 允许本地系统用户登录
write_enable=YES # 允许用户上传/修改文件
local_umask=022 # 设置上传文件权限掩码(默认755)
chroot_local_user=YES # 将用户限制在自己的主目录(增强安全性)
allow_writeable_chroot=YES # 允许chroot目录可写(若需用户修改主目录内容)
userlist_enable=YES # 启用用户列表功能
userlist_file=/etc/vsftpd.userlist # 指定用户列表文件路径
userlist_deny=NO # 仅允许列表中的用户登录(若设为YES则禁止列表用户)
listen=YES # 使用独立模式(而非inetd)
ssl_enable=YES # 启用SSL加密(推荐,需配置证书)
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
-m:自动创建主目录(/home/ftpuser);-s /sbin/nologin:禁止用户通过SSH登录,仅允许FTP访问。sudo passwd ftpuser
按提示输入并确认密码。
确保用户主目录归属正确且权限合规:
sudo chown ftpuser:ftpuser /home/ftpuser # 所有权归用户自身
sudo chmod 755 /home/ftpuser # 允许用户读写执行,其他用户仅读/执行
若需用户上传文件到子目录(如/home/ftpuser/upload),需额外设置:
sudo mkdir -p /home/ftpuser/upload
sudo chown ftpuser:ftpuser /home/ftpuser/upload
sudo chmod 755 /home/ftpuser/upload
编辑/etc/vsftpd.userlist,添加允许登录的用户名(每行一个):
echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist
userlist_deny=NO(默认),则仅列表中的用户可登录;userlist_deny=YES,并在列表中添加该用户。若需要更细粒度的权限控制(如不同用户对应不同目录),可配置虚拟用户:
sudo apt install libdb3-util
用户名 密码):sudo nano /etc/vsftpd/virtual_users.txt
添加内容:virtualuser1 password1
virtualuser2 password2
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=virtualuser # 虚拟用户映射的系统用户(需提前创建)
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_configs
/etc/vsftpd/user_configs/virtualuser1):local_root=/home/virtualuser1
write_enable=YES
sudo systemctl restart vsftpd
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd # 设置开机自启
使用FTP客户端(如FileZilla)连接服务器,输入用户名ftpuser和密码,验证是否能正常登录、上传/下载文件。
若系统启用了ufw防火墙,需允许FTP流量:
sudo ufw allow 21/tcp # FTP控制端口
sudo ufw allow 990/tcp # FTPS控制端口(若启用SSL)
sudo ufw allow 30000:31000/tcp # FTP被动模式端口范围(根据实际情况调整)
sudo ufw reload
sudo setsebool -P ftp_home_dir on # 允许FTP访问用户主目录
/var/log/vsftpd.log,可通过tail -f /var/log/vsftpd.log实时查看用户活动。pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
并确保防火墙允许该端口范围。