ftp 命令与服务

一、部署 FTP 服务

1.1 FTP 的发展

FTP(File Transfer Protocol,文件传输协议)自 1970 年代起就成为了文件传输的主要协议之一。随着互联网和网络技术的发展,FTP 服务器也不断演变。

FTP 服务器的发展:

  1. 早期发展: 最初的 FTP 协议仅支持简单的明文文件传输,缺乏安全机制,因此较易受到攻击。它主要用于学术机构和企业之间的文件共享。
  2. 引入安全协议: 为了解决 FTP 的安全问题,出现了多种安全扩展协议,如 FTPS(FTP over SSL/TLS)和 SFTP(基于 SSH 的 FTP)。这些协议加密了文件传输,确保数据的保密性。
  3. 现代化需求: 现代 FTP 服务器不仅需要支持安全的文件传输,还要求能够高效处理大规模文件传输、远程管理、用户认证以及与现代操作系统的兼容性。

常见的 FTP 服务器:

  1. ProFTPD

    • 特点: ProFTPD 是一款功能丰富的开源 FTP 服务器,支持虚拟主机、匿名访问、TLS 加密以及 IPv6。它的配置类似于 Apache HTTP 服务器,适合需要定制化配置的用户。
    • 适用场景: 企业环境和高级用户,尤其适合拥有多个虚拟主机的服务器。
  2. vsftpd (Very Secure FTP Daemon)

    • 特点: vsftpd 以其安全性闻名,是许多 Linux 发行版的默认 FTP 服务器。它支持 FTPS 和 SFTP,并以其高效和低资源占用著称。
    • 适用场景: 需要高安全性和性能的服务器,如托管服务提供商和大型企业。
  3. FileZilla Server

    • 特点: FileZilla 不仅是著名的 FTP 客户端,还提供了一个简单易用的 FTP 服务器。FileZilla Server 专注于 Windows 平台,支持 FTP 和 FTPS。
    • 适用场景: 中小型企业和个人用户,尤其是需要在 Windows 环境中部署 FTP 服务的用户。
  4. Pure-FTPd

    • 特点: Pure-FTPd 是一款易于配置的开源 FTP 服务器,支持 TLS 加密、虚拟用户、带宽限制等功能。它注重安全性和简单性。
    • 适用场景: 需要快速部署且安全可靠的 FTP 服务器,如小型企业和项目。
  5. Wing FTP Server

    • 特点: Wing FTP Server 是一款跨平台的商业 FTP 服务器,支持 FTP、FTPS、SFTP、HTTP 和 HTTPS 传输协议。它提供了图形化界面和详细的日志功能,适合大规模企业使用。
    • 适用场景: 企业级解决方案,尤其是需要多协议支持和图形化管理工具的用户。
  6. 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

配置文件说明

  1. anonymous_enable​: 设置是否允许匿名用户登录。通常为 NO​ 以提高安全性。

    • YES​:允许匿名登录。
    • NO​:不允许匿名用户访问。
  2. local_enable​: 允许本地系统用户使用 FTP 登录。如果需要本地用户登录访问 FTP,则设置为 YES​。

  3. write_enable​: 是否允许用户在 FTP 服务器上进行写操作(如上传、删除文件)。为 YES​ 时允许写操作。

  4. local_umask​: 设置上传文件的权限掩码。022​ 掩码表示新文件的默认权限为 755(目录)或 644(文件)。

  5. pasv_enable​: 启用被动模式(PASV)。如果客户端和服务器之间有防火墙/NAT,启用此选项有助于解决数据连接问题。

  6. pasv_min_port pasv_max_port​: 设置 PASV 模式下的数据端口范围,防止服务器开放太多端口。建议指定一个较小的端口范围。

  7. chroot_local_user​: 限制本地用户只能访问其主目录,提高安全性,防止用户访问服务器的其他部分。

  8. ftpd_banner​: 登录 FTP 时显示的欢迎消息。你可以根据需要自定义内容。

  9. max_clients max_per_ip​: 设置 FTP 服务器允许的最大并发连接数,以及每个 IP 地址允许的最大连接数。这有助于防止单个客户端占用过多资源。

  10. listen_port​: 设置 FTP 服务器监听的端口,默认是 21。如果你想在不同的端口运行 FTP 服务器,可以在这里更改。

  11. listen​: 是否启用独立模式下的 vsftpd 服务器。YES ​表示独立运行,不依赖 inetd 或 xinetd。

  12. SSL/FTPS 配置:

  • ssl_enable​: 启用 SSL 加密以实现安全的 FTP 传输(FTPS)。
  • rsa_cert_file rsa_private_key_file​: SSL 证书和私钥文件路径。
  • force_local_logins_ssl force_local_data_ssl​: 强制本地用户登录和数据传输时使用 SSL 加密,确保传输安全。
  1. xferlog_enable​: 启用传输日志记录。xferlog_file​ 指定了日志文件的位置,xferlog_std_format=YES​ 将日志以标准 FTP 格式记录。
  2. max_upload_rate​: 限制每个用户上传文件的最大速率,单位为字节。这里设置了 1 MB/s 的上传限制。
  3. 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 浏览器支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值