RHEL7--第十一章-Vsftp
使用 Vsftpd服务传输文件
备注:所有的服务在设置完后,需把服务设置成开机自启: # systemctl enable 服务名称
- 文件传输协议
1:FTP 文件传输协议——为了解决各种复杂多样的系统之间在网络中的文件传输问题而诞生的;
FTP协议基于 客户端/服务器模式;
默认端口:20 21
20:进行数据传输;
21:接受客户端发出的相关FTP命令与参数;
特点:
部署于内网中,容易搭建,方便管理;
部分FTP客户端工具支持多点下载和断点续传技术;
FTP服务器
按照 FTP协议在互联网上提供文件存储和访问服务的主机;
FTP客户端
是向服务器发送链接请求,以建立数据传输链接的主机;
FTP协议的两种工作模式
主动模式:FTP服务器主动向客户端发送连接请求;
防火墙过滤外网进入内网的流量,此时需要设置成主动模式,传输数据;
被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式);
相关的FTP服务程序
vsftpd(very secure ftp daemon,非常安全的FTP守护进程)
特点:是运行在Linux系统上的FTP服务程序,开源免费,安全性,传输速度,支持虚拟用户验证等其他FTP服务不具备的特点;
运行环境:
FTP服务器上,管理设置FTP服务器;
安装 vsftpd服务程序;
# yum install -y vsftpd
主配置文件:
/etc/vsftpd/vsftpd.conf
技巧:
由于配置文件内容都是 # 注释符,可以使用 grep -v 命令来反选内容;
# cp -a /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
# grep -v "#" /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf
# cat /etc/vsftpd/vsftpd.conf
配置FTP服务器时,关闭防火墙,方便测试;
# systemctl stop firewalld
# systemctl disable firewalld
参数:
2:vsftpd服务程序
vsftpd允许用户的三种认证模式;
匿名开放模式
最不安全的认证模式,任何人都可以无需密码验证直接登录FTP服务器;
本地用户模式
通过 Linux系统本地账户密码信息进行认证,安全,配置简单;被黑客破解账户,即可登录FTP服务器;
虚拟用户模式
3中认证模式中最安全的,为FTP服务器单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,这些账户实际不存在的,仅供FTP服务器进行认证使用;
ftp 是linux系统中以命令行界面来管理 FTP传输服务的客户端工具
安装 FTP客户端工具
# yum install -y ftp
/var/ftp 是FTP服务器的默认访问路径;连接成功后,就在此目录下;
1)匿名访问模式
vsftpd服务程序默认开启了匿名开放模式;只需开放匿名用户的上传,下载的权限;
参数:
例:
A:只需配置匿名访问模式的权限,匿名模式默认为开启状态;
# vi /ect/vsftpd/vsftpd.conf
配置完后重启 vsftpd服务;
# systemctl restart vsftpd
将 vsftpd服务设置成开机自启;
# systemctl enable vsftpd
查看服务是否已经设置成开启自启;
# systemctl is-enabled vsftpd
解析:
查看上面匿名开放模式的 参数 即可明白;
B:测试结果,是否可以建立文件夹;
# ftp 192.168.10.10
匿名登录名:anonymous 密码为空;登录后默认当前路径为/var/ftp;
# cd pub
# mkdir test
测试结果失败的;
解析:
创建目录 test 失败原因有 2个;
1:pub目录没有其他用户的写权限,所有无法创建;
修改pub目录的所有者为 ftp,ftp为系统用户,已经存在系统中;
# chown -Rf ftp /var/ftp/pub
2:SELinux安全上下文也影响到创建文件;
# getsebool -a | grep "ftp"
# setsebool -P ftpd_full_access=on
2)本地用户模式
用户名单的概念:
默认存放路径:/etc/vsftpd/user_list;/ect/vsftp/ftpusers;
用户名存在于这两个文件中时,表示这些用户无法使用 ftp功能登录;
参数
例:
A:开启本地用户模式,编辑vsfptd配置文件;
# vi /etc/vsftpd/vsftpd.conf
解析:
anonymous_enable=NO 表示关闭匿名模式,开启本地用户模式;
B:重启 vsftpd服务,设置服务开机自启;
# systemctl restart vsftpd
# systemctl enable vsftpd
C:SELinux安全上下文需要设置,ftp所有都通过开启;
# getsebool -a | grep "ftp"
# setsebool -P ftpd_full_access=on
D:使用本地用户登录,默认的访问目录即为用户的家目录;
备注:
本地用户,必须设置用户密码,否则无法登录 FTP服务器;
3)虚拟用户模式
最安全的一种认证模式,但配置复杂;
参数:
例:
A:创建用于进行FTP认证的用户数据库文件vuser.list,奇数为账户,偶数为密码;使用db_load命令及哈希hash算法将明文密码转成数据文件,并降低数据库文件权限;
# vim /ect/vsftpd/vuser.list
# db_load -T -t hash -f vuser.list vuser.db
# file vuser.db
# chmod 600 vuser.db
# rm -f vuser.list
B:创建 vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户;让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限;
建立用于映射的本地用户virtual,家目录为/var/ftproot,默认shell禁止登录系统;
# useradd -d /var/ftproot -s /sbin/nologin virtual
设置家目录权限;
# chmod -Rf 755 /var/ftproot
C:建立用于支持虚拟用户的PAM文件;
PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式;
参数:
db=:使用db_load命令生成的账户密码数据文件的路径,不用写数据文件后缀
新建用于虚拟用户认证的PAM文件 vsftpd.vu;
# vim /etc/pam.d/vsftpd.vu
D:在vsftpd主配置文件中,修改 pam_service_name参数值为 vsftpd.vu,以及添加虚拟用户在主配置文件中的参数值;
# vim /etc/vsftpd/vsftpd.conf
解析:
local_enable=YES 表示开启本地用户功能;
guest_enable=YES 表示开启虚拟用户功能;
guest_username=virtual 设置虚拟用户的用户名virtual;
E:为虚拟账户设置不同的权限,通过vsftpd来实现;
创建一个目录,分别写入zhangsan和lisi命令的文件,zhangsan写入允许的相关权限(使用匿名用户的参数);
# mkdir /ect/vsftpd/vuser_dir/
# cd /etc/vsftpd/vuser_dir
# touch lisi
# vim zhangsan
# systemctl restart vsftpd
# systemctl enable vsftpd
再次修改 vsftpd主配置文件,添加 user_config_dir参数来定义两个虚拟账户不同权限的配置文件所存放的路径。
F:设置 selinux域允许策略;
# getsebool -a | grep ftp
# setsebool -P ftp_full_access=on
G:测试结果
3:TFTP简单文件传输协议
是一种基于 UDP协议在客户端和服务器之间进行简单文件传输的协议;
优点:TFTP不需要客户端权限认证,减少系统和网络消耗,传输不大的文件时,效率更高;
缺点:采用UDP协议,占用69端口,文件传输不可靠,没有安全性;
TFTP默认根目录:
/var/lib/tftpboot
命令参数:
例:
A:安装 tftp,xinetd等组件
# yum install -y tftp-server tftp
# yum install -y xinetd
B:TFTP服务是由 xinetd服务程序来管理,默认TFTP服务是禁用的,需手动开启;
# vim /etc/xinetd.d/tftp
C:重启 xinetd服务,并设置成开机自启;防火墙放行UDP的69端口;
# systemctl restart xinetd
# systemctl enable xinetd
# firewall-cmd --permanent --add-port=69/udp
# firewall-cmd --reload
D:测试结果
# echo "xxxxxx" > /var/lib/tftpboot/aaa.txt
# tftp 192.168.10.10
# get aaa.txt
# quit
# ls