6.3 ftp #
6.3.1 协议介绍 #
FTP(File Transfer Protocol)是一种用于在计算机网络上进行文件传输的标准协议。它使用客户端-服务器模型,在客户端和服务器之间进行文件传输和交互。
FTP 协议定义了一套命令和响应规范,用于控制和管理文件传输过程。它支持用户身份验证、目录浏览、文件上传和下载等操作。
在 FTP 中,存在两种模式来建立数据连接:主动(Active)模式和被动(Passive)模式。
-
主动模式(Active Mode):
- 在主动模式下,FTP 客户端使用随机生成的端口(通常大于1024)向服务器的默认 FTP 数据端口(端口20)发起连接。
- FTP 客户端发送一个 PORT 命令,其中包含客户端的 IP 地址和数据端口号。
- FTP 服务器使用它的默认控制端口(端口21)向 FTP 客户端的指定数据端口发起连接,以建立数据连接,并进行文件传输。
- 主动模式需要 FTP 服务器能够主动连接 FTP 客户端,因此 FTP 服务器通常需要允许外部访问,并配置防火墙和 NAT 设备以允许数据连接。
-
被动模式(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 的一些主要特点:
-
安全性:vsftpd 注重安全性,提供了多种安全特性和选项。它支持 SSL/TLS 加密传输,可以保护 FTP 连接的机密性。此外,它还支持用户访问限制、防止匿名访问和限制 FTP 命令等功能,以增强服务器的安全性。
-
高性能:vsftpd 被设计为高性能的 FTP 服务器,具有低的资源占用和高的吞吐量。它采用异步 I/O 和多线程处理技术,能够处理大量的并发FTP连接,同时提供快速的文件传输速度。
-
可定制性:vsftpd 具有丰富的配置选项,允许管理员根据需求进行定制。您可以根据需要配置用户访问权限、目录限制、上传/下载限制、日志记录等。
-
虚拟用户支持: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 中的一些常用命令:
service vsftpd start
:启动 vsftpd 服务。service vsftpd stop
:停止 vsftpd 服务。service vsftpd restart
:重启 vsftpd 服务。service vsftpd status
:检查 vsftpd 服务的状态。service vsftpd reload
:重新加载 vsftpd 的配置文件,使更改生效。chkconfig vsftpd on
:设置 vsftpd 在系统启动时自动启动。chkconfig vsftpd off
:禁止 vsftpd 在系统启动时自动启动。useradd -d /path/to/home -s /sbin/nologin username
:创建一个 FTP 用户,指定家目录和禁止登录 shell。passwd username
:设置 FTP 用户的密码。userdel username
:删除 FTP 用户。chmod
和chown
:用于更改文件和目录的权限和所有者,以控制用户对文件的访问。ls
:列出当前目录中的文件和目录。cd
:更改当前目录。get
:从FTP服务器下载文件到本地计算机。put
:将文件上传到FTP服务器。mget
:批量下载多个文件。mput
:批量上传多个文件。delete
:从 FTP 服务器上删除文件。mkdir
:在 FTP 服务器上创建目录。rmdir
:删除 FTP 服务器上的目录。quit
或exit
:退出 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: