文件传输协议
Vsftpd服务程序
匿名访问模式
本地用户模式
虚拟用户模式
TFTP简单文件传输协议
文件传输协议
一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式。今天的互联网是由几千万台个人计算机、工作站、服务器、小型机、大型机、巨型机等具有不同型号、不同架构的物理设备共同组成的,而且即便是个人计算机,也可能会装有Windows、Linux、UNIX、Mac等不同的操作系统。为了能够在如此复杂多样的设备之间解决问题解决文件传输问题
,
文件传输协议(FTP)应运而生
FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口
20(数据端口)
用于进行数据传输
,端口21(
命令
端口)
用于接受客户端发出的相关FTP
命令
与参数。FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技
两种服务模式:
主动 服务器主动向客户端发起连接
被动 等待客户端发起连接--- 默认模式
高效的同同时也带来了安全的威胁
三大不安全服务:telnet ftp http 明文传输易被捕获数据
Vsftpd服务程序
是FTP高效与安全的结合体
vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。
Vsftpd 支持三种登录验证方式
匿名开放模式
:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。
本地用户模式
:是通过
Linux系统
本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。
虚拟用户模式
:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。
登录方式 登录后所在路径
匿名公开 var/ftp
本地用户 用户家目录
虚拟用户 映射用户的家目录
配置Vsftpd
1.挂载系统光驱
2.安装vsftpd
yum install vsftpd
3.清理防火墙规则
iptables -F
4.过滤vsftpd配置文件中的注释
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak 备份vsftpd配置文件出来
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf 过滤掉配置文件中的#注释并将过滤后的结果写入到vsftpd配置文件中
5.安装ftp,他是Linux系统中以命令行界面的方式来管理FTP传输服务的客户端工具
yum install ftp
vsftpd服务程序常用的参数以及作用
参数
|
作用
|
listen=[YES|NO]
|
是否以独立运行的方式监听服务
|
listen_address=IP地址
|
设置要监听的IP地址
|
listen_port=21
|
设置FTP服务的监听端口
|
download_enable=[YES|NO]
|
是否允许下载文件
|
userlist_enable=[YES|NO]
userlist_deny=[YES|NO]
|
设置用户列表为“允许”还是“禁止”操作
|
max_clients=0
|
最大客户端连接数,0为不限制
|
max_per_ip=0
|
同一IP地址的最大连接数,0为不限制
|
anonymous_enable=[YES|NO]
|
是否允许匿名用户访问
|
anon_upload_enable=[YES|NO]
|
是否允许匿名用户上传文件
|
anon_umask=022
|
匿名用户上传文件的umask值
|
anon_root=/var/ftp
|
匿名用户的FTP根目录
|
anon_mkdir_write_enable=[YES|NO]
|
是否允许匿名用户创建目录
|
anon_other_write_enable=[YES|NO]
|
是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
|
anon_max_rate=0
|
匿名用户的最大传输速率(字节/秒),0为不限制
|
local_enable=[YES|NO]
|
是否允许本地用户登录FTP
|
local_umask=022
|
本地用户上传文件的umask值
|
local_root=/var/ftp
|
本地用户的FTP根目录
|
chroot_local_user=[YES|NO]
|
是否将用户权限禁锢在FTP目录,以确保安全
|
local_max_rate=0
|
本地用户最大传输速率(字节/秒),0为不限制
|
匿名访问模式
vsftpd服务程序默认开启了匿名开放模式,我们需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。需要注意的是,针对匿名用户放开这些权限会带来潜在危险,仅存在实验环境中使用
可以向匿名用户开放的权限参数以及作用
参数
|
作用
|
anonymous_enable=YES
|
允许匿名访问模式
|
anon_umask=022
|
匿名用户上传文件的umask值
|
anon_upload_enable=YES
|
允许匿名用户上传文件
|
anon_mkdir_write_enable=YES
|
允许匿名用户创建目录
|
anon_other_write_enable=YES
|
允许匿名用户修改目录名称或删除目录
|
1修改vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
写入以下配置
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
2.重启服务,加入启动项
systemctl restart vsftpd
systemctl enable vsftpd
3.修改匿名用户目录所有权限为ftp用户所有
chown -Rf ftp /var/ftp/pub
4.筛选出SELinux中对FTPD服务的规则 并修改为on
getsebool -a | grep ftp
setsebool -P ftpd_full_access=on
5.再次重启服务即可完成匿名用户的切换,写入新建,权限
本地用户模式
相较于匿名开放模式,本地用户模式要更安全,而且配置起来也很简单
本地用户模式使用的权限参数以及作用
参数
|
作用
|
anonymous_enable=NO
|
禁止匿名访问模式
|
local_enable=YES
|
允许本地用户模式
|
write_enable=YES
|
设置可写权限
|
local_umask=022
|
本地用户模式创建文件的umask值
|
userlist_deny=YES
|
启用“禁止用户名单”,名单文件为ftpusers和user_list
|
userlist_enable=YES
|
开启用户作用名单文件功能
|
1修改vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
写入以下配置
anonymous_enable=no
anon_umask=022
local_enable=YES
write_enable=YES
local_umask=022
2.重启服务,加入启动项
systemctl restart vsftpd
systemctl enable vsftpd
3.root=用户登录失败,查看Vsftpd用户列表
该列表就是黑名单,表单中用户都是禁止登录的用户名,为了安全root默认不允许登录ftp
cat /etc/vsftpd/user_list
cat /etc/vsftpd/ftpusers
我们可以从列表中清除需要登录的用户名或者用本地不在列表中的用户登录即可
4.用普通用户登录后无权限创建需要修改SELinux配置
筛选出SELinux中对FTPD服务的规则 并修改为on
getsebool -a | grep ftp
setsebool -P ftpd_full_access=on
虚拟用户模式
我们最后讲解的虚拟用户模式是这三种模式中最安全的一种认证模式,当然,因为安全性较之于前面两种模式有了提升,所以配置流程也会稍微复杂一些。
1.创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码
cd /etc/vsftpd/
vim vuser.list
2.用db_load命令用哈希(hash)算法将原始的账户明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。
加密过后的文件必须是db结尾!
db_load -T -t hash -f vuser.list vuser.db
chmod 600 vuser.db
rm -f vuser.list
3.创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置
由于Linux系统中的每一个文件都有所有者、所属组属性,例如使用虚拟账户“张三”新建了一个文件,但是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限。
为了方便管理FTP服务器上的数据,可以把这个系统本地用户的家目录设置为/var目录(该目录用来存放经常发生改变的数据)。
并且为了安全起见,我们将这个系统本地用户设置为不允许登录FTP服务器(因为该用户只是为了映射虚拟用户的一个载体),这不会影响虚拟用户登录,而且还可以避免黑客通过这个系统本地用户进行登录
。
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /var/ftproot/
4.建立用于支持虚拟用户的PAM文件 (灵活的中间认证层)
PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的
服务与认证方式分开
,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。
通俗来讲,PAM是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改。PAM采取了分层设计(应用程序层、应用接口层、鉴别模块层)的思想,其结构如图
新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀
vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser
5.在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu,PAM作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要PAM认证时,则需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能
例如,在vsftpd服务程序的主配置文件中默认就带有参数pam_service_name=vsftpd,表示登录FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的。现在我们要做的就是把vsftpd主配置文件中原有的PAM认证文件vsftpd修改为新建的vsftpd.vu文件即可。该操作中用到的参数以及作用如表
利用PAM文件进行认证时使用的参数以及作用
参数
|
作用
|
anonymous_enable=NO
|
禁止匿名开放模式
|
local_enable=YES
|
允许本地用户模式
|
guest_enable=YES
|
开启虚拟用户模式
|
guest_username=virtual
|
指定虚拟用户账户
|
pam_service_name=vsftpd.vu
|
指定PAM文件
|
allow_writeable_chroot=YES
|
允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
|
vim /etc/vsftpd/vsftpd.conf
local_enable=YES
anonymous_enable=NO
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
pam_service_name=vsftpd.vu
6.为虚拟用户设置不同的权限。虽然账户zhangsan和lisi都是用于vsftpd服务程序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许张三上传、创建、修改、查看、删除文件,只允许李四查看文件。这可以通过vsftpd服务程序来实现。只需新建一个目录,在里面分别创建两个以zhangsan和lisi命名的文件,其中在名为zhangsan的文件中写入允许的相关权限(使用匿名用户的参数)
mkdir /etc/vsftpd/vuser_dir/
cd /etc/vsftpd/vuser_dir/
touch lisi
vim zhangming
anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
然后再次修改vsftpd主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。为了让修改后的参数立即生效,需要重启vsftpd服务程序并将该服务添加到开机启动项中
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vuser_dir
7.修改SELinux配置
getsebool -a | grep ftp
setsebool -P ftpd_full_access=on
TFTP简单文件传输协议
简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。顾名思义,它提供不复杂、开销不大的文件传输服务(可将其当作FTP协议的简化版本)。
TFTP的命令功能不如FTP服务强大,甚至不能遍历目录,在安全性方面也弱于FTP服务。而且,由于TFTP在传输文件时采用的是UDP协议,占用的端口号为69,因此文件的传输过程也不像FTP协议那样可靠。但是,因为TFTP不需要客户端的权限认证,也就减少了无谓的系统和网络带宽消耗,因此在传输琐碎(trivial)不大的文件时,效率更高。
安装TFTP服务
1.yum install tftp-server tftp
2.在RHEL 7系统中,TFTP服务是使用xinetd服务程序来管理的。xinetd服务可以用来管理多种轻量级的网络服务,而且具有强大的日志功能。简单来说,在安装TFTP软件包后,还需要在xinetd服务程序中将其开启,把默认的禁用(disable)参数修改为no
vim /etc/xinetd.d/tftp
3.重启xinetd服务并加入启动项
,
有些系统的防火墙默认没有允许UDP协议的69端口,因此需要手动将该端口号加入到防火墙的允许策略中
systemctl restart xinetd
systemctl enable xinetd
firewall-cmd --permanent --add-port=69/udp
firewall-cmd --reload
TFTP的根目录为/var/lib/tftpboot。我们可以使用刚安装好的tftp命令尝试访问其中的文件,亲身体验TFTP服务的文件传输过程。在使用tftp命令访问文件时,可能会用到表中的参数。
tftp命令中可用的参数以及作用
命令
|
作用
|
?
|
帮助信息
|
put
|
上传文件
|
get
|
下载文件
|
verbose
|
显示详细的处理信息
|
status
|
显示当前的状态信息
|
binary
|
使用二进制进行传输
|
ascii
|
使用ASCII码进行传输
|
timeout
|
设置重传的超时时间
|
quit
|
退出
|
测试
echo "i love you" > /var/lib/tftpboot/520.txt
tftp 192.168.10.10
get 520.txt
跨主机测试需要清理防火墙规则 并保存生效
客户机上安装tftp客户端:
yum install tftp
有异常执行以下命令
iptables -L
service iptables save
来源:oschina
链接:https://my.oschina.net/u/3115396/blog/3195371