安装和配置 vsftpd (Very Secure FTP Daemon),设置一个安全的用户隔离(chroot)环境,并配置被动模式(PASV)以穿越防火墙。
步骤一:安装 VSFTPD
首先,更新你的包列表并安装 vsftpd 软件包:
sudo apt update
sudo apt install vsftpd -y
步骤二:配置 VSFTPD
编辑主配置文件 /etc/vsftpd.conf。
sudo vi /etc/vsftpd.conf
确保文件中有以下配置项。(请将 pasv_address 替换为你的真实 IP):
# --- 基础设置 ---
# 允许 vsftpd 独立运行
listen=YES
# (可选) 如果你不需要 IPv6,可以关闭它
# listen_ipv6=NO
# --- 权限和上传 ---
# 允许本地用户登录 (例如 username)
local_enable=YES
# 允许 FTP 用户上传文件
write_enable=YES
# 上传文件的默认权限 (文件 644, 目录 755)
local_umask=022
# --- 安全性 (Chroot) ---
# 将本地用户限制在他们自己的主目录中
chroot_local_user=YES
# 关键:允许 chroot 目录本身是可写的。
# 如果没有此项,当 /home/username 可写时,vsftpd 会拒绝登录
allow_writeable_chroot=YES
# --- 被动模式 (PASV) - 防火墙关键 ---
# 启用被动模式
pasv_enable=YES
# 被动模式最小端口
pasv_min_port=30000
# 被动模式最大端口
pasv_max_port=30010
# 替换为你的服务器公网 IP 地址!
pasv_address=115.115.209.86
# --- 用户特定配置 (根据你的记录) ---
# local_root 将所有用户锁定到 /home/username
# user_sub_token 在此配置中不是必需的,因为 local_root 没有 $USER 变量
# 但我们保留你的配置,它不会产生负面影响
user_sub_token=username
local_root=/home/username
# --- (推荐) 启用用户列表 ---
# 启用用户列表文件
userlist_enable=YES
# 指定文件路径
userlist_file=/etc/vsftpd.userlist
# 设为 NO 意味着:只有 userlist 文件中的用户 *允许* 登录
userlist_deny=NO
步骤三:创建 FTP 用户和目录
根据 vsftpd.conf 中的配置 (local_root=/home/username),我们需要创建相应的目录和用户。
创建根目录:
sudo mkdir -p /home/username
创建专用的 FTP 用户 (username): 系统会提示你设置一个安全的密码。
sudo adduser username
设置目录所有权: 确保 username 用户拥有该目录。
sudo chown -R username:username /home/username
设置目录权限:
sudo chmod 755 /home/username
提高安全性: 禁止此 FTP 用户通过 SSH 登录服务器。
sudo usermod -s /usr/sbin/nologin username
将用户添加到允许列表: (如果你在步骤二中启用了 userlist_enable)
echo "username" | sudo tee -a /etc/vsftpd.userlist
步骤四:配置防火墙 (UFW)
这是确保被动模式正常工作的关键。我们需要打开 FTP 控制端口 (21) 和你在配置中指定的被动端口范围 (30000-30010)。
# 1. 允许 FTP 控制端口
sudo ufw allow 21/tcp
# 2. 允许 FTP 数据端口 (传统主动模式)
sudo ufw allow 20/tcp
# 3. 允许被动模式的端口范围 (必须与 vsftpd.conf 一致)
sudo ufw allow 30000:30010/tcp
# 4. 重新加载防火墙规则
sudo ufw reload
# 5. 检查状态
sudo ufw status
步骤五:重启并验证服务
应用所有更改并检查 vsftpd 服务是否正常运行。
# 重启 vsftpd 服务
sudo systemctl restart vsftpd
# 检查服务状态
sudo systemctl status vsftpd
如果状态显示 active (running),则说明服务器已成功启动。按 q 退出状态查看。
步骤六:测试连接
使用 FTP 客户端(如 FileZilla、WinSCP)进行连接测试。
重要提示: 在 FTP 客户端的“站点管理器”或“连接设置”中,将“传输模式”或“加密”设置为 "使用被动模式 (PASV)"。
如果连接成功,你应该能成功列出目录(LIST 命令),并且你会被自动限制在 /home/username 目录中。