vsftpd 是一个在 Linux/Unix 系统上非常流行的 FTP 服务器软件,它的特点是高速、安全和稳定。

第一步:更新系统并安装 vsftpd
打开终端(快捷键 Ctrl+Alt+T),然后执行以下命令。
-
更新软件包列表: 这是一个好习惯,确保你获取的是最新的软件信息。
sudo apt update
-
安装 vsftpd: 使用
apt包管理器来安装。sudo apt install vsftpd -y
安装完成后,vsftpd 服务会自动启动,你可以通过以下命令检查其状态:
(图片来源网络,侵删)sudo systemctl status vsftpd
如果看到绿色的
active (running)字样,说明服务正在运行。
第二步:配置防火墙(重要!)
为了能让外部计算机访问你的 FTP 服务,必须允许 FTP 端口通过防火墙。
Ubuntu 默认使用 ufw (Uncomplicated Firewall)。
-
允许 FTP 流量: FTP 协议比较特殊,它使用两个端口:一个控制端口(默认 21)和一个数据端口(范围较广)。
ufw有一个预设规则可以方便地开启 FTP。
(图片来源网络,侵删)sudo ufw allow ftp
-
重新加载防火墙规则(如果之前有修改)并启用防火墙:
sudo ufw reload sudo ufw enable
在启用时,输入
y确认。
第三步:配置 vsftpd
这是最核心的一步,我们将修改 vsftpd 的配置文件来设置匿名访问、本地用户访问、权限等。
-
打开配置文件: 使用
nano或vim等文本编辑器打开配置文件。sudo nano /etc/vsftpd.conf
-
修改关键配置项: 打开文件后,找到或添加/修改以下行,我会解释每一项的作用。
# --- 基本设置 --- listen=YES # 让 vsftpd 以独立模式监听,而不是由 xinetd 管理 anonymous_enable=NO # 【重要】禁止匿名用户登录,出于安全考虑 local_enable=YES # 允许本地用户登录 write_enable=YES # 允许本地用户上传文件(需要配合下面的权限设置) local_umask=022 # 本地用户上传文件后的默认权限掩码 (644 for files, 755 for dirs) # --- 访问控制 --- chroot_local_user=YES # 【非常重要】将本地用户限制在其主目录中,防止他们访问系统其他文件 allow_writeable_chroot=YES # 【重要】允许被 chroot 的用户拥有写权限,新版本 vsftpd 需要 user_sub_token=$USER # 定义用户目录的变量 local_root=/home/$USER/ftp # 【关键】为每个用户指定一个独立的 FTP 目录,这样更安全! # 用户 'testuser' 的 FTP 根目录将是 /home/testuser/ftp # --- 日志设置 --- xferlog_enable=YES # 启用上传/下载日志 xferlog_std_format=YES # 使用标准日志格式 log_ftp_protocol=YES # 记录所有的 FTP 协议命令 # --- 安全性增强 --- pasv_min_port=40000 # 被动模式使用的最小端口 pasv_max_port=50000 # 被动模式使用的最大端口配置解释:
anonymous_enable=NO: 强烈建议禁止匿名登录,否则任何人都可以访问你的服务器。local_root=/home/$USER/ftp: 这条配置是最佳实践,它为每个登录 FTP 的用户创建了一个“沙盒”目录,用户alice登录后,她看到的根目录就是/home/alice/ftp,她无法访问/home/alice下的其他文件(如.ssh目录),也无法访问/home/bob目录,这极大地提高了安全性。allow_writeable_chroot=YES: 当你使用chroot并且用户需要有写入权限时(比如上传文件),这个选项是必需的。
-
保存并退出: 在
nano编辑器中,按Ctrl + X,然后按Y,最后按Enter键保存文件。
第四步:为 FTP 用户创建专用目录
上一步我们配置了 local_root=/home/$USER/ftp,现在需要为每个 FTP 用户创建这个目录并设置正确的权限。
假设你要为用户 testuser 创建 FTP 目录:
-
创建 FTP 目录:
sudo mkdir -p /home/testuser/ftp
-
设置目录所有者: 必须确保 FTP 用户拥有这个目录的所有权。
sudo chown -R testuser:testuser /home/testuser/ftp
-
设置目录权限: 目录权限必须是
755(所有者可读/写/执行,组和其他用户可读/执行),否则用户可能无法进入。sudo chmod -R 755 /home/testuser/ftp
-
(可选)在目录中放一个测试文件:
echo "Hello, this is a test file for FTP." | sudo tee /home/testuser/ftp/test.txt
注意:你需要为每一个需要 FTP 访问的 Linux 用户重复第四步的操作。
第五步:重启 vsftpd 服务并测试
-
重启 vsftpd 服务: 让新的配置生效。
sudo systemctl restart vsftpd
-
测试连接:
-
使用文件管理器: 在你的电脑上(Windows, macOS, 或另一台 Linux),打开文件管理器。 在地址栏输入:
ftp://你的服务器IP地址ftp://192.168.1.100- 系统会提示你输入用户名和密码,输入你刚刚配置的用户(如
testuser)和密码。 - 登录成功后,你应该能看到
/home/testuser/ftp目录下的内容。
-
使用命令行: 在你的电脑上打开终端,输入:
ftp 你的服务器IP地址
然后输入用户名和密码进行交互式操作。
-
第六步:排错指南
如果连接失败,请检查以下几点:
-
检查服务状态:
sudo systemctl status vsftpd
确保服务是
active (running)状态。 -
检查防火墙规则:
sudo ufw status
确保能看到
ALLOW IN的FTP规则。 -
检查 SELinux: Ubuntu 默认不启用 SELinux,所以通常可以忽略,但如果你的系统有特殊配置,可能需要运行
setsebool -P ftpd_full_access on。 -
查看日志文件: 日志是排错的最佳工具,vsftpd 的日志通常在
/var/log/目录下。sudo tail -f /var/log/vsftpd.log
在另一个终端尝试连接,然后观察这个日志文件的输出,它会告诉你连接和认证过程中的详细信息。
-
检查被动模式端口: 如果使用文件管理器连接时卡在 "列出目录" 步骤,很可能是被动模式的端口被防火墙阻隔了,确保你的防火墙(无论是服务器上的
ufw还是客户端的防火墙/路由器)允许了我们配置的40000-50000端口范围。
安全建议
- 使用 SFTP:对于新项目,强烈建议使用 SFTP (SSH File Transfer Protocol),它通过 SSH 连接传输文件,是加密的,并且端口单一(通常是 22),比 FTP 更安全、更易于管理,如果你只是需要文件传输功能,SFTP 通常是更好的选择。
- 创建专门的 FTP 用户:不要使用
root或其他有系统权限的用户来登录 FTP,最好创建一些专门用于 FTP 传输的、权限受限的用户。 - 定期更新:保持你的系统和
vsftpd软件包是最新版本,以修复已知的安全漏洞。
按照以上步骤,你就可以成功地在 Ubuntu 上搭建一个安全、可用的 FTP 服务器了。
