vsftpd简析

vsftpd是FTP协议的实现工具,是一个ftp服务器。

FTP协议基于TCP协议通信,且占用两个TCP端口,分为两个连接,分别为命令连接和数据连接;

命令连接:即正常客户端与服务器端简历连接,数据请求时建立的连接等。

数据连接:即数据传输时建立的连接。


FTP协议有两种工作模式,分别为主动模式和被动模式

主动模式:客户端使用TCP随机端口号发起请求到服务器端,而服务器端使用TCP21号端口相应并与之建立命令连接,然后服务器端使用TCP20号端口向客户端发送数据传输请求的数据连接,客户端使用命令连接所使用的随机端口号+1的端口(如果+1被占用,那就+2,以此类推)等待并相应服务器端。

被动模式:客户端使用随机端口发起请求到服务器端,服务器端使用TCP21号端口相应并与之建立命令连接,然后客户端使用命令连接所使用的随机端口号+1的端口(如果+1被占用,那就+2,以此类推)发起数据传输请求到服务器端,服务器端使用TCP随机端口号相应;之所以使用随机端口,是为了解决可能出现多个客户端同时需要传输文件的需求。

注意:主动模式有一个弊端,如果客户端上有防火墙存在,是不允许服务器主动发起请求到客户端的,防火墙会视之为扫描后***,会导致FTP传输的失败,而被动模式不会有这种情况发生。


FTP数据都是流式化以后传输的,要么是文本字节码,要么是二进制流


FTP协议是C/S架构

  服务器端常用的程序:

    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


这篇主要是笔记的整理,写的比较潦草,如有遗漏错误和争议之处,欢迎大家的批评指正和讨论,谢谢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章