2021-04-17

VSFTP

安全特征:

1.任何需要执行较高权限的指令都需要上层程序许可
2.ftp所需要使用的绝大部分命令都被整合到了vsftp中,基本不需要系统额外提供命令
3.拥有chroot功能,可以改变用户的根目录,限制用户只能在自己家的根目录

vsftp连接类型:

控制连接(持续连接)->TCP21(命令信道)->用户收发ftp命令
数据连接(按需连接)->TCP20(数据信道)->用于上传下载数据

匿名用户验证实验:

anonymous_enable=YES		#启动匿名访问
anon_umask=022	#匿名用户所上传文件的权限掩码
anon_root=/var/ftp		#匿名用户的FTP根目录
anon_upload_enable=YES	#允许上传文件
anon_mkdir_write_enable=YES	#允许创建目录
anon_other_write_enable=YES	#开发其他写入权(删除,覆盖,重命名)
anon_max_rate=0	#限制最大传输速率(0为不限速,单位:bytes/秒)
本地用户验证实验
local_enable=YES	#是否启用本地系统用户
local_umask=YES		#本地用户所上传文件的权限掩码
local_root/var/ftp	#设置本地用户的FTP根目录
chroot_local_user=YES	#是否将用户禁锢在主目录
chroot_list_file=/etc/vsftpd/chroot_list
#白名单文件所在位置需要自己创建
local_max_rate=0	#限制最大传输速率
ftpd_banner=Welcome to blah FTP service#用户登录时显示的欢迎信息
userlist_enable=YES&userlist_deny=YES
#禁止/ect/vsftpd/user_list文件中出现的用户名登陆FTP
Userlist_enable=YES&userlist_deny=NO
#仅允许访问/ect/vsftpd/user_list文件中出现的用户名登陆FTP

配置文件:ftpusers
#禁止/etc/vsftpd/ftpusers文件中出现的用户名登陆FTP,权限比user_list跟高,即时生效,所有写入本文件的用户名都不允许登陆FTP
虚拟用户:
人为创建,生成数据文件,找一个系统用户作为虚拟用户的映射用户,借助系统用户的家目录作为默认登陆点。每一个虚拟用户的权限都可以单独定制。
虚拟用户验证实验:

建立FTP的虚拟用户的用户数据库文件(在/etc/vsftpd)

vim vsftpd.user
注:该文件名可以随便定义,文件内容格式:奇数行用户,偶数行密码
db_load -T -t hash -f vsftpd.user vsftpd.db
修改权限chmod 600 vsftpd.db
#修改文件权限为600 保证其安全性

创建FTP虚拟用户的映射用户,并制定其用户的家目录

useradd -d /var/ftproot -s /sbin/nologin virtual
#创建用户virtual用户作为ftp的虚拟用户

建立支持该用户的PAM认证文件,添加虚拟用户支持

cp -a /var/pam.d/vsftpd /etc/pam.d/vsftpd.pam
#使用模板生成自己的认证配置文件,方便一会调用
编辑新生成的文件vsftpd.pam(清空原来内容,添加下列两行字)

auth			required		pam_userdb.so	db=/etc/vsftpd/vsftpd
account		required		pam_userdb.so	db=/etc/vsftpd/vsftpd

在vsftpd.conf配置文件中添加支持配置
修改:
pam_service_name=vsftpd.pam
添加:

guest_enable=YES
guest_username=virtual
user_config_dir=/ect/vsftpd/dir

4.为虚拟用户建立独立的配置文件,启动服务并测试
注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉
用户可以上传:
Anon_upload_enable=YES #允许上传文件
用户可以创建目录或者文件:
Anon_mkdir_write_enable=YES #允许创建目录
用户可以修改文件名:
Anon_upload_enable=YES #允许上传文件(为了覆盖开启)
Anon_other_write_enable=YES #允许重名和删除文件,覆盖
注:给映射用户的家目录,设置o+r让虚拟用户有读权限
Openssl+vsftpd加密验证方式:
拓展:使用tcpdump工具进行指定窗口抓包,抓住ftp登录过程中的数据包
Tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 来源IP

-i		#interface:指定tcpdump需要监听的接口
-n		#对地址以数字方式显式,否则显式为主机名
-nn		#除了-n的作用外,还把端口显示为数值,否则显示端口服务名
-X		#输出包的头部数据,会以16进制和ASCII两种方式同时输出
-vv		#产生更详细的输出

  1. 查看是否安装了openssl
    rpm -q openssl
  2. 查看vsftpd是否支持openssl
    lld /usr/sbin/vsftpd | egrp libssl
上一篇:vsftpd


下一篇:Linux:离线搭建vsftpd服务