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.rhkb.cn/news/250940.html

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

相关文章

Android studio打包apk比较大

1.遇到的问题 在集成linphone打包时发现有118m,为什么如此之大额。用studio打开后发现都是不同的cpu架构。 2.解决办法 增加ndk配置,不需要配置那么多的cpu结构,根据自己需要调整。 defaultConfig { applicationId "com.matt.linp…

关于Ubuntu下docker-mysql:ERROR 2002报错

报错场景: mysql容器创建好后登录mysql时即使密码正确也是报出下方提示: 原因是在创建mysql容器在创建时本地目录缺失, 先去自建一个目录,例如: /opt/my_sql 正确完整目录如下: docker run --namemys…

【微服务】skywalking自定义链路追踪与日志采集

目录 一、前言 二、自定义链路追踪简介 2.1 自定义链路追踪应用场景 2.2 链路追踪几个关键概念 三、skywalking 自定义链路追踪实现 3.1 环境准备 3.2 集成过程 3.2.1 导入核心依赖 3.2.2 几个常用注解 3.2.3 方法集成 3.2.4 上报追踪信息 四、skywalking 自定义日志…

springboot153相亲网站

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

lava学习-多态-final-抽象类

一.多态 1.什么是多态? 现象:对象多态:比如说一个人 类,他可以是一个老师,也可以是一个同学 行为多态:多个对象同一类行为的不同表现形式,比如两个人,一个人跑得快,另一个…

Spring 事务原理总结三

今天这篇文章,我想梳理一下Spring事务用到的几个核心组件。这些核心组件是我们理解Spring事务原理的基础。通过它们我们可以体会学习一下Spring设计者设计Spring事务时的基本思路。这些组件是:TransactionInfo、TransactionStatus、TransactionManager、…

极速上手:使用Jmeter轻松实现N种参数化

参数化的方式: 一、使用用户自定义变量 一种方式:直接在测试计划中添加用户自定义变量 另外一种方式:配置元件——用户自定义变量 示例:用户自定义变量,登录手机号码 在接口请求的时候,进行引用 请求之后&…

利用OpenCV实现物流与生产线自动化的革命性突破

背景介绍: 在当今高度自动化的时代,物流和生产线上的每一个环节都关乎企业的核心竞争力。传统的生产方式往往依赖于人工检测和操作,这不仅效率低下,而且容易出错。为了解决这一问题,越来越多的企业开始寻求利用计算机视…

备战蓝桥杯---搜索(应用基础1)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们直接用深搜&#xff0c;我们可以先把空位用结构体存&#xff0c;然后打表存小方块&#xff0c;再用数组存行列。 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int a[12][12];…

MySQL进阶45讲【11】怎么更好地给字符串字段加索引?

1 前言 现在&#xff0c;几乎所有的系统都支持邮箱登录&#xff0c;如何在邮箱这样的字段上建立合理的索引&#xff0c;是我们今天要讨论的问题。 假设&#xff0c;现在维护一个支持邮箱登录的系统&#xff0c;用户表是这么定义的&#xff1a; mysql> create table SUser…

学成在线: 新增/修改课程计划

新增/修改课程计划(同接口) 界面原型 第一步: 在课程计划界面,点击添加章新增第一级课程计划,点击添加小节可以向某个第一级课程计划下添加小节 新增章/节成功后会自动发起请求刷新课程计划列表并且把新增的课程计划信息添加到数据库当中,新增的课程计划自动排序到最后 第二…

数据结构—动态查找

动态查找介绍 1. 动态查找的引入&#xff1a;当查找表以线性表的形式组织时&#xff0c;若对查找表进行插入、删除或排序操作&#xff0c;就必须移动大量的记录&#xff0c;当记录数很多时&#xff0c;这种移动的代价很大。 2. 动态查找表的设计思想&#xff1a;表结构本身是…

华为机考入门python3--(5)牛客5-进制转换

分类&#xff1a;数字 知识点&#xff1a; 十六进制转int num int(hex_num, 16) int转十六进制 hex_num hex(num) 题目来自【牛客】 hex_num input().strip() dec_num int(hex_num, 16) print(dec_num) by 软件工程小施同学

uniapp开发一个交流社区小程序

uniapp开发一个交流社区小程序 假期的时候简单学了一下uniapp&#xff0c;想开发一款类似百度贴吧的交流社区来练练手。本篇文章主要记录开发过程&#xff0c;文末附上项目地址。 主要需要开发以下几个页面。 信息页面热榜页面用户主页用户信息页 信息页面 该页面的功能主要…

获取真实 IP 地址(一):判断是否使用 CDN(附链接)

一、介绍 CDN&#xff0c;全称为内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;是一种网络架构&#xff0c;旨在提高用户对于网络上内容的访问速度和性能。CDN通过在全球各地部署分布式服务器节点来存储和分发静态和动态内容&#xff0c;从而减少…

printf死翘翘

本来想把我的单片机玩一下&#xff0c;寄给在大学搞研究的一个朋友&#xff0c;但竟然挂在printf里面&#xff0c;大概知道是什么位置出问题&#xff0c;但是还想不清楚什么原因。 我先是在stc51单片机里面搞了串口&#xff0c;然后我想用串口重定向到printf做调试&#xff0c;…

【考研408】计算机网络笔记

文章目录 计算机网络体系结构计算机网络概述计算机网络的组成计算机网络的功能计算机网络的分类计算机网络的性能指标课后习题 计算机网络体系结构与参考模型计算机网络协议、接口、服务的概念ISO/OSI参考模型和TCP/IP模型课后习题 物理层通信基础基本概念奈奎斯特定理与香农定…

店铺商品管理api接口抓取店铺所有商品接口店铺分析api接口调用演示案例可支持高并发

在当前快速发展的电商行业中&#xff0c;商家需要有效地管理和展示自家店铺的商品。为此&#xff0c;电商平台提供了一种强大的工具——店铺所有商品API接口。这个接口允许商家或开发者通过编程的方式轻松地获取店铺里所有商品的信息&#xff0c;比如商品的名字、价格和库存情况…

记一次 Android CPU高使用率排查

文章目录 背景排查高占用的进程adb shelltoptop -b -H -n 1 | grep 29337 (打印各线程 cpu使用详情)kill -3 29337 (生成trace文件)adb pull /data/anr /Users/gerry.liang/Desktop定位问题 补充说明: 背景 测试同学反馈我们的App CPU使用率 90% 居高不下,经过一番艰难的排查后…

自学网安-IIS服务器

部署环境&#xff1a;win2003 配置环境&#xff1a;winxp ip&#xff1a;10.1.1.2 win2003 ip&#xff1a;10.1.1.1 开始安装 双击“应用程序服务器” 双击“Internet 信息服务&#xff08;IIS&#xff09;” 勾选万维网服务&#xff0c;确定然后下一步 查看端口号;netstat …