当前位置: 首页 > news >正文

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

相关文章:

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

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: 为了解决在多样复杂的设备之间解决传…...

实习|基于SSM的实习管理系统设计与实现(源码+数据库+文档)

实习管理系统目录 目录 基于SSM的实习管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能介绍 (1)管理员登录 (2)实训方向管理 (3)公告信息管理 (4&#xff0…...

商品介绍和规则参数图片映射和IP设置

虚拟路径映射配置: registry.addResourceHandler("/image/productIntroImgs/**").addResourceLocations("file:D:\\java1234-mall-v3\\productIntroImgs\\");registry.addResourceHandler("/image/productParaImgs/**").addResourceL…...

【React】前端React 代码中预览展示excel文件

封装了ExcelView来展示excel文件,支持显示loading 1.安装依赖 npm i js-preview/excel源码 import React, { useEffect, useRef, useState } from react import jsPreviewExcel, { JsExcelPreview } from js-preview/excel import js-preview/excel/lib/index.cs…...

QButtonGroup使用介绍

一、简介 QButtonGroup是PyQt5库中的一个组件,主要用于组织和管理一组按钮。通过QButtonGroup,可以方便地实现单选框或多选框功能,统一处理按钮的信号,并且可以为按钮分组设定ID以进行识别。 1、原始工程 from PyQt5.Qt import …...

最近nvm安装报错的原因找到了——npm原淘宝镜像正式到期!

前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 目录 背景 错误原因 问题排查 淘宝镜像 证书到期 问题解决 结语 背景 我们…...

docker面试问题二

如何防止Docker容器中的漏洞和攻击? 防止Docker容器中的漏洞和攻击是一个多层次、多方面的任务,涉及从镜像构建、容器运行到网络安全的整个生命周期。以下是一些关键措施: 使用官方和受信任的镜像: 总是从官方源或受信任的第三方…...

嵌入式中C 语言中的三块技术难点

C 语言在嵌入式学习中是必备的知识,甚至大部分操作系统都要围绕 C 语言进行,而其中有三块技术难点,几乎是公认级别的“难啃的硬骨头”。 今天就来带你将这三块硬骨头细细拆解开来,一定让你看明白了。 0x01 指针 指针是公认最难理…...

基于SSM的个性化旅游攻略定制系统设计与实现(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的个性化旅游攻略定制系统设计与实现(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xf…...

[React源码解析] Fiber (二)

在React15及以前, Reconciler采用递归的方式创建虚拟Dom, 但是递归过程不可以中断, 如果组件的层级比较深的话, 递归会占用线程很多时间, 那么会造成卡顿。 为了解决这个问题, React16将递归的无法中断的更新重构为异步的可中断更新, Fiber架构诞生。 文章目录 1.Fiber的结构2…...

Nginx 多项目部署,vue刷新404 解决方案

网上找的资料大多都解决不了,废话不多说直接告诉你解决方法。 环境是 TP6 VUE前端官网 VUE 后台管理 部署 两个项目 刷新 404 解决方案 Nginx 配置 直接贴图 如果解决了,给我顶起来,让更多人 快速的解决。...

[C++]类和对象(中)

一:类的六个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中并不是什么都没有,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为…...

Kubernetes operator(五)api 和 apimachinery 篇

云原生学习路线导航页(持续更新中) 本文是 Kubernetes operator学习 系列第五篇,主要对 k8s.io/api 和 k8s.io/apimachinery 两个项目 进行学习基于 kubernetes v1.24.0 代码分析Kubernetes operator学习系列 快捷链接 Kubernetes operator&a…...

接口自动化测试中解决接口间数据依赖

在实际的测试工作中,在做接口自动化测试时往往会遇到接口间数据依赖问题,即API_03的请求参数来源于API_02的响应数据,API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时,需要预先请求API_02接口&a…...

七、测试计划(软件工程)

1.引言 1.1编写目的 1.2项目背景 1.3定义 1.4参考资料 2.任务概述 2.1目标 2.2运行环境 2.3需求概述 2.4条件与限制 3.计划 3.1测试方案 3.2测试项目 3.3测试准备 3.4测试机构及人员 4.测试项目说明…...

ElementUI Form:Checkbox 多选框

ElementUI安装与使用指南 Checkbox 多选框 点击下载learnelementuispringboot项目源码 效果图 el-checkbox.vue &#xff08;Checkbox 多选框&#xff09;页面效果图 项目里el-checkbox.vue代码 <script> const cityOptions [上海, 北京, 广州, 深圳] export def…...

如何统一监听Vue组件报错

window.onerror 全局监听所有JS错误&#xff0c;包括异步错误但是它是JS级别的&#xff0c;识别不了Vue组件信息&#xff0c;Vue内部的错误还是用Vue来监听捕捉一些Vue监听不到的错误 errorCaptured生命周期 监听所有下级组件的错误返回false会阻止向上传播到window.onerror …...

python爬虫4

#1.练习 # &#xff08;1&#xff09; 获取网页的源码 # &#xff08;2&#xff09; 解析 解析的服务器响应的文件 etree.HTML # (3) 打印 import urllib.request urlhttps://www.baidu.com/ headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit…...

【算法】约数之和(数论)

题目 给定 n 个正整数 ai&#xff0c;请你输出这些数的乘积的约数之和&#xff0c;答案对 1097 取模。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数 ai。 输出格式 输出一个整数&#xff0c;表示所给正整数的乘积的约数之和&#xff0c;答案需…...

走进CSS过渡效果的奇妙世界:详解CSS Transition

你是否曾在网页上看到一些酷炫的元素在状态变化时平滑而流畅地过渡&#xff1f;这就是CSS过渡效果的魔力所在&#xff01;在这篇博客中&#xff0c;我们将深入探讨CSS Transition&#xff0c;揭示其神奇的原理和如何在你的网页中运用这项技术。 什么是CSS Transition&#xff…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...