vsftpd是FTP协议的实现工具,是一个ftp服务器。
mysql
FTP协议基于TCP协议通讯,且占用两个TCP端口,分为两个链接,分别为命令链接和数据链接;sql
命令链接:即正常客户端与服务器端简历链接,数据请求时创建的链接等。数据库
数据链接:即数据传输时创建的链接。安全
FTP协议有两种工做模式,分别为主动模式和被动模式bash
主动模式:客户端使用TCP随机端口号发起请求到服务器端,而服务器端使用TCP21号端口相应并与之创建命令链接,而后服务器端使用TCP20号端口向客户端发送数据传输请求的数据链接,客户端使用命令链接所使用的随机端口号+1的端口(若是+1被占用,那就+2,以此类推)等待并相应服务器端。服务器
被动模式:客户端使用随机端口发起请求到服务器端,服务器端使用TCP21号端口相应并与之创建命令链接,而后客户端使用命令链接所使用的随机端口号+1的端口(若是+1被占用,那就+2,以此类推)发起数据传输请求到服务器端,服务器端使用TCP随机端口号相应;之因此使用随机端口,是为了解决可能出现多个客户端同时须要传输文件的需求。架构
注意:主动模式有一个弊端,若是客户端上有防火墙存在,是不容许服务器主动发起请求到客户端的,防火墙会视之为扫描后***,会致使FTP传输的失败,而被动模式不会有这种状况发生。并发
FTP数据都是流式化之后传输的,要么是文本字节码,要么是二进制流框架
FTP协议是C/S架构ssh
服务器端经常使用的程序:
wu-ftp
proftpd
pureftp
vsftpd:Very Secure ftpd
IIS
ServU
客户端经常使用的程序:
GUI,图形界面程序
flashfxp
cuteftp
filezilla(开源)
gftp(Linux)
CLI,命令行程序
ftp
lftp
wget
lftpwget
用户认证方式:
系统用户
虚拟用户
hash file,使用hash文件存储用户名及密码
mysql,使用mysql数据库存储用户名及密码
匿名用户
数据传输安全:
sftp:ssh提供的基于ssh协议的ftp
ftps:基于ssl的ftp
响应码:
1xx:信息码
2xx:成功状态码
3xx:进一步提示补全信息的状态码
4xx:客户端错误
5xx:服务端错误
安装vsftpd:
使用rpm包安装便可
pam:Plugable Authentication Module,插件式认证模块
nsswitch:名称解析框架
模块化:/lib64/libnss*,/usr/lib64/libnss*
配置文件:/etc/nsswitch.conf
pam:认证框架,pam认证时都是基于配置文件认证的
模块化:/lib64/security/pam*.so
配置文件:/etc/pam.conf和/etc/pam.d/*
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
主程序文件:/usr/sbin/vsftpd
数据文件:/var/ftp
配置文件的修改:/etc/vsftpd/vsftpd.conf
对于ftp访问ftp服务时应该对其chroot,避免切换目录后产生安全隐患
chroot_local_user={YES|NO} //YES即启用禁锢用户功能,使用户登录进入FTP目录后,没法切换目录 chroot_list_enable={YES|NO} // 这个指令必须和chroot_list_file一块儿启用 // 不能上面的chroot_local_user同时启用,由于上面的chroot_list_enable指令是禁锢全部用户 chroot_list_file=/etc/vsftpd/chroot_list // chroot_list_file文件中的用户名即为指定的被禁锢的用户,每行一个用户名
匿名用户的配置:
anonymous_enable=YES // 容许匿名用户登录 anonymous_upload_enable=YES // 容许匿名用户上传文件 anonymous_write_enable=YES // 容许匿名用户删除文件 anon_mkdir_write_enable=YES // 容许匿名用户建立删除目录 注意:启用写入功能时,ftp用户对相应的本地文件系统也要有相应的写入权限;生效的权限取决于文件 系统权限和服务权限的交集;
banner信息的配置:
ftpd_banner=Welcome to blah FTP service. // 直接输入banner信息 banner_file=/PATH/TO/BANNER_FILE // 定义banner信息文件 例:banner_file=/etc/vsftpd/banner,而后在banner文件中输出banner信息便可 注意:ftpd_banner和banner_file指令不能同时开启 dirmessage_enable=YES // 这个指令的做用是,用户在访问特定目录时会弹出特定banner信息 // 在须要弹出banner信息的目录下编辑一个.message文件便可 // 例如/var/ftp/.message
控制登录用户的机制:
/etc/vsftpd/ftpusers中的用户都不容许使用ftp服务,这是在/etc/pam.d/vsftpd文件中定义的,一行一个用户
/etc/vsftpd/userlist文件:
黑名单:默认即为黑名单
在/etc/vsftpd/vsftpd.conf中修改 userlist_enable=YES // 启用userlist文件 userlist_deny=YES // 拒绝此文件中的用户
白名单:
在/etc/vsftpd/vsftpd.conf中修改 userlist_enable=YES // 启用userlist文件 userlist_deny=NO // 容许此文件中的用户访问ftp服务
注意:/etc/vsftpd/ftpusers是黑名单,/etc/vsftpd/userlist若是设置为白名单,若是这时候黑名单和白名单中存在同一个用户,那么拒绝优先
链接限制:
max_clients= // 最大并发链接数 max_per_ip= // 每IP可同时发起的并发请求
速率限制:
anon_max_rate= // 匿名用户的最大传输速率,单位是“字节/秒” local_max_rate= // 本地用户的最大传输速率,单位是“字节/秒”
上传文件的umask:用于限制上传的文件的权限
anon_umask= // 匿名用户上传文件的umask; local_umask= // 本地用户上传文件的umask;
修改匿名用户上传文件的属主和属组:
chown_uploads=YES chown_username=someuser // 全部匿名用户上传的文件的属主和属组都会改变成chown_username所指定的用户名
虚拟用户:
全部的虚拟用户都会被映射为一个系统用户,访问时的文件目录是为此系统用户的家目录;
虚拟用户的用户名和密码存储方式:
hash编码的文件:
奇数行为用户名,偶数行为密码
关系型数据库:
vsftpd的用户认证支持从关系型数据库中读取用户名和密码,由于vsftpd的认证机制由pam进行管理,因此只要pam支持关系型数据库就能够。
pam-mysql实现认证
因为pam不支持mysql认证,因此此处的pam-mysql模块是第三方模块,使得pam支持
传输日志:
xferlog_enable=YES xferlog_file=/var/log/vsftpd.log
这篇主要是笔记的整理,写的比较潦草,若有遗漏错误和争议之处,欢迎你们的批评指正和讨论,谢谢。