Ubuntu 12.04 已经非常古老,早已停止官方支持(End of Life),这意味着它没有安全更新,存在严重的安全风险, 强烈建议您升级到更新的 LTS 版本(如 20.04 或 22.04),如果必须在旧环境中进行操作,请务必确保该服务器处于隔离的网络环境中,并且不暴露在公网上。

本教程将使用 vsftpd (Very Secure FTP Daemon),这是 Ubuntu/Debian 系统上最常用、最安全的 FTP 服务器软件。
第一步:安装 vsftpd
登录到您的 Ubuntu 12.04 服务器,然后打开终端,执行以下命令来安装 vsftpd:
sudo apt-get update sudo apt-get install vsftpd
安装完成后,vsftpd 服务会自动启动,我们可以使用以下命令检查其状态:
sudo service vsftpd status
第二步:配置 vsftpd
vsftpd 的主配置文件位于 /etc/vsftpd.conf,我们需要编辑这个文件来满足我们的需求。

-
备份原始配置文件(这是一个好习惯):
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
-
编辑配置文件:
sudo nano /etc/vsftpd.conf
打开文件后,我们需要修改或取消注释(去掉行首的 )以下关键选项:
# 允许匿名用户登录(默认是NO,建议保持NO) anonymous_enable=NO # 允许本地用户登录(YES) local_enable=YES # 允许本地用户执行写操作(如上传、创建目录、删除文件) write_enable=YES # 设置本地用户的上传目录的掩码(建议保持默认) # local_umask=022 # 启用 chroot 功能,将用户限制在其主目录下,防止他们访问系统其他文件 # 这是非常重要的安全设置! chroot_local_user=YES # 当 chroot 启用时,如果用户的主目录没有写入权限,可能会报错。 # 下面这行可以解决这个问题,允许 chroot 后的用户写入。 allow_writeable_chroot=YES # 启用用户列表功能 userlist_enable=YES # 指定用户列表文件,只有在这个文件中的用户才能登录 userlist_file=/etc/vsftpd.userlist # 设置用户列表模式:YES 表示仅允许列表中的用户登录,NO 表示禁止列表中的用户登录 # 我们这里设置为 YES,实现白名单机制 userlist_file=/etc/vsftpd.userlist userlist_deny=NO # 日志记录 xferlog_enable=YES xferlog_std_format=YES vsftpd_log_file=/var/log/vsftpd.log
其他常用选项解释:
(图片来源网络,侵删)listen=YES: 让vsftpd以独立模式运行,监听在 IPv4 的 21 端口。listen_ipv6=NO: 如果您不使用 IPv6,可以禁用它。pasv_min_port=40000和pasv_max_port=50000: 如果您的客户端使用被动模式(推荐),这设置了被动模式使用的端口范围,您需要在防火墙中开放这个端口范围。
-
保存并退出: 在
nano编辑器中,按Ctrl + X,然后按Y,最后按Enter。
第三步:创建 FTP 用户
为了安全起见,我们不应该使用系统用户(如 root)来登录 FTP,我们需要为 FTP 创建一个专用的用户。
-
创建新用户: 假设我们要创建一个名为
ftpuser的用户。sudo adduser ftpuser
系统会提示您设置该用户的密码和用户信息,请设置一个强密码。
-
(可选)设置用户主目录: 默认情况下,
ftpuser的主目录是/home/ftpuser,如果您想指定其他目录,/var/www/ftp,可以这样做:# 创建目标目录 sudo mkdir -p /var/www/ftp sudo chown -R ftpuser:ftpuser /var/www/ftp
-
将用户添加到 vsftpd 用户列表: 我们之前在配置文件中设置了
userlist_deny=NO,这意味着只有/etc/vsftpd.userlist文件中列出的用户才能登录,我们需要将ftpuser添加到这个列表中。- 创建/编辑用户列表文件:
sudo nano /etc/vsftpd.userlist
- 在文件中添加您的用户名,每行一个用户:
ftpuser - 保存并退出 (
Ctrl + X,Y,Enter)。
- 创建/编辑用户列表文件:
第四步:配置防火墙
Ubuntu 12.04 默认使用 ufw (Uncomplicated Firewall) 作为防火墙前端,我们需要开放 FTP 服务所需的端口。
FTP 协议比较特殊,它使用两个端口:
- 命令端口: 21 (主动和被动模式都使用)
- 数据端口: 范围不定(被动模式)
-
开放命令端口 21:
sudo ufw allow 21/tcp
-
开放被动模式数据端口范围: 我们在配置文件中设置了
40000-50000,所以开放这个范围。sudo ufw allow 40000:50000/tcp
-
启用防火墙: 如果防火墙尚未启用,请启用它。
sudo ufw enable
系统会提示您确认,输入
y即可。
第五步:重启 vsftpd 服务并测试
-
重启 vsftpd 服务,使所有新配置生效:
sudo service vsftpd restart
-
测试连接: 您可以使用任何 FTP 客户端软件(如 FileZilla, WinSCP 等)进行测试。
- 主机: 您服务器的 IP 地址
- 端口: 21
- 用户名:
ftpuser - 密码: 您为
ftpuser设置的密码
使用命令行测试:
ftp <您的服务器IP地址>
然后输入用户名和密码。
如果连接成功,并且您被限制在
/home/ftpuser目录下,那么恭喜您,配置成功了!
常见问题与解决方案
问题1:500 OOPS: cannot change directory:/home/ftpuser
- 原因: 这是最常见的问题,当
chroot_local_user=YES时,vsftpd默认不允许用户在其主目录中进行写入操作,如果主目录的权限是755(drwxr-xr-x),它会报错。 - 解决方案:
- 推荐方法: 在
vsftpd.conf中添加allow_writeable_chroot=YES,我们已经在上面的配置中包含了这一行。 - 备选方法: 修改用户主目录的权限,使其对用户可写。
sudo chmod 755 /home/ftpuser # 或者更宽松的权限(不推荐,但有作用) sudo chmod 775 /home/ftpuser
- 推荐方法: 在
问题2:连接被拒绝或超时,特别是在被动模式下
- 原因: 防火墙或路由器没有开放被动模式所需的端口范围。
- 解决方案:
- 确认防火墙(
ufw或云服务商的安全组)开放了40000-50000这个端口范围。 - 如果您在客户端(如 FileZilla)设置了被动模式,请确保服务器端的配置
pasv_min_port和pasv_max_port与客户端的设置匹配。
- 确认防火墙(
问题3:用户无法登录,但用户名和密码正确
- 原因: 用户不在
/etc/vsftpd.userlist文件中。 - 解决方案:
- 检查
/etc/vsftpd.userlist文件,确保用户名在其中,并且没有拼写错误。 - 检查
/etc/vsftpd.conf中的userlist_deny=NO设置,确保是“白名单”模式。
- 检查
安全性再次强调
- 使用 SFTP (SSH File Transfer Protocol):FTP 协议在传输数据时是明文的,包括用户
