配置Ubuntu FTP Server虚拟路径(基于vsftpd)
首先确保系统已安装vsftpd(Ubuntu默认仓库提供),通过以下命令安装:
sudo apt update
sudo apt install vsftpd
编辑vsftpd主配置文件/etc/vsftpd.conf
,确保以下核心设置启用(取消注释或添加):
listen=YES # 启用IPv4监听
listen_ipv6=NO # 禁用IPv6(若无需IPv6)
anonymous_enable=NO # 禁止匿名用户登录
local_enable=YES # 允许本地用户登录
write_enable=YES # 允许FTP写操作(上传/删除)
local_umask=022 # 设置文件默认权限掩码
dirmessage_enable=YES # 显示目录欢迎信息
use_localtime=YES # 使用本地时间
xferlog_enable=YES # 启用传输日志
connect_from_port_20=YES # 启用FTP数据端口(20)
chroot_local_user=YES # 将用户限制在主目录(增强安全性)
secure_chroot_dir=/var/run/vsftpd/empty # chroot专用空目录
pam_service_name=vsftpd # 使用vsftpd的PAM认证
userlist_enable=YES # 启用用户列表文件
tcp_wrappers=YES # 启用TCP Wrappers访问控制
假设为用户ftpuser
创建虚拟路径/home/ftpuser/virtual
(可自定义路径):
sudo mkdir -p /home/ftpuser/virtual # 创建虚拟目录(-p递归创建父目录)
sudo chown ftpuser:ftpuser /home/ftpuser/virtual # 设置目录所有者为ftpuser
sudo chmod 755 /home/ftpuser/virtual # 设置目录权限(所有者可读写执行,其他用户可读执行)
在/etc/vsftpd.conf
中添加以下参数,将用户主目录映射到虚拟路径:
virtual_use_local_privs=YES # 允许虚拟路径使用本地用户权限
user_sub_token=$USER # 使用$USER变量动态匹配用户名
local_root=/home/$USER/virtual # 动态设置用户主目录为虚拟路径(如ftpuser的主目录为/home/ftpuser/virtual)
说明:user_sub_token
和local_root
的组合可实现“用户名对应虚拟路径”的动态映射,避免为每个用户单独配置。
若需让用户能在虚拟路径中上传文件,需修改chroot目录的权限(vsftpd默认不允许chroot目录可写):
sudo sed -i 's/#allow_writeable_chroot=YES/allow_writeable_chroot=YES/' /etc/vsftpd.conf
或直接添加allow_writeable_chroot=YES
到配置文件末尾。
保存所有配置后,重启vsftpd使更改生效:
sudo systemctl restart vsftpd
# 设置开机自启(可选)
sudo systemctl enable vsftpd
使用FTP客户端(如FileZilla、WinSCP或命令行工具ftp
)连接服务器:
ftpuser
(或你创建的本地用户)/virtual
目录(即虚拟路径),并执行上传、下载等操作。sudo ufw allow 21/tcp
sudo ufw allow 20/tcp # 若启用被动模式(PASV),还需开放数据端口范围
setsebool -P ftpd_full_access on
)。/etc/vsftpd.conf
中添加:pasv_enable=YES
pasv_min_port=60000
pasv_max_port=61000
并开放对应的端口范围。通过以上步骤,即可完成Ubuntu FTP Server虚拟路径的配置,为用户提供隔离的FTP访问空间。