FTP文件服务器

TOC

了解FTP服务

什么是FTP服务?

FTP的全名是,主要用于文件传输的经典TCP协议。
常用端口:

  • 21端口:用于发送FTP命令信息
  • 20端口:不一定使用,用于上传下载数据

FTPS和SFTP
FTPS = FTP over TLS/SSL(也叫 FTPES/implicit/explicit TLS),在 FTP 基础上加密控制/数据通道。
SFTP ≠ FTP:它是 SSH 的子系统(使用端口 22),安全、易管理,通常比 FTPS 更推荐用于需要加密的场景。

FTP的两种连接模式

Active(主动)模式

  • 客户端在高端口上监听,向服务器 21 发起控制连接;当需要传输数据时,服务器从其端口 20 连接回客户端指定端口。
  • 客户端后面的防火墙/NAT 常常阻止服务器回连,导致问题。
    Passive(被动)模式
  • 客户端和服务器均由客户端发起连接:客户端向服务器 21 建立控制连接,服务器在一组被动端口(可配置)上监听数据连接,返回端口给客户端,客户端再连接该端口。
  • 在 NAT/防火墙环境下需要在服务器放行这些被动端口并在 NAT 上做映射(pasv_address)。

现在基本都是使用被动模式。

常见FTP服务器软件对比

  • vsftpd:轻量、安全,默认配置较严格(Debian/Ubuntu 常用)。
  • proftpd:类似 Apache 配置风格,功能强大,适合复杂需求。
  • pure-ftpd:易于使用,支持虚拟用户、TLS、限速等。

FTP服务搭建

软件安装

CentOS系统安装

yum -y install vsftpd

Ubuntu系统安装

apt -y install vsftpd

创建用户和工作目录

useradd -m ftpuser
passwd ftpuser
mkdir -p /home/ftpuser/files
chown root:root /home/ftpuser/files        # chroot根目录必须属于root
chmod 755 /home/ftpuser/files
chown ftpuser:ftpuser /home/ftpuser/files

一个简单的配置示例

修改配置文件:/etc/vsftpd.conf

# 基础配置
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES   # 默认指定用户home目录 local_root=/data/ftp
write_enable=YES
local_umask=022

# chroot 安全
chroot_local_user=YES

# 日志
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
use_localtime=YES

# 文件上传下载
allow_writeable_chroot=YES  # 允许在 chroot 可写目录上传(简单方案)

# 被动模式(方便客户端穿透 NAT)
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100

启动FTP服务

# 启动ftp服务
systemctl start vsftpd
# 设置自启动ftp服务
systemctl enable vsftpd
# 查看ftp服务状态
systemctl status vsftpd

配置文件详解

监听与模式

配置项 默认值 功能说明 建议设置 / 注意事项
listen NO 是否启用独立 IPv4 监听(standalone 模式) YES
listen_ipv6 YES 是否启用独立 IPv6 监听 NO(如果只用 IPv4)
用户认证
anonymous_enable YES 是否允许匿名登录 NO(生产环境禁用匿名)
local_enable NO 是否允许本地系统用户登录 YES
userlist_enable NO 是否启用用户白/黑名单 YES
userlist_file /etc/vsftpd.userlist 白/黑名单文件路径 配合 userlist_deny 使用
userlist_deny YES YES=文件列出用户禁止登录,NO=文件列出用户允许登录 NO 作为白名单,YES 作为黑名单
pam_service_name vsftpd PAM 配置文件名 一般保持默认

权限与写操作

配置项 默认值 功能说明 建议设置 / 注意事项
write_enable NO 是否允许写操作(上传/删除/改名) YES
local_umask 077 新建文件掩码 022 常用
chroot_local_user NO 是否将本地用户限制到 home 目录 YES(安全)
allow_writeable_chroot NO 允许用户写可写 chroot 目录(vsftpd 默认安全限制) NO 推荐,必要时 YES
chroot_list_enable NO 是否启用 chroot 白名单 YES/NO 根据需求
chroot_list_file /etc/vsftpd.chroot_list 白名单路径 配合 chroot_list_enable 使用

传输模式与端口

配置项 默认值 功能说明 建议设置 / 注意事项
connect_from_port_20 NO 主动模式使用端口 20 YES(主动模式)
pasv_enable NO 是否启用被动模式 YES(现代客户端通常用)
pasv_min_port 0 被动模式端口段最小值 10000
pasv_max_port 0 被动模式端口段最大值 10100
pasv_address (空) 公网 IP,用于 NAT 后被动模式 填公网 IP

日志相关

配置项 默认值 功能说明 建议设置 / 注意事项
xferlog_enable YES 是否启用传输日志 YES
xferlog_file /var/log/xferlog 日志文件路径 默认即可
log_ftp_protocol NO 是否记录详细 FTP 协议 调试可用 YES
dual_log_enable NO 是否同时记录 xferlog 和协议日志 YES

TLS / FTPS

配置项 默认值 功能说明 建议设置 / 注意事项
ssl_enable NO 是否启用 TLS/FTPS YES(生产环境推荐)
rsa_cert_file TLS 证书文件路径 指向 .pem 文件
rsa_private_key_file TLS 私钥路径 指向 .pem 文件
force_local_logins_ssl NO 是否强制本地用户使用 TLS 登录 YES(生产环境)
force_local_data_ssl NO 是否强制数据通道加密 YES
allow_anon_ssl YES 匿名是否允许使用 TLS NO(禁止匿名写)
require_ssl_reuse YES 是否要求 TLS session reuse 可因客户端兼容设置 NO
ssl_ciphers HIGH TLS 加密套件 HIGH(安全)

其他安全

配置项 默认值 功能说明 建议设置 / 注意事项
secure_chroot_dir /var/run/vsftpd/empty vsftpd 用于 chroot 的安全空目录 必须存在
dirmessage_enable NO 是否显示目录消息 YES 可选
use_localtime NO 是否使用本地时间 YES
xferlog_std_format YES 日志格式 YES