文件传输协议FTP
FTP工作原理
- FTP介绍
文件传输协议:File Transfer Protocol ,基于C/S架构
数据传输格式:二进制(默认)、文本
双通道协议:命令和数据连接
- 两种工作模式:从服务器角度
1️⃣ 主动(port style):服务器主动连接
命令(控制):客户端随机Port --->服务器21/tcp
数据:客户端随机Port<---服务器:20/tcp
2️⃣ 被动模式(PASV style):客户端主动连接
命令(控制): 客户端随机Port --->服务器21/tcp
数据:客户端随机Port--->服务器随机port/tcp
3️⃣ 范例:服务器被动模式数据端口
227 Entering Passive Mode (0,0,0,0,183,57).
在FTP中,当出现上述消息时,它通常意味着FTP客户端正在尝试与FTP服务器建立数据连接,而不是控制连接(控制连接用于发送FTP命令和响应)。
括号内的数字 (0,0,0,0,183,57)是被动模式(PASV模式)的IP地址和端口编码。FTP的被动模式允许FTP服务器告知FTP客户端哪个端口它应该侦听以便接收和发送数据。
数字解读:
前四个数字(0.0.0.0)通常代表FTP服务器的IP地址。但在某些情况下服务器会出于安全原因反回0.0.0.0。这通常表示客户端应该使用它用于控制连接的同一IP来连接数据端口
后两个数字(183,57)实际上是一个端口号。具体的说,随机端口号=183*256+57=46905
- FTP状态码:
1XXX:信息,125:数据链接打开
2XXX:成功类状态, 200:命令OK,230:登陆成功
3XXX:补充类,331:用户名OK
4XXX:客户端错误,425:不能打开数据连接
5XXX:服务器错误,530:不能登录
- 用户认证
匿名用户:ftp,anonymous,对应linux用户ftp
系统用户:Linux用户
虚拟用户:特定服务的专用用户,独立的用户/密码文件
vsftpd服务常见配置
1️⃣ 命令端口
listen_port=21默认值为21
2️⃣ 主动模式端口
connect_from_port_20=YES主动模式端口为20
ftp_data_port=20(默认)指定主动模式的端口
3️⃣ 被动模式端口范围
linux ftp客户端默认使用被动模式
window ftp客户端默认使用主动模式
--端口范围会影响FTP客户端的并发数
pasv_min_port=6000 #设置被动模式使用的最小端口号
pasv_max_port=6200 #设置被动模式使用的最大端口号
4️⃣ 使用当地时间
use_localtime=YES #使用当地时间(默认为NO,使用MGT)
5️⃣ 匿名用户登录
anonymous_enable=YES #支持匿名用户,CentOS8默认不允许匿名
no_anon_password=YES #匿名用户跳过口令检测,默认为NO
6️⃣ 匿名用户上传
anon_upload_enable=YES #匿名上传,须注意文件系统权限
anon_mkdir_write_enable=YES #匿名创建目录
注意:需要开启文件系统的访问权限,不能给FTP根目录写权限,只能给子目录写权限,否则会报错。
anon_world_readable_only=YES #只能下载全部读的文件,默认YES
anon_umask=0333 #指定匿名上传文件的umask,默认0777,注意0333中的0不能省略
anon_other_write_enble=YES #可删除和修改上传的文件,默认为NO
7️⃣ 指定匿名用户上传的文件的默认所有者和权限
chown_uploads=YES #默认为NO
chown_username=www
chown_upload_mode=0644
8️⃣ Linux系统用户
local_enable=YES #是否允许linux用户登录
write_enable=YES #允许linux用户上传文件
local_umask=022/ #指定系统用户上传的文件的默认权限
9️⃣ 将系统用户映射为指定的guest用户
guest_enable=YES #所有系统用户都用映射为guest用户
guest_username=ftp #配合上面选项才生效,指定guest用户
local_root=/ftproot guest用户登录所在目录
- 禁锢系统用户
chroot_local_user=YES #禁锢系统用户,默认NO,即不禁锢
# 禁锢或不禁锢特定系统用户在家目录中,与上面设置功能相反
chroot_list_enable=YES #默认是NO
chroot_list_file=/etc/vsftpd/chroot_list #默认值
- 当chroot_local_user=YES和chroot_list_enable=YES时,则chroot_list中用户不禁锢,即白名单
- 当chroot_local_user=NO和chroot_list_enable=YES时,则chroot_list中用户禁锢,即黑名单
- FTP日志
# wu-ftp日志:默认启用
xferlog_enable=YES #启用记录上传和下载日志,默认YES
xferlog_std_format=YES使用wu-ftp日志格式,默认为YES
xferlog_file=/var/log/xferlog #可自动生成
# vsftpd日志,默认不启用
dual_log_enable=YES #使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log #可自动生成,默认路径
- 是否启用控制用户登录的列表文件
userlist_enable=YES #默认
userlist_deny=YES #黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/user_list #默认文件路径
- vsftpd服务指定用户身份运行
nopriv_user=nobody #默认值
- 连接数限制
max_clients=0 #最大并发连接数,如果超出,会报错:421 There are too many connected users,olease try later.
- 每个IP同时发起的最大连接数
max_per_ip=0 #每个IP同时发起的最大连接数
- 传输速率,单位 :字节/秒
anon_max_rate=0 #匿名用户最大传输
local_max_rate=0 #本地用户最大传输
- 连接时间
connect_timeout=60 #主动模式数据连接超时时长
accept_timeout=60 #被动模式数据连接超时时长
data_connecttion_timeout=300 #数据连接无数据传输超时时长
idle_session_timeout=60 #无命令操作超时时长
- 优先以文本传输,注:不建议使用文本方式,可能会导致二进制文件内容损坏
ascli_upload_enable=YES
ascli_download_enable=YES