文件传输协议(FTP)
文件传输协议(英文:File Transfer Protocol,缩写:FTP)早期的三个应用级协议之一,是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式,即基于C/S结构。它属于网络传输协议的应用层。
双通道协议:数据和命令连接
数据传输格式:二进制(默认)和文本
两种模式:服务器角度
主动(PORT style):服务器主动连接
- 命令(控制):客户端:随机port → 服务器:tcp21
- 数据:客户端:随机port ← 服务器:tcp20
被动(PASV style):客户端主动连接
- 命令(控制):客户端:随机port → 服务器:tcp21
- 数据:客户端:随机port ← 服务器:随机port
服务器被动模式数据端口示例:
227 Entering Passive Mode (192,168,175,138,224,59)
服务器数据端口为:224*256+59
FTP软件介绍
FTP服务器:
vsftpd:Very Secure FTP Daemon,
CentOS默认FTP服务器,高速,稳定,下载速度是WU-FTP的两倍
ftp.redhat.com数据:单机最多可支持15000个并发
其他ftp服务器
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
FTP服务
状态码:
1XX:信息 125:数据连接打开
2XX:成功类状态 200:命令OK 230:登录成功
3XX:补充类 331:用户名OK
4XX:客户端错误 425:不能打开数据连接
5XX:服务器错误 530:不能登录
用户认证:
匿名用户:ftp,anonymous,对应Linux用户ftp
系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
虚拟用户:特定服务的专用用户,独立的用户/密码文件
nsswitch:network service switch名称解析框架
pam:pluggable authentication module 用户认证
/lib64/security /etc/pam.d/ /etc/pam.conf
vsftpd服务
由vsftpd包提供,不再由xinetd管理
用户认证配置文件:
/etc/pam.d/vsftpd
服务脚本:
/usr/lib/systemd/system/vsftpd.service /etc/rc.d/init.d/vsftpd
配置文件:
/etc/vsftpd/vsftpd.conf man 5 vsftpd.conf 格式:option=value 注意:= 前后不要有空格
匿名用户(映射为系统用户ftp )共享文件位置:
/var/ftp
系统用户共享文件位置:用户家目录
虚拟用户共享文件位置:为其映射的系统用户的家目录
vsftpd服务配置
命令端口
listen_port=21
主动模式端口
connect_from_port_20=YES 主动模式端口为20 ftp_data_port=20 指定主动模式的端口
被动模式端口范围
pasv_min_port=6000 0为随机分配 pasv_max_port=6010
linux 客户端默认使用被动模式
windows 客户端默认使用主动模式
使用当地时间
use_localtime=YES 使用当地时间(默认为NO,使用GMT)
匿名用户
anonymous_enable=YES 支持匿名用户 no_anon_password=YES (默认NO) 匿名用户略过口令检查 anon_world_readable_only (默认YES)只能下载全部读的文件 anon_upload_enable=YES 匿名上传,注意:文件系统权限 anon_mkdir_write_enable=YES anon_umask=077 指定匿名上传文件的umask anon_other_write_enable=YES 可删除和修改上传的文件
指定上传文件的默认的所有者和权限
chown_uploads=YES(默认NO) chown_username=wang chown_upload_mode=0644
Linux系统用户
guest_enable=YES 所有系统用户都映射成guest用户 guest_username=ftp 配合上面选项才生效,指定guest用户 local_enable=YES 是否允许linux用户登录 write_enable-YES 允许linux用户上传文件 local_umask=022 指定系统用户上传文件的默认权限 local_root=/ftproot 非匿名用户登录所在目录
禁锢所有系统用户在家目录中 chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户 禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list 当chroot_local_user=YES时,则chroot_list中用户不禁锢 当chroot_local_user=NO时,则chroot_list中用户禁锢
wu-ftp日志:默认启用
xferlog_enable=YES (默认)启用记录上传下载日志 xferlog_std_format=YES (默认)使用wu-ftp日志格式 xferlog_file=/var/log/xferlog (默认)可自动生成 vsftpd日志:默认不启用 dual_log_enable=YES 使用vsftpd日志格式,默认不启用 vsftpd_log_file=/var/log/vsftpd.log (默认)可自动生成
登录提示信息
ftpd_banner=“welcome to mage ftp server" banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效
目录访问提示信息
dirmessage_enable=YES (默认)
message_file=.message (默认)信息存放在指定目录下.message
使用pam(Pluggable Authentication Modules)完成用户认证
pam_service_name=vsftpd pam配置文件:/etc/pam.d/vsftpd /etc/vsftpd/ftpusers 默认文件中用户拒绝登录
是否启用控制用户登录的列表文件
userlist_enable=YES 默认有此设置 userlist_deny=YES(默认值)黑名单,不提示口令,NO为白名单 userlist_file=/etc/vsftpd/users_list 此为默认值
连接限制
max_clients=0 最大并发连接数 max_per_ip=0 每个IP同时发起的最大连接数
vsftpd服务指定用户身份运行
nopriv_user=nobody
传输速率:字节/秒
anon_max_rate=0 匿名用户的最大传输速率 local_max_rate=0 本地用户的最大传输速率
连接时间:秒为单位
connect_timeout=60 主动模式数据连接超时时长 accept_timeout=60 被动模式数据连接超时时长 data_connection_timeout=300 数据连接无数据输超时时长 idle_session_timeout=60 无命令操作超时时长
优先以文本方式传输
ascii_upload_enable=YES
ascii_download_enable=YES
配置FTP服务以非独立服务方运行:listen=NO,默认为独立方式
cat /etc/xinetd.d/vsftpd service ftp { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/vsftpd log_on_failure += USERID disable = no }