文件传输协议FTP
1、基于C/S架构
2、双通道协议:数据和命令连接
3、数据传输格式:二进制(默认)和文本
4、两种模式:服务器角度
- 主动(POST style):服务器主动连接
命令(控制):客户端:随机port—>服务器:tcp21
数据:客户端:随机port<—服务器:tcp20 - 被动(PASV style): 客户端主动连接
命令(控制):客户端:随机port—>服务器: tcp21
数据:客户端:随机port—>服务器:随机port
5、服务器被动模式数据端口示例:
- 命令通道建立连接的回话中,会协商数据通道要使用的端口
- 227(状态码) Entering Passive Mode (ip ,224,59)
服务器数据端口为:224*256+59
FTP软件介绍
1、FTP服务器:
- Wu-ftpd,Proftpd,Pureftpd,ServU,IIS(微软)
- vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器,高速而且稳定
2、客户端软件:
- ftp,lftp,lftpget,wget,curl
- lftp -A ftpserver port -A 主动模式 -p 被动模式
- lftp -u username ftpserver
- lftp username@ftpserver
- lftpget ftp://ftpserver/pub/file
- filezilla(windows),CuteFTP,FlashFXP,LeapFtp
- IE浏览器中输入 ftp://username:password@ftpserver
FTP服务
1、状态码:
- 1XX:信息 125:数据连接打开
- 2XX:成功类状态 200:命令OK 230:登录成功
- 3XX:补充类 331:用户名OK
- 4XX:客户端错误 425:不能打开数据连接
- 5XX:服务器错误 530:不能登录
2、用户认证:
- 匿名用户:ftp,anonymous,对应Linux用户ftp
- 系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow
- 虚拟用户:特定服务的专用用户,独立的用户密码文件
- nsswitch:network service switch
- pam:用户认证 /lib64/security /etc/pam.d/ /etc/pam.conf
vsftp服务
1、由vsftp包提供,不再由xinetd管理,用户认证配置文件:/etc/pam.d/vsftpd
2、服务脚本:/usr/lib/systemd/system/vsftpd.service,/etc/rc.d/init.d/vsftpd
3、配置文件:/etc/vsftpd/vsftpd.conf
- 格式:option=value
- 注意:= 前后不要有空格
4、匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
5、系统用户共享文件位置:用户家目录
6、虚拟用户共享文件位置:为其映射的系统用户的家目录
vsftpd服务配置
1、命令端口
1 | listen_port=21 |
2、主动模式端口
1 | connect_from_port_20=YES 主动模式端口为20 |
3、被动模式端口范围
linux 客户端默认使用被动模式
windows 客户端默认使用主动模式
1 | pasv_min_port=6000 0为随机分配 |
4、使用当地时间
1 | use_localtime=YES 使用当地时间(默认为NO,使用GMT) |
5、匿名用户
1 | anonymous_enable=YES 支持匿名用户 |
指定上传文件的默认的所有者和权限
1 | chown_uploads=YES(默认NO) |
6、linux系统用户
1 | guest_enable=YES 所有系统用户都映射成guest用户 |
7、禁锢所有系统用户在家目录中
1 | chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户 |
8、禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反
1 | chroot_list_enable=YES |
9、vsftpd日志
1 | dual_log_enable=YES 使用vsftpd日志格式,默认不启用 |
10、登录提示信息
1 | ftpd_banner=“welcome to mage ftp server" |
11、目录访问提示信息
1 | dirmessage_enable=YES (默认) |
12、使用pam(Pluggable AuthenticationModules)完成用户认证
1 | pam_service_name=vsftppam |
13、是否启用控制用户登录的列表文件
1 | userlist_enable=YES 默认有此设置 |
14、vsftpd服务指定用户身份运行
1 | nopriv_user=nobody (默认值) |
15、连接数限制
1 | max_clients=0 最大并发连接数 |
16、传输速率:字节/秒
1 | anon_max_rate=0 匿名用户的最大传输速率 |
17、连接时间:秒为单位
1 | connect_timeout=60 主动模式数据连接超时时长 |
18、优先以文本方式传输
1 | ascii_upload_enable=YES |
实现基于SSL的FTPS
1、 查看是否支持SSL
1 | ldd `which vsftpd` 查看到libssl.so |
2、 创建自签名证书
1 | cd /etc/pki/tls/certs/ |
3、 配置vsftpd服务支持SSL:/etc/vsftpd/vsftpd.conf
1 | ssl_enable=YES 启用SSL |
4、 用filezilla等工具测试
vsftpd虚拟用户
1、虚拟用户:
所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号
的家目录
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
2、虚拟用户帐号的存储方式:
文件:编辑文本文件,此文件需要被编码为hash格式
奇数行为用户名,偶数行为密码
db_load -T -t hash -f vusers.txt vusers.db
关系型数据库中的表中:
3、实时查询数据库完成用户认证
mysql库:pam要依赖于pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README