ubuntu搭建ftp服务器
- 云服务器
- 2026-01-04
- 4
在Ubuntu系统中搭建FTP服务器可以通过安装vsftpd(very secure FTP daemon)来实现,vsftpd是一款轻量级、高性能且安全的FTP服务器软件,适用于个人和小型企业环境,以下是详细的搭建步骤及配置方法,包括安装、配置、用户管理、安全设置等全过程。
安装vsftpd
首先需要更新系统软件包列表,然后安装vsftpd,打开终端,执行以下命令:
sudo apt update sudo apt install vsftpd
安装完成后,vsftpd服务会自动启动,可以通过以下命令检查服务状态:
sudo systemctl status vsftpd
若显示“active (running)”,则表示服务已正常运行。
配置vsftpd
vsftpd的主配置文件位于/etc/vsftpd.conf,使用以下命令备份原始配置文件后进行编辑:

以下是关键配置项及其说明(可根据需求修改):
| 配置项 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| anonymous_enable | YES | NO | 是否允许匿名用户访问,建议关闭 |
| local_enable | YES | YES | 是否允许本地用户访问 |
| write_enable | YES | YES | 是否允许本地用户上传文件 |
| chroot_local_user | NO | YES | 是否将本地用户限制在主目录 |
| allow_writeable_chroot | YES | NO | 若chroot_local_user为YES,需禁止用户主目录写权限(避免安全风险) |
| pasv_min_port | 0 (随机) | 10000 | 被动模式最小端口 |
| pasv_max_port | 0 (随机) | 10100 | 被动模式最大端口 |
| user_sub_token | $USER | $USER | 动态生成用户目录的标识符 |
| local_root | /home/$USER | /home/$USER | 本地用户的主目录路径 |
修改后的核心配置示例:
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES allow_writeable_chroot=NO pasv_min_port=10000 pasv_max_port=10100 user_sub_token=$USER local_root=/home/$USER
保存配置后,重启vsftpd服务使配置生效:
sudo systemctl restart vsftpd
创建FTP用户
假设需要创建一个名为ftpuser的FTP专用用户,执行以下命令:
根据提示设置密码和用户信息,若需限制用户仅能通过FTP访问(禁用SSH登录),可以编辑/etc/shells文件,添加/usr/sbin/nologin:
sudo nano /etc/shells
在文件末尾添加/usr/sbin/nologin,然后保存,接着修改用户Shell:
sudo usermod s /usr/sbin/nologin ftpuser
配置防火墙与端口
若系统启用UFW防火墙,需开放FTP相关端口(21命令端口,被动模式数据端口1000010100):
sudo ufw allow 21/tcp sudo ufw allow 10000:10100/tcp sudo ufw reload
若使用iptables,执行:
sudo iptables A INPUT p tcp dport 21 j ACCEPT sudo iptables A INPUT p tcp dport 10000:10100 j ACCEPT sudo iptablessave | sudo tee /etc/iptables/rules.v4
测试FTP服务器
使用Windows资源管理器或FTP客户端(如FileZilla)连接服务器,输入服务器IP地址、用户名和密码,若连接失败,可检查以下问题:

- 用户目录权限:确保用户主目录及其子目录权限正确, sudo chmod 755 /home/ftpuser sudo chown ftpuser:ftpuser /home/ftpuser
- SELinux或AppArmor:若系统启用AppArmor,需调整vsftpd的配置: sudo nano /etc/apparmor.d/usr.sbin.vsftpd
添加用户目录路径(如/home/ftpuser/**),然后重启AppArmor服务:
sudo systemctl restart apparmor
安全增强建议
- 启用SSL/TLS加密:生成SSL证书并修改配置文件: sudo openssl req x509 nodes days 365 newkey rsa:2048 keyout /etc/ssl/private/vsftpd.pem out /etc/ssl/private/vsftpd.pem
在vsftpd.conf中添加:
ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1_2=YES - 限制用户访问:在/etc/vsftpd.user_list中添加允许访问的用户名单,并设置userlist_enable=YES和userlist_file=/etc/vsftpd.user_list。
常见问题排查
- 连接超时:检查被动模式端口是否开放,以及防火墙规则是否生效。
- 550权限错误:确保用户主目录权限为755,上传目录权限为775(需属主为用户或ftp组)。
相关问答FAQs
Q1: 如何在Ubuntu中限制FTP用户只能访问指定目录?
A: 可通过以下步骤实现:
- 创建专用目录(如/var/www/ftp)并设置权限: sudo mkdir p /var/www/ftp sudo chown ftpuser:ftpuser /var/www/ftp sudo chmod 755 /var/www/ftp
- 修改vsftpd.conf,将local_root指向该目录: local_root=/var/www/ftp
- 重启服务:sudo systemctl restart vsftpd。
此时用户登录后将仅限访问/var/www/ftp目录。
Q2: 如何解决FTP上传文件时出现“553 Could not create file”错误?
A: 该错误通常由权限问题导致,解决方法:
- 检查目标目录权限:确保目录属主为FTP用户,且权限为755(目录)或644(文件)。
- 若chroot_local_user=YES,需禁用目录写权限(避免安全漏洞),可创建子目录供上传: sudo mkdir /home/ftpuser/upload sudo chown ftpuser:ftpuser /home/ftpuser/upload sudo chmod 755 /home/ftpuser/upload
- 确认write_enable=YES已启用,并检查SELinux/AppArmor是否限制操作。
