Linux FTP服务器是一种基于Linux操作系统的文件传输服务实现,通过FTP(File Transfer Protocol)协议允许用户在客户端与服务器之间进行文件上传、下载、删除等操作,由于其开源、稳定、可定制性强的特点,Linux FTP服务器广泛应用于企业内部文件共享、网站资源托管、数据备份等场景,本文将详细介绍Linux FTP服务器的搭建、配置及安全管理,帮助用户快速上手并保障服务安全稳定运行。

FTP协议基础与Linux常用FTP服务器软件
FTP协议基于TCP/IP模型,使用两个端口:21号端口(控制连接,用于传输命令和响应)和20号端口(数据连接,用于传输文件数据),根据数据连接建立方式,FTP分为主动模式(Port模式)和被动模式(PASV模式):主动模式下,服务器主动向客户端发起数据连接;被动模式下,客户端主动向服务器发起数据连接,更适合存在防火墙的环境。
Linux下常用的FTP服务器软件包括:
- vsftpd(Very Secure FTP Daemon):轻量级、安全性高,默认配置下禁止匿名访问,支持chroot(用户目录隔离),是最常用的选择;
- ProFTPD:功能丰富,配置灵活,类似Apache的配置风格;
- Pure-FTPd:性能优异,支持虚拟用户、带宽限制等高级功能。
本文以vsftpd为例,讲解FTP服务器的搭建与配置。
vsftpd安装与基础配置
安装vsftpd
以CentOS/RHEL为例,使用yum安装:
sudo yum install vsftpd -y
安装完成后,启动服务并设置开机自启:

sudo systemctl start vsftpd sudo systemctl enable vsftpd
核心配置文件
vsftpd的主配置文件为/etc/vsftpd/vsftpd.conf,以下是关键参数说明(可通过表格对比理解):
| 参数 | 作用 | 示例值 |
|---|---|---|
anonymous_enable |
是否允许匿名用户登录 | NO(禁止匿名) |
local_enable |
是否允许本地系统用户登录 | YES(允许) |
write_enable |
是否允许用户上传/修改文件 | YES(允许) |
chroot_local_user |
是否将用户限制在其主目录(无法切换到上级目录) | YES(限制) |
allow_writeable_chroot |
当chroot_local_user=YES时,是否允许用户在主目录内写入 |
NO(安全建议,避免权限过高) |
pasv_enable |
是否启用被动模式(推荐,兼容防火墙) | YES |
pasv_min_port / pasv_max_port |
被动模式下开放的端口范围 | 30000-31000 |
userlist_enable |
是否启用用户列表文件(限制登录用户) | YES |
userlist_file |
用户列表文件路径 | /etc/vsftpd/user_list |
tcp_wrappers |
是否使用TCP Wrappers访问控制 | YES(结合hosts.allow/deny) |
创建FTP用户
假设创建一个名为ftpuser的本地用户,并设置其主目录为/home/ftpuser:
sudo useradd -m -s /sbin/nologin ftpuser # -s /sbin/nologin禁止SSH登录,仅允许FTP sudo passwd ftpuser # 设置密码
若需限制用户只能访问FTP目录,可修改/etc/passwd中用户的主目录,
sudo usermod -d /var/ftp/ftpuser ftpuser # 将主目录改为/var/ftp/ftpuser sudo mkdir -p /var/ftp/ftpuser sudo chown ftpuser:ftpuser /var/ftp/ftpuser
安全加固与高级配置
禁止匿名访问与root登录
默认情况下,vsftpd已禁止匿名访问(anonymous_enable=NO),但需额外检查是否允许root登录:
sudo echo "root" >> /etc/vsftpd/user_list # 将root加入用户列表,禁止登录
防火墙与SELinux配置
- 防火墙开放端口:
sudo firewall-cmd --permanent --add-service=ftp # 开放FTP服务(21端口) sudo firewall-cmd --permanent --add-port=30000-31000/tcp # 开放被动模式端口 sudo firewall-cmd --reload
- SELinux配置(若启用):
sudo setsebool -P ftpd_full_access on # 允许FTP访问用户目录
使用SSL/TLS加密传输(安全推荐)
为防止密码和数据明文传输,可启用SSL/TLS加密:

- 生成自签名证书:
sudo openssl req -new -x509 -nodes -out /etc/vsftpd/vsftpd.pem -keyout /etc/vsftpd/vsftpd.pem -days 365
- 修改配置文件,启用SSL:
ssl_enable=YES rsa_cert_file=/etc/vsftpd/vsftpd.pem force_local_data_ssl=YES # 强制数据连接加密 force_local_logins_ssl=YES # 强制控制连接加密
常见问题排查
- 连接超时:检查防火墙是否开放被动模式端口(
pasv_min_port–pasv_max_port),或客户端是否使用被动模式。 - 用户无法登录:确认用户是否在
/etc/vsftpd/user_list中,密码是否正确,chroot目录是否存在且权限正确(目录需755,用户需有rx权限)。
FAQs
Q1:如何限制FTP用户只能访问指定目录,无法切换到上级目录?
A:通过chroot_local_user=YES启用用户目录隔离,同时确保用户主目录权限为755(chmod 755 /home/ftpuser),且allow_writeable_chroot=NO(避免安全风险),若用户需要上传,需在主目录内创建可写子目录(如mkdir /home/ftpuser/upload,chmod 755 /home/ftpuser/upload)。
Q2:如何启用FTP的SSL/TLS加密,确保数据传输安全?
A:首先生成SSL证书(如openssl req命令),然后在vsftpd.conf中设置ssl_enable=YES、rsa_cert_file=/path/to/cert.pem,并启用force_local_data_ssl=YES和force_local_logins_ssl=YES强制加密,客户端需使用支持FTPES(FTP over explicit SSL)的工具,如FileZilla勾选“要求显式FTP over SSL”。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/34265.html