在Ubuntu系统中搭建FTP服务器是一个常见的需求,无论是用于文件共享、网站托管还是数据备份,FTP(文件传输协议)都提供了一种简单高效的方式,本文将详细介绍如何在Ubuntu上使用vsftpd(Very Secure FTP Daemon)搭建一个安全、稳定的FTP服务器,包括安装、配置、用户管理、安全设置以及常见问题的解决方法。

安装vsftpd
vsftpd是Ubuntu中最常用的FTP服务器软件,以其安全性和稳定性著称,需要更新系统软件包列表,然后安装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
以下是关键配置项及其说明:
-
允许匿名用户访问
默认情况下,vsftpd允许匿名用户登录,如果不需要此功能,需将anonymous_enable=YES改为anonymous_enable=NO。 -
允许本地用户访问
将local_enable=YES设置为允许本地系统用户通过FTP登录。
(图片来源网络,侵删) -
允许文件上传和修改
将write_enable=YES设置为允许用户上传、修改和删除文件。 -
设置用户目录限制
默认情况下,用户登录后会被限制在其主目录中,如果需要限制用户只能访问其主目录下的特定文件夹,可以设置chroot_local_user=YES,并确保该目录的权限正确。 -
启用被动模式
被动模式(Passive Mode)适用于客户端位于防火墙后的情况,添加以下配置:pasv_enable=YES pasv_min_port=10000 pasv_max_port=10100
这将设置被动模式使用的端口范围为10000-10100,确保这些端口在防火墙中开放。
-
启用日志记录
将xferlog_enable=YES和xferlog_file=/var/log/vsftpd.log设置为启用FTP操作的日志记录。 -
禁止用户切换到上级目录
将chroot_local_user=YES和allow_writeable_chroot=YES(vsftpd 3.2.0及以上版本)设置为防止用户通过cd ..切换到上级目录,同时允许写入受限制的目录。
完成配置后,保存文件并退出编辑器,然后重启vsftpd服务使配置生效:
sudo systemctl restart vsftpd
创建FTP专用用户
出于安全考虑,建议为FTP服务创建专用的系统用户,而不是使用已有用户,创建一个名为ftpuser的用户,并将其家目录设置为/home/ftpuser:
sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
-s /sbin/nologin表示该用户无法通过SSH登录系统,然后为该用户设置密码:
sudo passwd ftpuser
设置目录权限
确保FTP用户对其主目录具有适当的读写权限,为ftpuser设置权限:
sudo chown -R ftpuser:ftpuser /home/ftpuser sudo chmod -R 755 /home/ftpuser
如果需要允许用户上传文件,还需确保目录的写入权限正确:
sudo chmod -R 775 /home/ftpuser
配置防火墙
如果系统启用了UFW防火墙,需要开放FTP服务的端口(默认为21)和被动模式的端口范围(10000-10100),执行以下命令:
sudo ufw allow 21/tcp sudo ufw allow 10000:10100/tcp sudo ufw reload
测试FTP服务器
可以使用FTP客户端工具(如FileZilla)或命令行测试FTP服务器是否正常工作,在命令行中,使用以下命令登录:
ftp localhost
输入用户名和密码后,如果能成功登录并列出文件,则表示FTP服务器搭建成功。
常见安全设置
-
禁用匿名用户
在vsftpd.conf中确保anonymous_enable=NO,防止匿名用户访问服务器。 -
限制用户登录
可以通过userlist_enable=YES和userlist_file=/etc/vsftpd.userlist创建用户白名单,只允许列表中的用户登录,在/etc/vsftpd.userlist文件中添加用户名,每行一个。 -
启用SSL/TLS加密
为提高安全性,可以启用SSL/TLS加密FTP传输,首先生成SSL证书:sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
然后在
vsftpd.conf中添加以下配置:ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
常见问题排查
-
无法连接到FTP服务器
检查vsftpd服务是否运行、防火墙是否开放端口、用户权限是否正确。 -
用户无法上传文件
确保用户对目录具有写入权限,且write_enable=YES已启用。
相关问答FAQs
问题1:如何限制FTP用户只能访问其主目录,而不能切换到其他目录?
解答:在vsftpd.conf中设置chroot_local_user=YES,这会将用户限制在其主目录中,确保主目录的权限设置正确(chmod 755 /home/ftpuser),以防止用户通过cd ..切换到上级目录,对于vsftpd 3.2.0及以上版本,还需添加allow_writeable_chroot=YES以允许写入受限制的目录。
问题2:如何为FTP服务启用被动模式,并解决客户端连接超时的问题?
解答:在vsftpd.conf中添加以下配置以启用被动模式并指定端口范围:
pasv_enable=YES pasv_min_port=10000 pasv_max_port=10100
确保防火墙开放这些端口(在UFW中执行sudo ufw allow 10000:10100/tcp),如果客户端仍连接超时,可能是路由器或NAT配置问题,需确保FTP服务器的被动模式端口映射到正确的内网IP地址。
