目录

文章目录

  • 目录
  • FTP
  • vsftpd
  • 自动模式和被动模式
    • PORT 主动模式
    • PASV 被动模式
  • 访问控制方式
  • 部署配置
    • FTP Server
      • Global config
      • Anonymous User
      • Local User
      • Virtual User
      • 带宽限速配置
    • FTP Client

FTP

FTP(File Transfer Protocol,文件传输协议),用于 Internet 上的控制文件的双向传输(Download/Upload),使用 TCP 协议提供可靠传输。FTP 是一个 C/S 架构。用户通过一个支持 FTP 协议的 Client,连接到在远程主机上的 FTP Server。

FTP 使用两条 TCP 连接实现文件传输:

  1. 一条是 FTP 控制连接,用来控制管理;
  2. 另一条是 FTP 数据连接,用于数据传输。

互联网协议 — FTP 文件传输协议-编程知识网

vsftpd

vsftpd(very secure FTP daemon),安全性是它的一个最大的特点。可以支持很多其他的 FTP 服务器所不支持的特征,例如:

  • 非常高的安全性需求。
  • 带宽限制。
  • 良好的可伸缩性。
  • 可创建虚拟用户。
  • 支持 IPv6。
  • 速率高等。

自动模式和被动模式

FTP 基于 TCP 协议,不支持 UDP 协议。与众不同的是 FTP 使用了 2 个端口,一个 Date transmission port 端口和一个 Control commands transmission port 端口。通常来说这两个端口是 20 和 21。但由于 FTP 工作方式的不同,Date port 并不总是 20 的。这就是主动(PORT)与被动(PASV)模式的最大区别。

PORT 主动模式

互联网协议 — FTP 文件传输协议-编程知识网

Client 从一个任意的 Port N(N>1024)连接到 FTP Server 的 Port 21,Client 开始监听 Port N+1,并发送 FTP CLI “PORT N+1” 到 FTP Server,然后 Server 以 Data Port 20 连接到 Client 指定的 Data Port N+1。

开启主动模式:

pasv_enable=NO

PASV 被动模式

互联网协议 — FTP 文件传输协议-编程知识网

Client 从一个任意的 Port N(N>1024)连接到 FTP Server 的 Port 21,Client 开始监听 Port N+1,Client 提交 PASV CLI,Server 收到 PASV 后会开启一个任意的 Port P(P >1024),并发送 “PORT P” 命令给 Client。然后 Client 发起从 Port N+1 到 Server Port P 的连接用来传送数据。

该模式中,Control 连接和 Data 连接都是由 Client 发起的,这样就可以解决从 Server 到 Client 的 Data 端口的入方向连接被防火墙过滤掉的问题。所以,该模式只有当 Client 通知 Server 它处于被动模式时才启用。

开启被动模式(默认):

pasv_enable=YES

访问控制方式

FTP Server 支持以下 3 中访问权限类型

  1. 匿名用户。
  2. 本地用户。
  3. 虚拟用户。

NOET:virtual user 和 local user 不能同时存在。

User permission control file

  • /etc/vsftpd/ftpuser:deny login user, have higher priority
  • /etc/vsftpd/user_list:only allow login user

部署配置

FTP Server

yum -y install vsftpd

Global config

vim /etc/vsftpd/vsftpd.conf

# YES:Client 上传或下载的日志都会被纪录起来。
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog # Control Port。
listen_port=21
# Listen IP Address。
listen_address=172.18.22.68
# PORT 模式下的 Data Port。
connect_from_port_20=YES# (PASV) 是否启动被定联机模式(passivity mode)。
pasv_enable=NO
# (PASV) min float portNumber
pasv_min_port=8066
# (PASV) max float portNumber
pasv_max_port=8099# 限制最大的客户端连接数,0 表示没有限制。
max_clients=0
# 数据连接超时时间。
data_connection_timeout=120dirmessage_enable=YES
tcp_wrappers=YES
pam_service_name=vsftpd

NOTE:/var/ftp 目录不能更改用户主和用户组和最高权限,默认即可。

Anonymous User

anonymous_enable=YES
anon_umask=022
anon_root=/var/ftp/anon
anon_upload_enable=YES
anon_other_write_enable=YES

创建目录:

mkdir /var/ftp/anon

配置权限:757(出于安全的考虑)或 777。

chmod 777 /var/ftp/anon

Local User

vim /etc/vsftpd/vsftpd.conf

# 允许 /etc/passwd 本地账户登陆。
local_enable=YES
local_root=/var/ftp
# 允许本地账户具有读写权限。
write_enable=YES
# 允许本地账户下载。
download_enable=YES
# 设定本地账户创建 Dir/File 时的权限掩码。
local_umask=022# 通过搭配能实现以下几种效果: 
#  1. chroot_list_enable=YES,chroot_local_user=YES:在 /etc/vsftpd/chroot_list 文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。 
#  2. chroot_list_enable=YES,chroot_local_user=NO:在 /etc/vsftpd/chroot_list 文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。 
#  3. chroot_list_enable=NO,chroot_local_user=YES:所有的用户均不能切换到其他目录。 
#  4. 当chroot_list_enable=NO,chroot_local_user=NO:所有的用户均可以切换到其他目录。
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=YES
chroot_list_enable=YES

创建 FTP local user:

useradd ftpuser
passwd ftpuser

Virtual User

step1. Create virtual user register DB file.

 touch vuser.list

vim vuser.list

userName
userPasswd 

step2. Convert the format of userDB file to Berkey DB.

db_load -T -t hash -f vuser.list vuser.db
chmod 600 vuser.*

step3. Create FTP root file also virtual user mapped as system user.

useradd -d /var/ftp/soft -s /sbin/nologin virtual-d  # specify virtual's homeDirectory-S  # specify virtual's shellvirtual  # All virtual user will mapped as system user when they login.

虚拟用户上传时使用 virtual user 的身份来进行,其宿主目录为 /var/ftp/soft:

chmod 755 /var/ftp/soft   # Home directory permission decided what can the virtual user do in the FTP share home directory.

step4. Create PAM authentication file to support virtual user login. (PAM Pluggable authentication modules)
vim /etc/pam.d/vsftpd.vu

auth required pam.userdb.so db=/etc/vsftpd/vuser     # identity authentication specify vuser.db file
account required pam.userdb.so db=/etc/vsftpd/vuser  # identity verification

step5. Edit the vsftp.conf file

guest_enable=YES
guest_username=virtual       # specify virtual user mapped system user
pam_service_name=vsftpd.vu   # PAM authentication file,localUser's PAM is vsftpd. So localUser and virtualUser can't exist at the same time.

step6. Set the specific permission for virtualUser.

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_dir
mkdir /etc/vsftpd/vuser_dir

vim /etc/vsftpd/vuser_dir/deradm

anon_ipload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_eoor=/var/market         # specify virtual user home directory.

NOET:If virtual user want to get the rwx permission in directory, we can set permission of 757 to the directory.Because the virtual user use the O(other)identity to access the directory. And we could be change the ownUser to ftp.

带宽限速配置

利用 vsftpd 进行速率限制,需要了解几个配置参数:

  • anon_max_rate:设置匿名用户每条连接最大上传或下载速率。
  • local_max_rate:设置本地用户每条连接最大上传或下载速率。
  • max_per_ip:设置每个用户允许连接最大连接数,即每台电脑同时可以打开几个 FTP 连接。
  • max_clients:设置允许同时连接服务器最大客户端数。

e.g.

anon_max_rate=20000         # 大约 20kb/s。
max_per_ip=3                # 每个 IP 同时允许打开三个连接。
max_clients=3               # 同时允许 3 个客户端建立连接。

FTP Client

  • FileZilla Client