6.3 ftp

6.3 ftp #

6.3.1 协议介绍 #

FTP(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的标准协议。它使用客户端-服务器模型,在客户端和服务器之间进行文件传输和交互。

FTP 协议定义了一套命令和响应规范,用于控制和管理文件传输过程。它支持用户身份验证、目录浏览、文件上传和下载等操作。

在 FTP 中,存在两种模式来建立数据连接:主动(Active)模式和被动(Passive)模式。

  1. 主动模式(Active Mode):

    • 在主动模式下,FTP 客户端使用随机生成的端口(通常大于1024)向服务器的默认 FTP 数据端口(端口20)发起连接。
    • FTP 客户端发送一个 PORT 命令,其中包含客户端的 IP 地址和数据端口号。
    • FTP 服务器使用它的默认控制端口(端口21)向 FTP 客户端的指定数据端口发起连接,以建立数据连接,并进行文件传输。
    • 主动模式需要 FTP 服务器能够主动连接 FTP 客户端,因此 FTP 服务器通常需要允许外部访问,并配置防火墙和 NAT 设备以允许数据连接。
  2. 被动模式(Passive Mode):

    • 在被动模式下,FTP 客户端发送 PASV 命令给 FTP 服务器,请求进入被动模式。
    • FTP 服务器在一个固定的范围内选择一个可用的端口(通常大于1024),并将其作为数据端口。
    • FTP 服务器将自己的 IP 地址和数据端口作为响应发送给FTP客户端。
    • FTP 客户端使用这个 IP 地址和数据端口发起连接,以建立数据连接,并进行文件传输。
    • 被动模式适用于FTP客户端位于防火墙或 NAT 后面的情况,因为它不需要FTP服务器主动连接FTP客户端。

总结来说,主动模式和被动模式是 FTP 用于建立数据连接的两种不同方式。主动模式要求 FTP 服务器主动连接 FTP 客户端,而被动模式则允许 FTP 客户端主动连接 FTP 服务器。在配置 FTP 服务器和网络环境时,需要根据具体情况选择适合的模式,并确保防火墙和 NAT 设备正确配置以允许数据连接的建立。

6.3.2 vsftpd #

vsftpd(Very Secure FTP Daemon)是一个开源的FTP服务器软件,旨在提供一个安全、稳定和高性能的FTP服务器。它是Linux和UNIX系统中最常用的FTP服务器之一。

下面是 vsftpd 的一些主要特点:

  1. 安全性:vsftpd 注重安全性,提供了多种安全特性和选项。它支持 SSL/TLS 加密传输,可以保护 FTP 连接的机密性。此外,它还支持用户访问限制、防止匿名访问和限制 FTP 命令等功能,以增强服务器的安全性。

  2. 高性能:vsftpd 被设计为高性能的 FTP 服务器,具有低的资源占用和高的吞吐量。它采用异步 I/O 和多线程处理技术,能够处理大量的并发FTP连接,同时提供快速的文件传输速度。

  3. 可定制性:vsftpd 具有丰富的配置选项,允许管理员根据需求进行定制。您可以根据需要配置用户访问权限、目录限制、上传/下载限制、日志记录等。

  4. 虚拟用户支持:vsftpd 支持虚拟用户,这些用户的认证信息可以存储在独立的数据库中,而不是使用系统用户。这提供了更灵活的用户管理和认证方式。

# 安装服务端和客户端
yum install vsftpd ftp -y

# 启动
systemctl start vsftpd.service

# 添加防火墙,因为有主动和被动模式,可以使用 firewall-cmd 方式添加服务
firewall-cmd --add-service ftp

启动 ftp 服务后可以使用匿名账号登录,匿名账号用户民为 ftp,密码可以为空:

建议将 selinux 改为 permissive

getsebool -a | grep ftpd
setsebool -P <sebool> 1

配置文件 #

/etc/vsftpd/vsftpd.conf

## 用户黑名单
/etc/vsftpd/ftpusers

# 黑白名单
/etc/vsftpd/user_list

6.3.3 常用命令 #

以下是 vsftpd 中的一些常用命令:

  1. service vsftpd start:启动 vsftpd 服务。
  2. service vsftpd stop:停止 vsftpd 服务。
  3. service vsftpd restart:重启 vsftpd 服务。
  4. service vsftpd status:检查 vsftpd 服务的状态。
  5. service vsftpd reload:重新加载 vsftpd 的配置文件,使更改生效。
  6. chkconfig vsftpd on:设置 vsftpd 在系统启动时自动启动。
  7. chkconfig vsftpd off:禁止 vsftpd 在系统启动时自动启动。
  8. useradd -d /path/to/home -s /sbin/nologin username:创建一个 FTP 用户,指定家目录和禁止登录 shell。
  9. passwd username:设置 FTP 用户的密码。
  10. userdel username:删除 FTP 用户。
  11. chmodchown:用于更改文件和目录的权限和所有者,以控制用户对文件的访问。
  12. ls:列出当前目录中的文件和目录。
  13. cd:更改当前目录。
  14. get:从FTP服务器下载文件到本地计算机。
  15. put:将文件上传到FTP服务器。
  16. mget:批量下载多个文件。
  17. mput:批量上传多个文件。
  18. delete:从 FTP 服务器上删除文件。
  19. mkdir:在 FTP 服务器上创建目录。
  20. rmdir:删除 FTP 服务器上的目录。
  21. quitexit:退出 FTP 会话。

6.3.4 虚拟用户验证 #

guest_enable=YES

guest_username=vuser

# 权限控制文件
user_config_dir=/etc/vsftpd/vuserconfig

allow_writeable_chroot=YES

pam_service_name=vsftpd.vuser

创建虚拟用户:

设置让 ftp 识别验证 vuser.db。编写一个 /etc/pam.d/vsftpd.vuser 格式与 /etc/pam.d/vsftpd 相同,文件内容为:

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser

修改主配置文件 /etc/vsftpd/vsftpd.conf :

关闭 pam_service_name=vsftpd 配置,这样匿名和本地用户就不被支持了。

添加或打开以下配置:

guest_enable=YES
guest_username=vuser
allow_writeable_chroot=YES
pam_service_name=vsftpd.vuser
user_config_dir=/etc/vsftpd/vusercofig
截图中的 allow_writeable_chroot 写错了。

/etc/vsftpd/vuserconfig 这个目录默认是没有的,需要手动创建,因为有 u1,u2,u3 三个虚拟用户,可以在 /etc/vsftpd/vuserconfig 目录下创建 3 个同名文件:

每个文件配置的 ftp 的权限控制,常见配置如下:

local_root=/data/ftp
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
download_enable=YES

配置完成后重启 ftp 服务:

systemctl restart vsftpd.service

用另外一台机器可以测试,用虚拟用 u1 登录 ftp: