一、部署 FTP 服务
1.1 FTP 的发展
FTP(File Transfer Protocol,文件传输协议)自 1970 年代起就成为了文件传输的主要协议之一。随着互联网和网络技术的发展,FTP 服务器也不断演变。
FTP 服务器的发展:
- 早期发展: 最初的 FTP 协议仅支持简单的明文文件传输,缺乏安全机制,因此较易受到攻击。它主要用于学术机构和企业之间的文件共享。
- 引入安全协议: 为了解决 FTP 的安全问题,出现了多种安全扩展协议,如 FTPS(FTP over SSL/TLS)和 SFTP(基于 SSH 的 FTP)。这些协议加密了文件传输,确保数据的保密性。
- 现代化需求: 现代 FTP 服务器不仅需要支持安全的文件传输,还要求能够高效处理大规模文件传输、远程管理、用户认证以及与现代操作系统的兼容性。
常见的 FTP 服务器:
ProFTPD
- 特点: ProFTPD 是一款功能丰富的开源 FTP 服务器,支持虚拟主机、匿名访问、TLS 加密以及 IPv6。它的配置类似于 Apache HTTP 服务器,适合需要定制化配置的用户。
- 适用场景: 企业环境和高级用户,尤其适合拥有多个虚拟主机的服务器。
vsftpd (Very Secure FTP Daemon)
- 特点: vsftpd 以其安全性闻名,是许多 Linux 发行版的默认 FTP 服务器。它支持 FTPS 和 SFTP,并以其高效和低资源占用著称。
- 适用场景: 需要高安全性和性能的服务器,如托管服务提供商和大型企业。
FileZilla Server
- 特点: FileZilla 不仅是著名的 FTP 客户端,还提供了一个简单易用的 FTP 服务器。FileZilla Server 专注于 Windows 平台,支持 FTP 和 FTPS。
- 适用场景: 中小型企业和个人用户,尤其是需要在 Windows 环境中部署 FTP 服务的用户。
Pure-FTPd
- 特点: Pure-FTPd 是一款易于配置的开源 FTP 服务器,支持 TLS 加密、虚拟用户、带宽限制等功能。它注重安全性和简单性。
- 适用场景: 需要快速部署且安全可靠的 FTP 服务器,如小型企业和项目。
Wing FTP Server
- 特点: Wing FTP Server 是一款跨平台的商业 FTP 服务器,支持 FTP、FTPS、SFTP、HTTP 和 HTTPS 传输协议。它提供了图形化界面和详细的日志功能,适合大规模企业使用。
- 适用场景: 企业级解决方案,尤其是需要多协议支持和图形化管理工具的用户。
Serv-U FTP Server
- 特点: Serv-U 是一款功能强大的商业 FTP 服务器,支持自动化任务、详细的权限管理、集成 SSL 加密等。它为企业提供了灵活的文件传输解决方案。
- 适用场景: 大型企业和需要高度安全性与管理功能的组织。
FTP 服务器的发展从简单的文件传输协议,逐步演变为支持加密、用户认证、多协议支持的现代化工具。现今有多种 FTP 服务器可供选择,适合不同的需求场景。
本文使用的 ftp 服务器:vsftpd
本文使用的 ftp 客户端:ftp-ssl
1.2 FTP 客户端
FTP(文件传输协议)客户端 ftp
是一个用于在本地和远程 FTP 服务器之间传输文件的命令行工具。它允许用户上传文件到服务器、从服务器下载文件、在服务器上创建目录、删除文件等。
安装客户端:
apt install ftp-ssl
1.3 安装 FTP 服务器
Ubuntu 系统:
sudo apt update
sudo apt install vsftpd
vsftpd -v
红帽系统:
sudo yum install epel-release
sudo yum install vsftpd
vsftpd -v
1.4 启动 FTP 服务
启动 FTP 服务
sudo systemctl start vsftpd
设置开机自启动
sudo systemctl enable vsftpd
二、ftp 命令参数
基本的 ftp
命令语法如下:
ftp [-v] [-d] [-i] [-n] [-g] [-k realm] [-x] [-u] [-p] [-l] [-d] [-I] [-N] [-4] [-6] [-S:socket] [-w:windowsize] [-T] [host-name]
以下是常用的参数:
-
-v
:冗余模式,显示命令的详细执行过程。 -
-n
:禁用自动登录功能。 -
-i
:关闭交互式提示。 -
-d
:启用调试模式。 -
-g
:禁用文件名通配符。 -
-u
:指定用户名,用于匿名登录时。 -
-p
:使用被动模式。 -
-l
:允许使用文件的本地锁。 -
-d
:启用调试。 -
-I
:使用二进制图像传输模式。 -
-N
:禁用自动登录到匿名账户。 -
-4
:仅使用 IPv4 地址。 -
-6
:仅使用 IPv6 地址。 -
-S:socket
:指定用于数据传输的 socket。 -
-w:windowsize
:设置传输窗口的大小。 -
-T
:启用多线程传输。
三、ftp 命令示例
FTP(文件传输协议)的命令行工具允许你在客户端与服务器之间进行文件传输和管理。以下是常见的 FTP 命令示例,帮助你更好地了解如何使用 FTP 工具。
1. 连接到 FTP 服务器
ftp <服务器地址>
示例:
ftp 192.168.1.100
这会连接到指定的 FTP 服务器。连接后会提示输入用户名和密码。
2. 登录
Name (192.168.1.100:username): username
331 Please specify the password.
Password: <your_password>
输入正确的用户名和密码后,即可登录到 FTP 服务器。
3. 查看帮助
help
列出 FTP 客户端的所有可用命令。
4. 列出目录内容
ls
列出服务器当前目录中的文件和子目录。
5. 切换目录
cd <目录>
示例:
cd /var/www
切换到服务器上的 /var/www
目录。
6. 查看当前目录
pwd
显示你当前所在的服务器目录。
7. 下载文件
get <文件名>
示例:
get example.txt
将服务器上的 example.txt
文件下载到本地。
8. 上传文件
put <文件名>
示例:
put localfile.txt
将本地的 localfile.txt
文件上传到服务器当前目录。
9. 批量下载文件
mget <文件名或通配符>
示例:
mget *.txt
下载服务器上所有 .txt
文件。
10. 批量上传文件
mput <文件名或通配符>
示例:
mput *.jpg
上传本地所有 .jpg
文件到服务器。
11. 切换到本地目录
lcd <本地目录>
示例:
lcd /home/user/documents
切换到本地的 /home/user/documents
目录。
12. 删除服务器上的文件
delete <文件名>
示例:
delete oldfile.txt
删除服务器上的 oldfile.txt
文件。
13. 创建目录
mkdir <目录名>
示例:
mkdir new_directory
在服务器上创建 new_directory
目录。
14. 删除目录
rmdir <目录名>
示例:
rmdir old_directory
删除服务器上的 old_directory
目录(必须为空)。
15. 启用被动模式
passive
切换为被动模式,适合防火墙或 NAT 网络环境下的连接。
16. 查看传输模式
status
查看当前 FTP 会话的传输模式(被动或主动)。
17. 退出 FTP 会话
bye
或
quit
断开与 FTP 服务器的连接并退出客户端。
18. 切换到二进制模式
binary
在传输非文本文件(如图片、压缩包等)时使用二进制模式。默认是 ASCII 模式。
19. 显示本地文件
!ls
在当前 FTP 会话中列出本地目录中的文件。
四、FTP 配置详解
配置文件:/etc/vsftpd.conf
示例 1 不用匿名用户
vsftpd.conf
配置文件示例
# 允许匿名用户访问
anonymous_enable=NO
# 启用本地用户登录
local_enable=YES
# 启用写操作(上传、删除文件等),默认只读
write_enable=YES
# 设置本地用户的上传文件权限(默认值是 0777,减去由 umask 指定的掩码值)
local_umask=022
# 启用 FTP 被动模式
pasv_enable=YES
# 设置被动模式的数据端口范围(建议配置以避免防火墙问题)
pasv_min_port=10000
pasv_max_port=10100
# 启用 chroot 限制本地用户只能访问其家目录
chroot_local_user=YES
# 在登录时显示欢迎消息
ftpd_banner=Welcome to my FTP server!
# 限制用户最大连接数
max_clients=100
max_per_ip=5
# 设置FTP监听的端口(默认21)
listen_port=21
# 启用 standalone 模式下的 vsftpd 服务
listen=YES
# 启用安全传输(FTPS)
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
# 强制所有非匿名登录的用户使用SSL加密
force_local_logins_ssl=YES
force_local_data_ssl=YES
# 日志配置
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
# 限制上传文件的大小(单位:字节)
max_upload_rate=1000000
# 启用 IPv6
listen_ipv6=NO
配置文件说明
anonymous_enable
: 设置是否允许匿名用户登录。通常为NO
以提高安全性。
-
YES
:允许匿名登录。 -
NO
:不允许匿名用户访问。
-
local_enable
: 允许本地系统用户使用 FTP 登录。如果需要本地用户登录访问 FTP,则设置为YES
。
write_enable
: 是否允许用户在 FTP 服务器上进行写操作(如上传、删除文件)。为YES
时允许写操作。
local_umask
: 设置上传文件的权限掩码。022
掩码表示新文件的默认权限为 755(目录)或 644(文件)。
pasv_enable
: 启用被动模式(PASV)。如果客户端和服务器之间有防火墙/NAT,启用此选项有助于解决数据连接问题。
pasv_min_port
和 pasv_max_port
: 设置 PASV 模式下的数据端口范围,防止服务器开放太多端口。建议指定一个较小的端口范围。
chroot_local_user
: 限制本地用户只能访问其主目录,提高安全性,防止用户访问服务器的其他部分。
ftpd_banner
: 登录 FTP 时显示的欢迎消息。你可以根据需要自定义内容。
max_clients
和 max_per_ip
: 设置 FTP 服务器允许的最大并发连接数,以及每个 IP 地址允许的最大连接数。这有助于防止单个客户端占用过多资源。
listen_port
: 设置 FTP 服务器监听的端口,默认是 21。如果你想在不同的端口运行 FTP 服务器,可以在这里更改。
listen
: 是否启用独立模式下的 vsftpd 服务器。YES
表示独立运行,不依赖 inetd 或 xinetd。SSL/FTPS 配置:
-
ssl_enable
: 启用 SSL 加密以实现安全的 FTP 传输(FTPS)。 -
rsa_cert_file
和 rsa_private_key_file
: SSL 证书和私钥文件路径。 -
force_local_logins_ssl
和 force_local_data_ssl
: 强制本地用户登录和数据传输时使用 SSL 加密,确保传输安全。
-
xferlog_enable
: 启用传输日志记录。xferlog_file
指定了日志文件的位置,xferlog_std_format=YES
将日志以标准 FTP 格式记录。 -
max_upload_rate
: 限制每个用户上传文件的最大速率,单位为字节。这里设置了 1 MB/s 的上传限制。 -
listen_ipv6
: 设置是否启用 IPv6。如果不需要 IPv6,可以设置为NO
。
重启 vsftpd 服务:
配置完成后,重启 vsftpd 服务以使更改生效:
sudo systemctl restart vsftpd
示例 2 启用匿名用户
vsftpd.conf
示例
# 启用匿名用户登录
anonymous_enable=YES
# 禁止匿名用户上传文件
anon_upload_enable=NO
# 禁止匿名用户写操作(包括删除文件)
anon_other_write_enable=NO
# 设置匿名用户的根目录
anon_root=/var/run/vsftpd/empty
# 启用目录消息功能
dirmessage_enable=YES
# 使用本地时间显示文件修改时间
use_localtime=YES
# 启用日志记录
xferlog_enable=YES
# 使用端口20进行数据连接
connect_from_port_20=YES
# 配置 SSL 相关
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
# 启用监听模式和IPv6支持
listen=NO
listen_ipv6=YES
# 启用本地用户登录
local_enable=YES
# 确保用户被限制在其主目录中
chroot_local_user=YES
# 不启用本地用户的chroot列表
chroot_list_enable=NO
创建目录:
sudo mkdir -p /srv/ftp
设置目录权限:确保该目录对所有人具有读取权限
sudo chown -R ftp:ftp /srv/ftp
sudo chmod 755 /srv/ftp
-
ftp:ftp
:这是ftp
用户组的所有权。 -
755
:此权限设置允许匿名用户读取目录中的文件,但不允许修改或删除。
重启 vsftpd 服务
在完成配置后,重启 vsftpd
服务以应用更改:
sudo systemctl restart vsftpd
测试匿名用户登录
使用 FTP 客户端连接到你的 FTP 服务器,测试匿名用户能否访问公共目录:
ftp <服务器IP地址>
在提示输入用户名时输入 anonymous
,密码可以随意输入(通常为空或者是电子邮件地址)。
上传文件到公共目录
如果你希望匿名用户能够下载文件,可以将公共文件上传到 /srv/ftp
目录。FTP 服务器会将该目录内容提供给匿名用户。
sudo cp <file_to_share> /srv/ftp
匿名用户将能够通过 FTP 客户端或浏览器下载这些文件。
通过上述配置,匿名用户将能够访问你指定的公共目录,并且只能进行读取操作。确保公共目录的权限设置正确,以防止匿名用户不必要的修改或上传操作。
ftp 本地用户与匿名用户的区别
本地用户:
- 使用服务器上已存在的系统账户(用户名/密码)。
- 拥有根据系统配置的权限,可以上传、下载文件,访问自己的主目录,或被分配的目录。
- 通常有较高的安全性和权限控制。
匿名用户:
- 使用通用的
anonymous
登录,通常不需要密码,或使用电子邮件作为密码。 - 通常只能访问有限的公共目录,权限较低,无法写入或上传文件(除非服务器特别配置)。
- 适合公开文件的访问或下载。
- 使用通用的
防火墙设置
如果使用防火墙,确保允许 FTP 服务器的相关端口(默认情况下,FTP 使用 TCP 端口 21)。
访问 FTP 服务器
通过 FTP 客户端(如 FileZilla、WinSCP 等)使用主机 IP 地址、用户名和密码连接到 FTP 服务器。
Windows 文件管理器:Win11 支持 FTP,Win10 没有测试。
浏览器:大多数浏览器已经不支持 FTP。
- Edge 和 Chrome 不支持。害我半夜,捣鼓了很久。
- 360 浏览器支持
本文共 2910 个字数,平均阅读时长 ≈ 8分钟
评论 (0)