1.文件传输协议
最早FTP,Telnet,HTTP协议传输数据用明文,为解决安全问题,发明了vsftpd
FTP有主动模式(服务器主动链接客户端)和被动模式(服务器等大地客户端发起请求)一般iptable主要是INPUT表规则多,所以如果想传数据,可以使用主动模式
1.1 安装
apt install vsftpd
2 vsftpd
2.1 配置
配置使用时,需合理配置防火墙,iptables默认禁止了ftp协议号:
iptables -F
iptables-save
有三种模式:
匿名方式 任何人可以无需密码登录服务器
本地模式 通过系统本地用户名和密码信息进行认证
虚拟用户模式 更安全的方式,为FSP服务单独建立用户数据库文件,虚拟出来进行密码验证的账户信息,这些信息在服务器系统中实际不存在,进攻FTP服务程序认证使用,这样即使黑客破解了账户信息也无法登录服务器(为什么?)
2.2 匿名模式
vim /etc/vsftpd.conf
添加如下配置
anoymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
保存退出,重启vsftpd服务
执行ftp 192.168.80.136,连接目标主机,提示先后输入用户名和密码,登录提示no route to host,清空iptables表后就可以了。用户名输入anonymous,密码可以不输入直接回车
登录后根目录位于环境实际的/srv/ftp下,默认该目录下无内容,且该目录属主为root:ftp,所以anonymous无法创建文件夹
如果需要创建文件夹,可用root在此路径创个public,把属主改成ftp,然后就可以创文件夹了
2.3 本地用户模式
即通过linux用户名密码认证登录,配置如下
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask-022 # 创的文件夹权限=777-umask =777-022=755
userlist_deny=YES
userlist_enable=YES
然后重启vsftpd服务,用一般用户登录
用root登录,发现无法登录
检查后发现userlist_deny=YES这个配置会检查文件/etc/ftpusers列出的用户,这些用户,即使密码正确,也无法ftp登录,功能类似黑名单,可以发现,root用户在该文件中
在该文件中注释掉 root所在行,重启服务,重试root登录,发现成功登录
2.4 虚拟用户模式
虚拟用户模式配置文件和manual都没提及,可以在官网看Manpage of VSFTPD.CONF (beasts.org)
1 配置如下
guest_enable=YES # 允许虚拟用户模式
guest_username=virtual # 该值为为虚拟用户模式创的一个用户的名称
pam_service_name=vsftpd.vu # 此处为虚拟用户认证的插件文件名,即一个可插拔模块文件的文件名
2 准备认证用户和密码,单数行是用户名,双数行是密码
将其用has转换为加密db文件
3 虚拟用户登录后,由于登录后会默认位于用户home目录,但虚拟用户实际不存在就没有home用户目录,需要用实际用户home目录对虚拟用户home目录做个映射,禁止新创用户登录权限
4 创pam文件
pam是可认证插拔模块,即可以自定义认证信息,然后配置应用程序使用pam,pam认证路径为经处理的自定义认证文件
注意,此图/etc/pam.d/vsftpd.vir有个错误,pam_userdb.so db=/etc/virtual_user.db,要去掉.db后缀,否则用户无法登录!!
再把配置文件的pam_service_name改对
5 为虚拟用户设置不同权限
每个用户权限单独配一个文件,如下图
在配置文件添加该用户配置文件夹
6 重启服务,验证
注意
7 总结下,弄的配置文件目前有这么多,理一下各文件意义
3 TFTP 简单文件传输协议
TFTP是基于UDP的传输协议,可以视为FTP的简化版,协议端口号是69,不需要客户端权限认证
3.1 安装
apt install tftp tftpd
3.2 配置
tftp用xinet管理,安装完tftp后,需要修改xinet配置文件,将tftp服务开启
3.3 使用
类似vsftpd,tftp 192.168.80.136