FTP:文件传输协议教程 📁
1. 什么是 FTP?📡
FTP(File Transfer Protocol,文件传输协议)基于TCP/IP协议族,是一种用于在网络中传输文件的标准协议。它广泛应用于互联网文件共享、远程管理和数据备份等场景:支持文件的上传、下载、删除、重命名等操作。
2. FTP 的工作原理 🔍
FTP 协议采用客户端-服务器模式,支持两种工作模式:
- 主动模式(Active Mode):
- 命令通道:客户端通过TCP 21端口与服务器建立连接,并通过该通道发送命令。
- 数据通道:服务器主动通过TCP 20端口连接至客户端指定端口发送数据。
- 被动模式(Passive Mode):
- 命令通道:21端口
- 数据通道:在被动模式下,端口服务器会打开一个高于1024的随机端口,等待并通知客户端在此端口传输数据。
3. FTP 与 SFTP 的区别 🔄
- sftp 基于 ftp, 不同之处在于:使用 SSH 安全通道进行命令和数据输出。
- 使用 sftp 不需要安装新的服务程序,只需要修改 ftp 和 ssh 服务配置,让两个服务搭配工作就行了。
特性 | FTP | SFTP |
---|---|---|
安全性 | 明文传输 | 加密传输 |
协议层 | 独立的协议(控制连接和数据连接) | 基于 SSH 协议 |
身份验证 | 使用用户名和密码进行身份验证 | 使用 SSH 密钥或密码进行身份验证 |
默认端口 | 20 21 | 22 |
操作支持 | 支持文件传输、文件管理、文件权限 | 支持更多操作 |
4. 安装和配置 FTP 服务 🖥️
在 Linux 系统中,最常见的 FTP 服务器软件是 vsftpd(Very Secure FTP Daemon),它具有较好的性能和安全性。下面是安装和配置 vsftpd 的步骤。
4.1 安装 vsftpd 服务
在 Ubuntu/Debian 系统中:
sudo apt update
sudo apt install vsftpd
在 CentOS/RHEL 系统中:
sudo yum install vsftpd
4.2 配置 vsftpd 服务
配置文件位于 /etc/vsftpd.conf
。你可以通过编辑该文件来调整 FTP 服务器的设置。
编辑配置文件:
sudo nano /etc/vsftpd.conf
4.2.1 配置常见选项
-
启用匿名访问:如果你希望允许匿名用户访问文件,修改以下配置项:
anonymous_enable=YES
-
禁用匿名写权限:为了防止匿名用户上传文件,禁用匿名写权限:
anon_upload_enable=NO
-
启用本地用户登录:允许系统的本地用户登录并上传/下载文件:
local_enable=YES
-
启用写权限:如果希望允许本地用户写入文件,启用写权限:
write_enable=YES
-
启用被动模式:如果你的服务器位于防火墙后面,可以启用被动模式,指定一个范围的端口进行数据传输:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
提示
修改配置文件后需要重启 vsftpd 服务
sudo systemctl restart vsftpd
4.2.1 配置选项分类整理
我收集了vsftpd 配置选项,并按类别整理,便于将来查询 :
# 基本配置
listen=YES # 启用监听模式
listen_ipv6=YES # 启用 IPv6 支持
anonymous_enable=NO # 禁止匿名用户登录
local_enable=YES # 允许本地用户登录
write_enable=YES # 允许上传文件
local_umask=022 # 设置本地文件权限掩码
chroot_local_user=YES # 限制本地用户在其主目录内
user_sub_token=$USER # 使用用户名作为子目录替换令牌
# 安全性配置
ssl_enable=YES # 启用 SSL/TLS 加密
allow_anon_ssl=NO # 禁止匿名用户使用 SSL
force_local_data_ssl=YES # 强制本地数据使用 SSL 加密
force_local_logins_ssl=YES # 强制本地登录使用 SSL
ssl_cert_file=/etc/ssl/certs/vsftpd.pem # SSL 证书文件
ssl_key_file=/etc/ssl/private/vsftpd.key # SSL 密钥文件
pasv_enable=YES # 启用被动模式
pasv_min_port=30000 # 设置被动模式端口范围
pasv_max_port=31000 # 设置被动模式端口范围
seccomp_sandbox=YES # 启用 seccomp 沙箱
# 性能优化
max_clients=100 # 最大客户端连接数
max_per_ip=5 # 每个 IP 最大连接数
accept_timeout=60 # 客户端连接超时时间
data_connection_timeout=300 # 数据连接超时
tcp_wrappers=YES # 启用 TCP Wrapper 支持
# 用户权限控制
userlist_enable=YES # 启用用户列表功能
userlist_file=/etc/vsftpd/user_list # 用户列表文件路径
userlist_deny=NO # 用户列表中列出的用户允许登录
deny_email_enable=NO # 禁止特定邮箱域名的用户登录
# 日志配置
xferlog_enable=YES # 启用传输日志记录
xferlog_file=/var/log/vsftpd.log # 设置日志文件路径
xferlog_std_format=YES # 启用标准日志格式
# 其他配置
banner_file=/etc/vsftpd/banner.txt # 连接时显示欢迎消息
message_file=/etc/vsftpd/welcome_message.txt # 登录后显示消息
4.2.2 配置防火墙
如果服务器启用了防火墙,需要允许 FTP 服务的端口通过防火墙。以下是启用端口 21 和被动端口范围(30000-31000)的命令:
在 Ubuntu/Debian 系统中:
sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp
在 CentOS/RHEL 系统中:
sudo firewall-cmd --zone=public --add-port=21/tcp --permanent
sudo firewall-cmd --zone=public --add-port=30000-31000/tcp --permanent
sudo firewall-cmd --reload
4.3 启动 vsftpd 服务
查看服务状态
sudo systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since...
安装 vsftpd 后会自动启动服务。如果没有启动,可使用命令启动并启用 vsftpd 服务:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd