文件传输协议
为了解决在复杂多样的设备之间的文件传输问题
FTP是一种基于客户端/服务器模式的文件传输协议,默认使用20、21号端口
端口20(数据端口)用于进行数据传输(目录列表,数据)
端口21(命令端口)用于接收客户端发出的相关FTP命令与参数
FTP服务器普遍部署于内网中,特点:容易搭建、方便管理
有些FTP客户端工具支持文件的多点下载以及断电续传技术
FTP协议传输拓扑图:
FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机
FTP客户端是向服务器发送连接请求,以建立数据传输链路的主机
FTP协议有两种工作模式:
主动模式:FTP服务器主动向客户端发起连接请求
被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)
防火墙一般是用于过滤从外网进入内网的流量,即有时候需将FTP的工作模式设置为主动模式才可传输数据
vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,特点:安全开源免费,具有很高的安全性、传输速度以及支持虚拟用户验证等其它FTP服务程序不具备的特点
安装vsftpd服务程序
- yum安装vsftpd服务程序
1 | yum install -y vsftpd |
清空iptables防火墙的默认策略,保存当前状态
iptables防火墙工具默认禁止了FTP传输协议的端口,此操作可避免配置vsftpd服务程序时被默认的防火墙策略影响
1 | iptables -F |
- 查看vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)
1 | cat -n /etc/vsftpd/vsftpd.conf |
- 备份vsftpd的主配置文件并将注释信息去掉
1 | mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak |
Vsftpd服务程序的三种认证模式
vsftpd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上
匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器
本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器
虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响
安装ftp——Linux系统中以命令行界面的方式来管理FTP传输服务的客户端工具
1 | yum install -y ftp |
匿名访问模式
- 开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限
1 | vim /etc/vsftpd/vsftpd.conf |
- 重启vsftpd,并加入开机启动项
1 | systemctl restart vsftpd |
尝试创建一个新的目录文件,以检验是否拥有写入权限,发现创建失败
匿名开放认证模式下,其账号为:anonymous或ftp,密码为空
默认的访问目录是 /var/ftp
1 | ftp 192.168.40.131 |
- 查看目录的写入权限,修改目录的所有者为ftp,再次尝试还是失败
1 | ls -ld /var/ftp/pub |
- 修改SElinux中与ftp有关的策略规则,并用-p参数使其永久生效,再次尝试后顺利写入文件
1 | getsebool -a | grep ftp |
本地用户模式
- 关闭匿名开放模式,开启本地用户模式
1 | vim /etc/vsftpd/vsftpd.conf |
- 重启vsftpd服务程序【并加入开机启动项】
1 | systemctl restart vsftpd |
为实现root管理员登录FTP服务器,需删除“用户名单”文件(ftpusers和user_list)里的root用户名
vsftpd服务程序为了保证服务器的安全性,默认禁止了root管理员和大多数系统用户的登录行为,这可有效避免黑客通过FTP服务对root管理员密码进行暴力破解
vsftpd服务程序目录中的ftpusers和user_list这两个文件的功能——只要里面写有某个用户的名字,就不再允许这个用户登录到FTP服务器上
1 | vim /etc/vsftpd/user_list |
- root用户名登录FTP服务器,执行文件的创建、重命名及删除等命令
1 | ftp 192.168.40.131 |
说明:由于在匿名访问模式中已经开启了SELinux域对FTP服务的允许策略,所以此处可省略
虚拟用户模式
创建用于进行FTP认证的用户数据库文件,奇数行为 账户名,偶数行为 密码
这里分别创建zhangsan和lisi两个用户,密码均为redhat
1 | vim /etc/vsftpd/vuser.list |
使用
db_load
命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并降低数据库文件的权限,然后再把原始的明文信息文件删除明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需转为数据库文件
1 | cd /etc/vsftpd/ |
创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户
将系统本地用户的家目录设置为/var目录(该目录用来存放经常发生改变的数据),同时为了安全起见,将系统本地用户设置为不允许登录FTP服务器,这不会影响虚拟用户登录,且还可避免黑客通过系统本地用户进行登录
1 | useradd -d /var/ftproot -s /sbin/nologin virtual |
建立用于支持虚拟用户的PAM文件vsftpd.vu
PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,不用写数据库文件的后缀
PAM是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改
1 | vim /etc/pam.d/vsftpd.vu |
- 将vsftpd服务程序的主配置文件中的pam_service_name参数(PAM认证文件的名称)修改为vsftpd.vu,并配置相应参数
1 | vim /etc/vsftpd/vsftpd.conf |
为虚拟用户设置不同的权限,张三允许上传、创建、修改、查看、删除文件,李四只允许查看文件
创建两个以zhangsan和lisi命名的文件,在名为zhangsan的文件中写入允许的相关权限(使用匿名用户的参数)
1 | mkdir /etc/vsftpd/vusers_dir/ |
- 修改vsftpd主配置文件,添加user_config_dir参数,并重启vsftpd服务
1 | vim /etc/vsftpd/vsftpd.conf |
- 设置SELinux域允许策略,并使用虚拟用户模式登录FTP服务器验证
1 | getsebool -a | grep ftp |
TFTP简单文件传输协议
- 简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议
- 提供不复杂、开销不大的文件传输服务(可将其当作FTP协议的简化版本)
- TFTP的命令功能不如FTP服务强大,甚至不能遍历目录,在安全性方面也弱于FTP服务
- TFTP在传输文件时采用的是UDP协议,占用的端口号为69
- TFTP不需要客户端的权限认证,减少了无谓的系统和网络带宽消耗,在传输琐碎(trivial)不大的文件时,效率很高
- TFTP的根目录为/var/lib/tftpboot
- 安装TFTP软件包
1 | yum install -y tftp-server tftp |
在xinetd服务程序中将TFTP服务开启,即把默认的禁用(disable)参数修改为no
在RHEL 7系统中,TFTP服务是使用xinetd服务程序来管理的。xinetd服务可用来管理多种轻量级的网络服务,且具有强大的日志功能
1 | vim /etc/xinetd.d/tftp |
- 重启xinetd服务并加入到开机启动项,然后手动将UDP协议的端口号69加入到防火墙的允许策略
1 | systemctl restart xinetd |
- tftp命令中可用的参数以及作用
命令 | 作用 |
---|---|
? | 帮助信息 |
put | 长传文件 |
get | 下载文件 |
verbose | 显示详细的处理信息 |
status | 显示当前的状态信息 |
binary | 使用二进制进行传输 |
ascii | 使用ASCII码进行传输 |
timeout | 设置重传的超时时间 |
quit | 退出 |
1 | echo "i love linux" > /var/lib/tftpboot/readme.txt |
TFTP服务与其他软件相搭配,可组合出一套完整的自动化部署系统方案