互联网协议 — FTP/TFTP 文件传输协议

目录

FTP

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

vsftpd 软件包

vsftpd(very secure FTP daemon)是一个实现了 FTP 协议的软件包,安全性是它的最大特点,并支持以下功能:

  1. 安全性;
  2. 带宽限制;
  3. 可伸缩性;
  4. 支持虚拟用户;
  5. 支持 IPv6;
  6. 高传输速率等。

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

  1. FTP 控制连接(Control commands transmission port,21):用来控制管理;
  2. FTP 数据连接(Date transmission port,20):用于数据传输。

NOTE:值得注意的是,由于 FTP 工作方式的不同,Date port 并不总是 20 的。这就是主动(PORT)与被动(PASV)模式的最大区别。

在这里插入图片描述

PORT 主动模式

在这里插入图片描述

vsftpd 开启主动模式:

pasv_enable=NO

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 被动模式

在这里插入图片描述

vsftpd 开启被动模式(默认):

pasv_enable=YES

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 它处于被动模式时才启用。

访问控制方式

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=120

dirmessage_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 shell
        virtual  # All virtual user will mapped as system user when they login.

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

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

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 应用程序。

TFTP

TFTP(Trivial File Transfer Protocol,简单文件传输协议),顾名思义是简单版本的 FTP 协议,采用 UDP 传输协议(69 端口),设计的目的适用于小文件的数据传输。

因此,TFTP 只能从文件服务器上获得或写入文件,不支持身份认证,不支持列出目录。TFTP 支持 3 种传输模式:

  1. netascii:8bits 的 ASCII 码形式;
  2. octet:8bits 的源数据类型;
  3. mail:已经不再支持。

传输过程

  1. TFTP client 向 Server 发送 get 请求(即读请求);
  2. TFTP server 会使用一个新的、临时的 UDP Port 进行数据传输;
  3. 当 server 找到指定的文件后,会立刻打开文件,把文件中的数据通过 TFTP 协议发送给 client;
  4. 如果文件的大小较大,则会分为多次发送,每次发送 512Bytes 数据;

在这里插入图片描述

由于发送次数可能会很多,为了让 client 能够对这些数据进行排序组合。所以在 server 发送 512Bytes 的同时还会插入 2Bytes 的控制信息。这些控制信息称为 “操作码”。

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范桂飓

文章对您有帮助就请一键三连:)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值