前言:

本文是一篇关于Linux系统初学者的实验记录。

参考书籍:《Linux就该这么学》

实验环境:

VmwareWorkStation 17——虚拟机软件

RedHatEnterpriseLinux[RHEL]8——红帽操作系统

备注:

  为了解决在多样复杂的设备之间解决传输文件问题,文件传输协议(FTP)应运而生。

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21端口,其中端口20用于数据传输,端口21用于接受客户端发出的相关FTP命令与参数。

FTP服务普遍部署于内网中,具有容易搭建、方便管理的特点。

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。

FTP协议有两种工作模式:

1.主动模式:FTP服务器主动向客户端发起连接请求

2.被动模式:FTP服务器等待客户端发起连接请求(默认工作模式)

FTP、HTTP、Telnet等协议的数据都是使用明文进行传输的。

为了满足以密文方式传输文件的需求,发明了vsftpd服务程序。

vsftpd(very secure ftp daemon)非常安全的FTP守护进程:是一款运行在Linux操作系统上的FTP服务程序。具有很高安全性、传输速度,支持虚拟用户验证等其他FTP服务不具备的特定。

目录

前言:

备注:

正文:

 vsftp服务程序:

实验1:匿名访问模式

排错:

实验2:本地用户模式

实验3:虚拟用户模式

Step1:重新安装vsftpd服务。创建用关于进行FTP认证的用户数据库文件。

Step2:使用db_load命令将原始明文信息转换成数据库文件

Step3:创建vsftpd服务程序用于存储文件的根目录以及用于虚拟用户映射的系统本地用户。

 Step4:建立用于支持虚拟用户的PAM文件

 Step5:在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件名称修改为vsftpd.vu。

 Step6:为虚拟用户设置不同的权限。

 Step7:设置SELinux域允许策略,然后使用虚拟用户模式登录FTP服务器。​​​​​​​

 总结:

 实验4:TFTP(简单文件传输协议)


正文:

准备:

安装vsftpd服务程序。

dnf install vsftpd

iptables防火墙管理工具默认禁止了FTP协议的端口号,需要清空iptables防火墙的默认策略。

iptables -F 
iptables-save

再把FTP协议添加到firewalld服务的允许列表中:

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

vsftp服务程序的主配置文件:/etc/vsftpd/vsftpd.conf

现查看一下里面的有效参数:

mv /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

anonymous_enable=NO      是否允许用户匿名访问
local_enable=YES                是否允许本地用户登录FTP
write_enable=YES                
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO                 是否以独立运行的方式监听服务
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES       设置用户列表为“允许”还是“禁止”操作

 vsftp服务程序:

vsftp作为更加安全的文件传输协议服务程序,允许用户以3种认证模式登录FTP服务器。

匿名开放模式:

最不安全的一种认证模式 ,任何人都可以无须密码验证而直接登录到FTP服务器

本地用户模式:

通过Linux系统本地的账户密码进行认证的模式,相较于匿名开放模式更安全,配置更容易。这种情况下,一但账户信息被破解,服务器会陷入危险。

虚拟用户模式:

更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。

 准备:ftp是Linux系统中以命令行界面管理FTP传输服务的客户端工具。需手动下载。

dnf install ftp

实验1:匿名访问模式

  匿名开放模式是最不安全的一种认证模式,任何人都可可以无须密码验证而直接登录FTP服务器。

vsftpd服务程序默认关闭了匿名开放模式,实验时将服务配置为开放权限:

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
systemctl restart vsftpd
systemctl enable vsftpd

现在可以在客户端远程来凝结FTP服务器了。

在vsftpd服务程序的匿名开放认证模式下,账户统一为anonymous,密码为空。

在连接FTP服务器后,默认访问的是/var/ftp目录

拒绝创建文件夹——没有写权限:

排错:

 1.查看修改目录权限:

ls -ld /var/ftp/pub

只有root管理员才有写入权限,下面修改目录所有者身份为系统账户ftp。

chown -R ftp /var/ftp/pub

此时报错信息由:“Permission denied"变成”Create directory operation failed" 

2.考虑SELinux服务

查看于FTP相关的SELinux域策略:

getsebool -a | grep ftp

setsebool -P ftpd_full_access=on

 现在就具有了写权限:

实验2:本地用户模式

本地模式相对更安全,配置起来较简单。

umask参数:

一般称为“权限掩码”或“权限补码”,能够直接影响到新建文件的权限值。

默认权限-umask=实际权限

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
systemctl restart vsftpd
systemctl enable vsftpd

 此时不允许本地用户root登录:

 这是因为vsftpd服务程序所在的目录中默认存放着两个名为“用户名单”的文件

(ftpusers和user_list)

 vim /etc/vsftpd/user_list
 vim /etc/vsftpd/ftpusers

实验3:虚拟用户模式

  虚拟用户模式是最安全的一种模式,专门创建出一个账号来登录FTP传输服务的。

而且这个账号不能用于以SSH方式登录服务器。

Step1:重新安装vsftpd服务。创建用关于进行FTP认证的用户数据库文件。

分别创建两个用户zhangsan和lisi,密码均为:redhat

重头开始:

安装ftp守护进程vsftpd,和ftp命令行界面管理工具ftp。

dnf install vsftpd
dnf install ftp
iptables -F 
iptables-save
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf


创建的文件中奇数行是用户,偶数行为密码。 

cd /etc/vsftpd
vim vuser.list

 Step2:使用db_load命令将原始明文信息转换成数据库文件

db_load -T -t hash -f vuser.list vuser.db
chmod 600 vuser.db
rm -f vuser.list

 Step3:创建vsftpd服务程序用于存储文件的根目录以及用于虚拟用户映射的系统本地用户。

vsftpd服务用于存储文件的根目录是指,当虚拟用户登陆后所访问的默认位置。

虚拟用户创建的文件的属性归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限。

为了方便管理FTP服务器上的数据,把这个系统本地用户的家目录设置为/var目录。

并且为了安全起见,将这个系统本地用户设置不允许登录FTP服务器。

useradd -d /var/ftproot -s /sbin/nologin virtual
ls -ld /var/ftproot
chmod -Rf 755 /var/ftproot

 Step4:建立用于支持虚拟用户的PAM文件

PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务于认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。

PAM是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改。

新建一个用于虚拟用户认证的PAM文件vsftp.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件路径,但不用写数据库文件的后缀:

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

 Step5:在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件名称修改为vsftpd.vu。

PAM作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要PAM认证时,需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES

 Step6:为虚拟用户设置不同的权限。

  虽然账户zhangsan和lisi都是用于vsftpd服务程序认证的虚拟账户,但要实现对两人的区别对待:

需要新建一个目录,里面分别创建两个以zhangsan和lisi命名的文件,在其中名为zhangsan的文件中写入允许的相关权限(使用匿名用户的参数) 

mkdir /etc/vsftpd/vusers_dir/
cd /etc/vsftpd/vusers_dir/
touch lisi
vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

再次修改主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。

重启vsftpd服务程序并添加该服务到开机启动项。

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
user_config_dir=/etc/vsftpd/vusers_dir
                        
systemctl restart vsftpd
systemctl enable vsftpd

 Step7:设置SELinux域允许策略,然后使用虚拟用户模式登录FTP服务器。

setsebool -P ftpd_full_access=on

 实验成功:

lisi只能登录,没有其他权限

zhangsan不仅可以登录,还可以创建、该名和删除文件

 总结:

  实验过程难免报错,检查配置的输入,按照排错顺序逐步解决即可。

使用不同方式登录文件传输服务器后,默认所在的位置:

登录方式默认目录
匿名公开/var/ftp
本地用户

该用户的家目录

虚拟用户对应映射用户的家目录

 

 实验4:TFTP(简单文件传输协议)

简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。

提供不复杂、开销不大的文件传输服务,可将其当作FTP协议的简化版本。

TFTP的命令功能不如FTP服务强大,甚至不能遍历目录,在安全性上也弱与FTP服务。

由于TFTP在传输文件时采用的时UDP协议,占用端口号69

因此文件传输过程也不像FTP可靠。

因为TFTP不需要客户端的权限认证,在传输琐碎不大的文件时,效率更高。

现在,体验:

tftp-server是服务程序,tftp是用于连接测试的客户端工具,xinetd是管理服务

dnf install tftp-server tftp xinetd

在Linux系统中,TFTP服务是使用xinutd服务程序来管理的。

xinetd服务可以用来管理多种轻量级的网络服务,且具有强大日志功能。

想开启哪个服务。就编辑对应的xinetd配置文件的开关参数。

vim /etc/xinetd.d/tftp

 根据示例文件:/usr/share/doc/xinetd//sample.conf创建tftp对应的配置文件:

service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}   
systemctl restart tftp
systemctl enable tftp
systemctl restart xinetd
systemctl enable xinetd
firewall-cmd --zone=public --permanent --add-port=69/udp
firewall-cmd --reload

实验成功:

TFTP的根目录为/var/lib/tftpboot

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐