Linux实验记录:使用vsftpd服务传输文件

前言:

本文是一篇关于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_listvim /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             = dgramprotocol                = udpwait                    = yesuser                    = rootserver                  = /usr/sbin/in.tftpdserver_args             = -s /var/lib/tftpbootdisable                 = noper_source              = 11cps                     = 100 2flags                   = 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448098.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis 自定义ResultHandler(结果处理器)正确使用姿势

阅读指引 一、使用场景二、前提条件三、源码对照四、使用示例目标实现方式 一、使用场景 对Mybatis查询的结果集进行统一批量处理,如进行类型转换、数据变更等等。 二、前提条件 必须是查询语句。mapper方法的返回值必须是void,这也就是不能直接从这个…

【Java】SpringBoot集成freemarker|这下总该学会了吧

目录 什么是Freemarker? 常用的java模板引擎还有哪些? 环境搭建&&快速入门 代码层级结构: pom.xml如下 配置文件application.yml 创建实体类 创建模板 创建controller 创建启动类 测试 freemarker基础 基础语法种类 集合指令(List和…

有趣的CSS - 输入框选中交互动效

页面效果 此效果主要使用 css 伪选择器配合 html5 required 属性来实现一个简单的输入框的交互效果。 此效果可适用于登录页入口、小表单提交等页面,增强用户实时交互体验。 核心代码部分,简要说明了写法思路;完整代码在最后,可直…

备战蓝桥杯---数据结构与STL应用(入门1)

话不多说,直接看题: 下面为分析:显然,我们要先合并最小的两堆(因为他们在后边也得被计算,换句话,我们独立的看,某一堆的体力值为他自己重量*从现在到最后的次数) 因此&a…

26元/月起!腾讯云一键自动搭建4核16G幻兽帕鲁服务器

腾讯云无需任何配置自动搭建幻兽帕鲁游戏联机服务器,游戏24小时在线,4核16G游戏联机服务器低至26元/月起,新手小白也能一键搭建属于自己的幻兽帕鲁游戏联机服务器! 第一步:购买游戏联机服务器 购买入口:htt…

Vue3 函数式弹窗优化

背景 前面文章介绍了如何使用 函数式弹窗,弹窗方式是挂载在了全局,使用了getCurrentInstance方法拿到了全局上下文,进而拿到挂载的dialog进行弹窗操作。getCurrentInstance现在已被官方Vue API隐藏,为内部使用函数,现…

Ruoyi-Cloud-Plus_Nacos配置服务漏洞CVE-2021-29441_官方解决方法以及_修改源码解决---SpringCloud工作笔记199

CVE-2021-29441 这个漏洞是Nacos的,通过使用postman,直接访问接口: 就可以直接添加nacos的用户 Nacos是Alibaba的一个动态服务发现、配置和服务管理平台。攻击者通过添加Nacos-Server的User-Agent头部将可绕过(nacos.core.auth.enabled=true)鉴权认证,从而进行API操作。 …

React18-模拟列表数据实现基础表格功能

文章目录 分页功能分页组件有两种接口参数分页类型用户列表参数类型 模拟列表数据分页触发方式实现目录 分页功能 分页组件有两种 table组件自带分页 <TableborderedrowKey"userId"rowSelection{{ type: checkbox }}pagination{{position: [bottomRight],pageSi…

c语言:贪吃蛇的实现

目录 贪吃蛇实现的技术前提&#xff1a; Win32 API介绍 控制台程序&#xff08;console&#xff09; 控制台屏幕上的坐标 GetStdHandle GetConsoleCursorInfo CONSOLE_CURSOR_INFO SetConsoleCursorInfo SetConsoleCursorPosition GetAsyncKeyState 宽字符的打印 …

【2024.2.1练习】岛屿个数(15分)

题目描述 题目思路 题目乍一看类似于“水坑个数问题”&#xff0c;是对陆地块进行DFS,上下左右4个方向分别对应了四种状态转移&#xff0c;每块陆地进行搜索后变成海洋&#xff0c;最终搜索次数就是岛屿个数。 但在子岛屿存在的情况下&#xff0c;需要先对海洋块进行DFS,由于…

Python开源项目周排行 2024年第3周

ython 趋势周报&#xff0c;按周浏览往期 GitHub,Gitee 等最热门的Python开源项目&#xff0c;入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后&#xff0c;都是当周相对热门的项目。 入选公式&#xff1d;70%GitHub Trending20%Gitee10%其他 关注微…

【靶场实战】Pikachu靶场敏感信息泄露关卡详解

Nx01 系统介绍 Pikachu是一个带有漏洞的Web应用系统&#xff0c;在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习&#xff0c;那么Pikachu可能正合你意。 Nx02 敏感信息泄露概述 由于后台人员的疏忽或者不当的设计&…