一、安装vsftpd
首先确保系统已安装vsftpd(Ubuntu默认仓库提供),使用以下命令安装:
sudo apt update
sudo apt install vsftpd
二、基础配置vsftpd
编辑vsftpd的主配置文件/etc/vsftpd.conf(需root权限),修改以下关键参数以保障安全性和基本功能:
sudo nano /etc/vsftpd.conf
local_enable=YES(允许系统用户通过FTP登录);write_enable=YES(允许用户上传/修改文件);chroot_local_user=YES(将用户限制在其主目录,防止访问系统其他路径);allow_writeable_chroot=YES(解决chroot后目录不可写的问题);virtual_use_local_privs=YES(虚拟目录继承本地用户的权限);anonymous_enable=NO(禁止匿名用户访问,提升安全性)。三、创建本地用户及虚拟目录
sudo adduser ftpuser --shell /sbin/nologin
按提示设置用户密码(如ftpuser123)和其他信息。
ftpuser创建虚拟目录/home/ftpuser/virtual_dir):sudo mkdir -p /home/ftpuser/virtual_dir
sudo chown ftpuser:ftpuser /home/ftpuser/virtual_dir
sudo chmod 755 /home/ftpuser/virtual_dir
四、配置虚拟目录映射
编辑/etc/vsftpd.conf,添加以下参数将用户主目录与虚拟目录关联:
user_sub_token=$USER # 使用$USER变量动态匹配用户名
local_root=/home/$USER/virtual_dir # 虚拟目录路径($USER会替换为登录用户名)
说明:若需为多个用户配置不同虚拟目录,可重复创建用户及对应目录,并保持上述配置不变($USER会自动适配当前用户)。
五、重启vsftpd服务
保存配置文件后,重启vsftpd服务使更改生效:
sudo systemctl restart vsftpd
如需设置开机自启,可执行:
sudo systemctl enable vsftpd
六、测试虚拟目录访问
使用FTP客户端(如FileZilla、WinSCP或命令行工具ftp)连接服务器:
ftpuser(步骤三创建的本地用户);/virtual_dir),验证是否能正常列出、上传/下载文件。七、常见问题排查
无法访问虚拟目录:
vsftpd.conf中的chroot_local_user是否设为YES,local_root路径是否正确;chown和chmod)是否符合要求;/var/log/vsftpd.log)定位具体错误。防火墙拦截:
若服务器启用了防火墙(如ufw),需允许FTP流量:
sudo ufw allow 21/tcp # FTP默认控制端口
sudo ufw allow 20/tcp # FTP数据传输端口(主动模式)
sudo ufw allow 1024:1048/tcp # FTP被动模式端口范围(根据实际情况调整)
SELinux限制(仅限CentOS/RHEL):
若系统启用SELinux,需调整策略允许FTP访问用户目录:
sudo setsebool -P ftp_home_dir on # 允许FTP访问用户主目录
sudo chcon -Rt httpd_sys_content_t /home/ftpuser/virtual_dir # 设置目录安全上下文