在Linux系统中搭建FTP服务器是许多企业和个人用户的需求,主要用于文件传输、数据共享等场景,本文将详细介绍在Linux环境下安装和配置FTP服务器的完整步骤,以常用的vsftpd(Very Secure FTP Daemon)为例,涵盖安装、配置、用户管理、安全设置等内容,帮助读者快速搭建稳定、安全的FTP服务。

安装vsftpd软件包
vsftpd是一款轻量级、高性能且安全的FTP服务器软件,适用于大多数Linux发行版,安装前需确保系统已更新至最新状态,以避免兼容性问题,以CentOS/RHEL和Ubuntu/Debian两大主流发行版为例:
-
CentOS/RHEL系统
使用yum包管理器安装,执行以下命令:sudo yum update -y sudo yum install vsftpd -y
安装完成后,vsftpd服务会自动启动,可通过
systemctl status vsftpd检查服务状态。 -
Ubuntu/Debian系统
使用apt包管理器安装,命令如下:
(图片来源网络,侵删)sudo apt update && sudo apt upgrade -y sudo apt install vsftpd -y
安装后,同样可通过
systemctl status vsftpd确认服务运行状态。
配置vsftpd核心参数
vsftpd的配置文件位于/etc/vsftpd/vsftpd.conf,默认配置可能无法满足实际需求,需手动修改关键参数,以下是常用配置项及其说明:
| 配置项 | 默认值 | 建议值 | 说明 |
|---|---|---|---|
| anonymous_enable | YES | NO | 是否允许匿名用户访问,建议关闭以提升安全性 |
| local_enable | YES | YES | 是否允许本地用户登录 |
| write_enable | YES | YES | 是否开启写入权限 |
| chroot_local_user | NO | YES | 是否限制本地用户仅能访问自家目录 |
| allow_writeable_chroot | NO | YES | 配合chroot_local_user使用,允许用户在chroot目录内写入 |
| pasv_enable | YES | YES | 是否启用被动模式,适用于客户端 behind 防火墙的场景 |
| pasv_min_port | 0 | 10000 | 被动模式最小端口,需与防火墙规则匹配 |
| pasv_max_port | 0 | 10100 | 被动模式最大端口 |
| user_config_dir | 无 | /etc/vsftpd/user_conf | 为不同用户单独配置的目录路径 |
配置步骤:
- 备份原始配置文件:
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak - 编辑配置文件:
sudo vim /etc/vsftpd/vsftpd.conf,根据需求修改上述参数。 - 保存后重启vsftpd服务:
sudo systemctl restart vsftpd
创建FTP用户并设置权限
-
创建本地用户
若需为FTP服务创建专用用户,可执行以下命令(以用户名为ftpuser为例):
(图片来源网络,侵删)sudo useradd -m -s /sbin/nologin ftpuser # 创建用户并禁止SSH登录 sudo passwd ftpuser # 设置用户密码
-m表示创建用户家目录,-s /sbin/nologin限制用户仅能通过FTP访问。 -
限制用户访问目录
若需限制用户仅能访问自家目录(安全加固),需确保chroot_local_user=YES已启用,并检查/etc/vsftpd/chroot_list文件是否存在,若需指定部分用户不受限,可创建该文件并添加用户名:sudo echo "ftpuser" | sudo tee -a /etc/vsftpd/chroot_list sudo systemctl restart vsftpd
配置防火墙与SELinux(CentOS/RHEL)
-
防火墙设置
开放FTP服务所需端口(默认21端口及被动模式端口范围):sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=10000-10100/tcp sudo firewall-cmd --reload
-
SELinux配置
若系统启用SELinux,需调整策略以允许FTP写入:sudo setsebool -P ftpd_full_access on
可通过
sestatus命令检查SELinux状态。
测试与故障排查
-
客户端测试
使用FileZilla等FTP客户端连接服务器,输入服务器IP、用户名及密码,验证登录和文件传输功能。 -
常见问题排查
- 无法登录:检查用户密码是否正确,
/etc/vsftpd/ftpusers和/etc/vsftpd/user_list文件是否包含该用户(默认禁止登录)。 - 权限问题:确保用户对家目录有读写权限,可执行
sudo chmod 755 /home/ftpuser。 - 被动模式连接失败:检查防火墙是否开放10000-10100端口,或客户端是否配置了被动模式范围。
- 无法登录:检查用户密码是否正确,
相关问答FAQs
问题1:如何为不同FTP用户设置不同的访问权限?
解答:可通过user_config_dir参数实现,首先在/etc/vsftpd目录下创建user_conf文件夹,然后为每个用户创建同名配置文件(如ftpuser),并在文件中添加自定义规则,
local_root=/home/ftpuser/upload # 指定用户登录后的目录
write_enable=YES # 允许写入
anon_world_readable_only=NO # 允许下载非匿名文件
重启vsftpd服务后,配置即可生效。
问题2:如何限制FTP用户的传输速率?
解答:vsftpd本身不直接支持速率限制,但可通过iptables或tc命令实现,使用iptables限制用户ftpuser的下载速率为512KB/s:
sudo iptables -A OUTPUT -p tcp --sport 21 -m owner --uid-owner ftpuser -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 20 -m owner --uid-owner ftpuser -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 10000:10100 -m owner --uid-owner ftpuser -j ACCEPT sudo iptables -A OUTPUT -p tcp -m owner --uid-owner ftpuser -m limit --limit 512k/s -j ACCEPT sudo iptables -A OUTPUT -p tcp -m owner --uid-owner ftpuser -j DROP
保存规则(sudo service iptables save)后,速率限制即可生效,注意:此方法需要iptables支持,且可能影响系统性能。
