Skip to main content

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 服务配置,让两个服务搭配工作就行了。
特性FTPSFTP
安全性明文传输加密传输
协议层独立的协议(控制连接和数据连接)基于 SSH 协议
身份验证使用用户名和密码进行身份验证使用 SSH 密钥或密码进行身份验证
默认端口20 2122
操作支持支持文件传输、文件管理、文件权限支持更多操作

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
tip

修改配置文件后需要重启 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

5. 使用 FTP 命令进行文件操作 🖱️

5.1 安装 FTP 客户端

在一些现代Linux发行版中,ftp 命令可能没有默认安装,或者被移除以支持更安全的替代方案(如 SFTP )。我建议您使用 sftp ,若您想体验 ftp 命令,则需要安装一个 ftp 客户端,例如:

传统ftp客户端

安装传统的 FTP 客户端

sudo apt install ftp
现代ftp客户端

lftp 是一个功能强大的 FTP 客户端,支持多线程下载和断点续传等功能:

sudo apt install lftp

安装 ftp 客户端后就可以使用 FTP 命令进行文件传输和管理操作。

5.1 连接到 FTP 服务器

使用 FTP 命令连接到远程服务器:

ftp hostname

或者:

ftp username@hostname

连接后,你需要输入密码进行身份验证。

5.2 上传文件

使用 put 命令将本地文件上传到远程服务器:

put localfile remotefile

5.3 下载文件

使用 get 命令从远程服务器下载文件到本地:

get remotefile localfile

5.4 列出远程目录

使用 ls 命令列出当前远程目录的文件:

ls

5.5 切换目录

使用 cd 命令切换到远程服务器的不同目录:

cd /path/to/remote/directory

5.6 删除文件

使用 delete 命令删除远程服务器上的文件:

delete remotefile

5.7 退出 FTP 会话

完成操作后,使用 quitexit 命令退出 FTP 会话:

quit
tip

sftp 的配置和使用请查看本栏目 sftp 服务教程。
ftp/sftp 命令请查看《Linux - 命令》栏目 ftp/sftp 命令教程。

6. FTP 安全性注意事项 ⚠️

由于 FTP 协议默认不加密数据,传输的用户名、密码以及文件内容都可能被截获,因此为了提高 FTP 服务的安全性,你可以采取以下措施:

  • 使用 FTPS:FTPS(FTP Secure)是 FTP 的加密版本,通过 SSL/TLS 加密数据传输。
  • 使用防火墙限制访问:限制只能通过特定的 IP 地址访问 FTP 服务,以增强安全性。
  • 使用强密码:为 FTP 用户设置强密码,防止密码暴力破解攻击。
  • 启用日志记录:开启 FTP 服务的日志记录功能,监控用户的行为。

7. 总结 🌟

FTP 是一种历史悠久且广泛使用的文件传输协议,虽然它不加密数据,但仍然是许多文件传输场景中的常用工具。通过本文的教程,你已经了解了 FTP 协议的基本原理、安装配置步骤和常用命令。希望你能够有效地使用 FTP 进行文件管理和传输。

希望这篇教程帮助你理解 FTP 协议及其使用!别忘了收藏在线知识库www.zxzsk.com )哦!😊


示例配置1🛠️

安装 vsftpd 后使用以下命令查看默认配置并过滤注释

cat /etc/vsftpd.conf | sed '/^#/d'

示例配置1🛠️

# /etc/vsftpd.conf

# 设置FTP服务器监听的端口号为21(默认FTP端口)
listen_port=21

# 禁止匿名用户登录,只有注册用户可以访问
anonymous_enable=NO

# 将本地用户锁定在其家目录中,防止他们访问系统的其他部分
chroot_local_user=YES

# 允许用户写入文件和目录(上传、删除等)
write_enable=YES

# 允许本地用户(系统中的真实用户)登录到FTP服务器
local_enable=YES

# 启用目录信息消息,当用户进入目录时显示.message文件内容
dirmessage_enable=YES

# 使用服务器的本地时间记录日志和文件时间
use_localtime=YES

# 启用传输日志,记录上传和下载活动
xferlog_enable=YES

# 在主动模式下,服务器使用TCP端口20作为数据传输端口
connect_from_port_20=YES

  • 这个配置为 vsftpd 提供了基础的安全性和功能性,适合于需要基本 FTP 服务的环境,特别是在不需要加密连接的内部网络中使用。
  • 对于需要通过公网访问或传输敏感数据的场景,需要额外配置 ssl_enable 和相关证书配置,以提供加密连接。
  • 对于需要更高灵活性或在复杂网络环境中使用的场景,可能需要进一步调整配置,例如考虑被动模式(PASV)的配置或使用更高级的用户权限管理。

示例配置2🛠️

这个是安装 vsftpd 后的默认配置 ```yaml # 默认配置

禁用独立模式,vsftpd将作为xinetd服务运行

listen=NO

启用IPv6监听,即使listen设置为NO,也会以独立模式运行

listen_ipv6=YES

禁用匿名用户登录,只有注册用户可以访问

anonymous_enable=NO

允许本地用户登录FTP服务器

local_enable=YES

启用目录信息消息,当用户进入目录时显示.message文件内容

dirmessage_enable=YES

使用服务器的本地时间记录日志和文件时间

use_localtime=YES

启用传输日志,记录上传和下载活动

xferlog_enable=YES

在主动模式下,服务器使用TCP端口20作为数据传输端口

connect_from_port_20=YES

指定一个空目录用于安全的chroot环境

secure_chroot_dir=/var/run/vsftpd/empty

指定PAM服务名称,用于用户认证

pam_service_name=vsftpd

指定SSL证书文件路径(即使ssl_enable为N,也可以预先配置)

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

指定SSL私钥文件路径(即使ssl_enable为N,也可以预先配置)

rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

禁用SSL/TLS功能

ssl_enable=NO


评价:
安全性:这个配置提供了良好的安全性基础。通过禁用匿名登录,限制用户访问范围,以及使用PAM进行认证,减少了未授权访问的风险。

灵活性:虽然当前禁用了SSL/TLS功能,但配置了证书和密钥文件路径,为将来启用加密提供了方便。

效率:启用IPv6支持和使用本地时间可以提高服务器的效率和用户体验。

日志记录:详细的日志记录有助于监控和审计用户活动,提升了系统的可追踪性。

管理:通过xinetd管理vsftpd,可以简化服务器的启动和停止,但也可能增加了一些复杂性,特别是在调试和配置方面。

缺点:

SSL/TLS禁用:虽然为将来启用SSL/TLS做好了准备,但当前不支持加密连接,这可能在传输敏感数据时存在安全风险。
xinetd依赖:依赖于xinetd服务运行可能会导致在某些系统配置或故障情况下,vsftpd无法正常启动。
</p>
</details>