第一步:安装 vsftpd
打开你的终端(Terminal),使用 apt 包管理器来安装 vsftpd。

sudo apt update sudo apt install vsftpd
安装完成后,vsftpd 服务会自动启动,你可以通过以下命令检查其状态:
sudo systemctl status vsftpd
如果看到绿色的 active (running) 字样,说明服务正在运行。
第二步:配置 vsftpd
这是最关键的一步,我们将编辑 vsftpd 的主配置文件 /etc/vsftpd.conf。
备份原始配置文件 在进行任何修改之前,最好先备份一下原始配置文件。

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
编辑配置文件
使用你喜欢的文本编辑器(如 nano)来打开配置文件。
sudo nano /etc/vsftpd.conf
下面是配置文件中一些最重要的选项及其推荐设置,你可以根据你的需求进行修改。
# 禁止匿名用户登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许本地用户有写权限(上传、创建目录等) write_enable=YES # 启用用户列表,并限制只有该列表中的用户才能登录 userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO # NO表示只允许列表中的用户,YES表示禁止列表中的用户 # 启用 chroot 功能,将用户限制在其主目录中 # 这是非常重要的安全特性! chroot_local_user=YES # chroot_local_user=YES,下面的设置可以防止用户在 chroot 环境中拥有写权限时 # 出现权限问题,vsftpd 2.3.5 之后需要这个设置。 allow_writeable_chroot=YES # 设置欢迎信息 ftpd_banner=Welcome to FTP service. # 设置数据连接的端口范围,用于被动模式(推荐) pasv_min_port=10000 pasv_max_port=10100 # 启用日志记录 xferlog_enable=YES xferlog_std_format=YES xferlog_file=/var/log/vsftpd.log
配置解释:
anonymous_enable=NO:出于安全考虑,我们禁止匿名访问。local_enable=YES:允许系统上的用户登录。write_enable=YES:允许用户进行写操作(如上传文件)。userlist_enable=YES和userlist_deny=NO:这是一个非常安全的做法,它会读取/etc/vsftpd.userlist文件,只允许文件中列出的用户登录,这比直接在系统用户中挑选更灵活和安全。chroot_local_user=YES:将用户“监禁”在其自己的家目录下,用户testuser登录后,只能在/home/testuser目录及其子目录中活动,无法访问/etc,/var等系统敏感区域。allow_writeable_chroot=YES:当chroot环境是可写时,这个选项可以避免一个安全警告。pasv_min_port和pasv_max_port:强烈建议设置,这为 FTP 的被动模式数据连接指定了一个端口范围,后面在配置防火墙时,你需要开放这个范围内的端口。
保存并退出文件:
在 nano 编辑器中,按 Ctrl + X,然后按 Y,最后按 Enter。
第三步:创建 FTP 用户并配置权限
创建一个专门用于 FTP 的用户
为了安全,最好不要直接使用系统已有的管理员用户(如 root),我们创建一个新用户,ftpuser。
sudo adduser ftpuser
按照提示设置该用户的密码和相关信息,这个用户会被自动创建一个家目录,/home/ftpuser。
将用户添加到允许登录的列表
根据我们上面的配置,需要将 ftpuser 添加到 /etc/vsftpd.userlist 文件中。
echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist
echo "ftpuser":输出用户名。| sudo tee -a /etc/vsftpd.userlist:使用tee命令,以追加 (-a) 的方式将用户名写入到vsftpd.userlist文件中。
你可以用 cat 命令检查文件内容是否正确:
cat /etc/vsftpd.userlist
设置用户目录的权限
确保 ftpuser 对其家目录有正确的读写权限。
sudo chown -R ftpuser:ftpuser /home/ftpuser sudo chmod -R 755 /home/ftpuser
chown:更改目录所有者为ftpuser。chmod 755:设置所有者有读写执行权限,组用户和其他用户有读和执行权限,这是标准的目录权限设置。
第四步:配置防火墙
Ubuntu 自带的 ufw (Uncomplicated Firewall) 默认会阻止 FTP 连接,因为 FTP 使用了动态数据端口,比较特殊,我们需要为它创建一个“应用配置文件”来允许流量。
安装 ufw-applications
如果你的 ufw 没有应用配置功能,可能需要安装这个包。
sudo apt install ufw-applications
允许 FTP 流量
直接使用以下命令,ufw 会自动处理 FTP 的复杂端口问题。
sudo ufw allow ftp
开放我们为被动模式设置的端口范围
还记得我们在 vsftpd.conf 中设置的 10000-10100 吗?现在需要开放这个端口范围。
sudo ufw allow 10000:10100/tcp
启用防火墙 如果你的防火墙尚未启用,现在启用它。
sudo ufw enable
(如果已经启用,跳过此步)
检查防火墙规则 确认规则是否添加成功。
sudo ufw status
你应该能看到 ALLOW 列下有 FTP 和 10000:10100/tcp 的规则。
第五步:重启 vsftpd 服务并测试
重启服务 让所有新的配置生效。
sudo systemctl restart vsftpd
使用 FTP 客户端连接测试 现在你可以使用任何 FTP 客户端来测试了。
- Windows: 使用文件资源管理器,在地址栏输入
ftp://<你的服务器IP地址>。 - macOS/Linux: 使用命令行
ftp <你的服务器IP地址>。 - 专用软件: FileZilla 是一个非常流行的图形化 FTP 客户端。
连接信息:
- 主机/服务器: 你的 Ubuntu 服务器的 IP 地址 (
168.1.100或公网 IP) - 用户名:
ftpuser - 密码: 你在创建用户时设置的密码
如果连接失败,请检查:
- 用户名和密码是否正确。
/etc/vsftpd.userlist文件中是否包含了正确的用户名。- 防火墙规则是否正确。
vsftpd服务是否正在运行 (sudo systemctl status vsftpd)。- 尝试在服务器上使用
tail -f /var/log/vsftpd.log查看服务器端的日志,可能会发现错误信息。
第六步:安全最佳实践(可选但推荐)
-
禁用 Shell 访问: 如果你只想让用户通过 FTP 访问,而不想让他们通过 SSH 登录服务器,可以将其登录 shell 设置为
/usr/sbin/nologin。sudo usermod -s /usr/sbin/nologin ftpuser
-
使用 SFTP (SSH File Transfer Protocol): 强烈推荐使用 SFTP,它通过 SSH 协议传输文件,数据是加密的,且默认在大多数 SSH 服务器上都是可用的,现代 FTP 客户端(如 FileZilla)都支持 SFTP,它的配置比 FTP 简单得多,也更安全。
-
使用 SSL/TLS 加密 FTP 连接: 如果你必须使用 FTP,可以配置
vsftpd使用 FTPS (FTP over SSL/TLS) 来加密传输,这需要你生成 SSL 证书并修改vsftpd.conf中的相关配置(如ssl_enable=YES,rsa_cert_file=/path/to/cert.pem等),配置过程相对复杂,但安全性大大提高。
至此,你已经成功在 Ubuntu 上搭建了一个基本功能且相对安全的 FTP 服务器。
回顾关键步骤:
sudo apt install vsftpdsudo nano /etc/vsftpd.conf(配置anonymous_enable=NO,chroot_local_user=YES,userlist_deny=NO等)sudo adduser ftpuser并echo "ftpuser" | sudo tee -a /etc/vsftpd.userlistsudo ufw allow ftp和sudo ufw allow 10000:10100/tcpsudo systemctl restart vsftpd- 使用 FileZilla 或其他客户端进行测试。
