FTP 在 Linux 服务器上 是一种客户端-服务器协议,通过 TCP/IP(通常在端口 21 上)传输文件。它支持用户身份验证、目录导航和上传/下载操作。
经典 FTP 如果未加密,您可以使用以下方法对其进行保护: FTPS(TLS)或用 SFTP (SSH对于大多数生产用途而言, SFTP or FTP建议使用S。
理解 FTP 在 Linux 服务器上使用此功能可以帮助您移动网站文件、自动备份以及与团队协作。本指南将解释如何操作。 FTP 作品,两者的区别 FTP, FTP沙 SFTP如何安装和配置一个 FTP 服务器(vsftpd),确保其安全,排除故障,并遵循性能和可靠性方面的最佳实践。
创新中心 FTP 可在 Linux 服务器上运行
FTP 它使用两个通道:一个用于命令的控制通道和一个用于文件传输和目录列表的数据通道。其复杂性在于数据通道的打开方式:主动模式与被动模式。

主动与被动 FTP
在主动模式下,服务器主动发起与客户端的数据连接。在被动模式下,客户端发起控制连接和数据连接,服务器告知客户端使用哪个被动端口。被动模式在NAT、防火墙和云环境中表现更佳。
- 控制通道: TCP 21(FTP或 TCP 21 协议,带 AUTH TLS(显式)。 FTPS)
- 数据通道(已激活): 服务器通过 TCP 端口 20 连接到客户端端口。
- 数据通道(被动): 服务器监听您配置的高端口范围(例如,40000-50000)。
FTP 与 FTP与与 SFTP
- FTP: 未加密、简单易用、支持广泛。不建议在公共互联网上使用。
- FTPS(FTP 通过 TLS): 对凭证和数据进行加密。有两种类型:显式加密和显式加密。 FTPS(端口 21 上的 TLS 认证)最常见;隐式 FTPS(端口 990)是旧版。
- SFTP (SSH 文件传输协议): 不同的协议 SSH (TCP 22)。对防火墙友好,采用基于密钥的身份验证,易于加固。是大多数现代部署的首选方案。
经验法则:如果您控制两端并且需要经典 FTP 兼容性,使用 FTP如果您想要更简单的安全设置和更少的防火墙问题,请使用 S。 SFTP.
选择一个 FTP Linux 上的服务器
- vsftpd: 非常安全 FTP 守护进程。速度快、重量轻、注重安全性。是理想的默认选择。 FTP/FTPS.
- 专业版FTPD: 灵活的, Apache风格化配置,丰富的模块。适用于复杂的虚拟主机。
- 纯的-FTPd: 配置简便,支持虚拟用户和TLS。兼具简洁性和功能性。
对于大多数管理员而言,vsftpd 以最少的配置提供了性能和安全性的最佳平衡。以下步骤均使用 vsftpd。
安装和配置 vsftpd
安装软件包
# Debian/Ubuntu
sudo apt update
sudo apt install -y vsftpd
# RHEL/CentOS/AlmaLinux/Rocky
sudo dnf install -y vsftpd
# Start and enable service
sudo systemctl enable --now vsftpd
sudo systemctl status vsftpd基本安全优先配置
编辑 /etc/vsftpd.conf 文件。以下配置通过 chroot、被动端口和禁止匿名访问来强化常见的“仅限本地用户”设置。
# /etc/vsftpd.conf (baseline secure config)
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
# Chroot local users to their home directories
chroot_local_user=YES
allow_writeable_chroot=YES
# Passive mode ports (match your firewall)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
# Limit users to a whitelist file (optional)
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
# Disable ASCII mode for performance and safety
ascii_upload_enable=NO
ascii_download_enable=NO
# Security & performance
seccomp_sandbox=YES
pam_service_name=vsftpd
然后重启 vsftpd:
sudo systemctl restart vsftpd创建用户并设置权限
# Create a Linux user without shell access
sudo useradd -m -s /usr/sbin/nologin ftpuser
sudo passwd ftpuser
# Optional: limit to specific directory
sudo mkdir -p /var/www/ftpuser
sudo chown ftpuser:ftpuser /var/www/ftpuser
sudo usermod -d /var/www/ftpuser ftpuser
# Add user to vsftpd whitelist (if enabled)
echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist开放防火墙和 SELinux
打开端口 21 和您配置的被动端口范围。同时允许 FTP如果您稍后启用 TLS,则为 S。
# UFW (Ubuntu)
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw reload
# firewalld (RHEL/CentOS/Alma/Rocky)
sudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-port=40000-50000/tcp
sudo firewall-cmd --reload
# SELinux (allow FTP to read/write home directories and passive ports)
sudo setsebool -P ftpd_full_access on
# Or more granular:
# sudo setsebool -P allow_ftpd_anon_write=off
# sudo setsebool -P allow_ftpd_full_access=on测试连接
# From a client machine
ftp your.server.ip
# or use lftp for better features
lftp -u ftpuser your.server.ip
# Basic commands once connected
pwd
ls
cd dir
get file
put localfile
bye安全消息传递 FTP 正确的方式
启用 FTPvsftpd 中的 S (TLS)
如果政策强制规定 FTP 兼容性,启用 TLS。使用显式 FTPS(端口 21 上的 TLS 身份验证)。生成或安装证书:
# Self-signed (replace CN)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.crt \
-subj "/C=US/ST=State/L=City/O=Org/OU=IT/CN=ftp.example.com"
# vsftpd TLS config additions
sudo bash -c 'cat >> /etc/vsftpd.conf' << "EOF"
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_tlsv1_1=YES
ssl_tlsv1_2=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
EOF
sudo systemctl restart vsftpd注意:许多现代客户端更倾向于使用 TLSv1.2 或更高版本。如果旧版本客户端无法正常工作,请相应地调整 TLS 设置。
绝大部分储备使用 SFTP (建议大多数情况下采用)
SFTP 跑过 SSH (端口 22)。无需额外守护进程;开放SSH 通常情况下,它是默认安装的。它更容易保护,也更容易通过防火墙。
# Ensure SSH is installed and running
sudo systemctl enable --now sshd
# Configure SFTP-only group with chroot
sudo groupadd sftpusers
sudo useradd -m -G sftpusers -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser
# In /etc/ssh/sshd_config (add at the end)
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
# Permissions: chroot dir must be owned by root and not writable by user
sudo chown root:root /home/sftpuser
sudo mkdir -p /home/sftpuser/upload
sudo chown sftpuser:sftpusers /home/sftpuser/upload
sudo systemctl restart sshd
# Connect
sftp sftpuser@your.server.ip额外的硬化技巧
- 强制执行基于密钥的 SSH 身份验证 SFTP尽可能禁用密码验证。
- 使用强密码并轮换凭据;与 Fail2ban 集成以阻止暴力破解尝试。
- 禁用匿名访问。使用用户列表或匹配块限制用户数量。
- 设置适当的 umask(例如 022)和权限,以避免创建组/全局可写文件。
- 定期记录传输日志并进行审查。在 vsftpd 和 syslog 中启用 xferlog。 SSH.
相当常见 FTP 以及 SFTP 命令
# FTP client basics
ftp server
User: ftpuser
Password: ****
ls
cd /path
lcd /local/path
get remote.file
put local.file
mget *.zip
mput *.html
bye
# SFTP client basics
sftp user@server
ls
cd /remote/dir
lcd /local/dir
get file
put file
chmod 640 file
mkdir newdir
exit
# lftp (robust, supports FTPS)
lftp -u user,pass -e "set ssl:verify-certificate no; mirror -R ./site /var/www/html; bye" ftps://server故障排除 FTP 在Linux上
连接被拒绝或超时
- 服务是否正在运行?运行命令 `systemctl status vsftpd` 或 `sshd`
- 防火墙已打开?端口 21 和被动端口范围 FTP/FTPS;22 SFTP
- 云安全组/网络访问控制列表允许入站流量吗?
530 登录错误
- 检查用户是否存在、密码和 shell(nologin 即可)。 FTP/SFTP-仅有的)。
- 如果使用 vsftpd 用户列表,请确保用户已列入白名单,并且 userlist_deny=NO。
- 用户主目录权限必须允许访问(在 chroot 环境下不能是组/全局可写)。
425 无法打开数据连接/目录列表失败
- 在防火墙上打开被动端口,并匹配 vsftpd pasv_min_port/pasv_max_port。
- 客户端位于 NAT 后方?请在客户端设置中强制启用被动模式。
- On FTPS,某些设备会绕过深度包检测。禁用 DPI 或允许 FTPS 正确。
553 无法创建文件/权限被拒绝
- 验证用户的目录所有权和写入权限。
- On SFTP chroot,确保可写操作发生在用户拥有的子目录中。
- 在 SELinux 中,使用 setsebool 或适当的上下文(semanage fcontext,restorecon)。
性能和可靠性最佳实践
- 使用被动模式和较小的端口范围,可以简化防火墙并减少随机“挂起”问题。
- 使用客户端 keepalive 保持连接;调整超时时间(idle_session_timeout、data_connection_timeout)。
- 使用专用文件系统或磁盘来存放大量上传文件的目录,以避免 I/O 争用。
- 必要时限制并发性(例如,每个客户端一个进程)或使用多个节点进行横向扩展。
- 监控日志和指标:xferlog、systemd 日志和网络图,以检测瓶颈。
何时选择托管主机
If FTP/SFTP 它为您的生产工作流程提供支持,停机或配置错误都会造成高昂的成本。 manage来自 VPS 或专用服务器 YouStable 可以预先配置安全 SFTP, FTP具备自动续期 TLS、防火墙策略和全天候监控功能。这让您可以专注于应用程序的开发,而我们的团队则确保传输快速安全。
常见问题的
1. Is FTP 在Linux服务器上安全吗?
朴素 FTP 由于凭证和数据未加密,因此不安全。为了安全起见,请使用 FTP使用 vsftpd 或 S (TLS) SFTP 超过 SSH两者都会对流量进行加密; SFTP 通常情况下,通过防火墙部署更简单,并且支持 SSH 键.
2. 我需要打开哪些端口? FTP, FTP沙 SFTP?
FTPTCP 21 加上一个被动范围(例如,40000–50000)。 FTPS(显式):在 AUTH TLS 之后,使用相同的被动端口范围的 TCP 21;隐式 FTPS 使用 TCP 990。 SFTP 仅使用 TCP 22 端口,无需被动端口范围。
3. 我应该选择 FTPS 或 SFTP?
Pick SFTP 如果可以,它更简单、默认安全且易于防火墙兼容。选择 FTP仅当您要求严格时才使用 S FTP 与旧系统或涉及特定合规工作流程的兼容性 FTP 客户端和服务器。
4. 如何更改用户的默认上传目录?
对于 vsftpd,请设置用户的主目录(usermod -d /path user)并确保权限符合 chroot 模型。 SFTP 使用 chroot 时,用户主目录必须归 root 用户所有且不可写;创建一个用户拥有的可写子文件夹(例如,/home/user/upload)。
5. 为什么本地目录列表可以正常工作,但在互联网上却无法正常工作?
这通常是被动模式的问题。请确保您的服务器发布正确的公网 IP 地址,在 vsftpd 中定义一个被动端口范围,并在防火墙和云安全组中打开该端口范围。在许多审计案例中,仅此一项就能解决 425/超时错误。