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

系统运维Day03_FTP与磁盘挂载

1. FTP相关内容

1.1 文件传输协议FTP

        FTP(File Transfer Protocol) 是一种用于在网络上进行文件传输的协议,允许用户通过客户端和服务器之间上传、下载文件。

1.2 FTP的两钟工作方式

  • 1. 主动模式(Active Mode)

    • 在主动模式下,客户端 发起控制连接到服务器,而服务器用来传输数据的端口是由 服务器 发起的连接到客户端。

    • 工作流程:

      • 1- 客户端与服务器之间建立 控制连接,通常是通过端口 21(即 FTP 的默认控制端口)

      • 2- 当客户端准备接收数据时,它会通过 随机端口(通常是 20 以外的端口)向服务器请求建立数据连接

      • 3- 服务器通过控制连接得知客户端的端口号后,从端口 20(服务器的 FTP 数据端口) 发起一个连接到客户端指定的端口,用于数据传输 

    • 优势:

      • 服务器主动向客户端发起数据连接,通常对大多数服务器来说,这种方式较容易实现。

    • 弊端:

      • 因为客户端通常位于防火墙或 NAT 后面,防火墙可能阻止来自服务器的外部连接,所以这种模式可能会受到网络环境的限制,尤其在客户端位于 NAT 后时,可能无法建立连接。

  • 2. 被动模式(Passive Mode)

    • 在被动模式下,客户端 仍然发起控制连接,但在传输数据时,客户端 会请求服务器开放一个随机的端口来进行数据传输,服务器只负责监听数据连接,客户端主动发起连接。

    • 工作流程:

      • 客户端与服务器之间建立 控制连接(通常是端口 21)。
        客户端请求服务器在某个端口(一个随机端口)上等待数据连接。
        服务器响应并告知客户端该数据端口号。
        客户端随后向该端口发起连接进行数据传输。

    • 优点:

      • 被动模式能更好地穿越防火墙和 NAT,因为所有连接都是由客户端发起的,服务器只是监听连接,不会主动连接客户端。

      • 需要服务器配置和开放更多的端口(通常是端口范围),可能会导致一些安全隐患。

区别说明:

特性

主动模式(Active Mode)

被动模式(Passive Mode)

控制连接

客户端连接服务器的端口 21

客户端连接服务器的端口 21

数据连接

服务器从端口 20 发起连接到客户端的随机端口

客户端连接服务器提供的随机端口

适用网络环境

客户端需要有公网 IP 或不在防火墙后

客户端位于 NAT 或防火墙后时较为适用

防火墙问题

可能无法穿越客户端防火墙或 NAT

由于客户端发起数据连接,较易穿越防火墙

总结:

  • 主动模式:服务器发起数据连接,适合客户端有公网 IP 的情况,但可能受到客户端防火墙或 NAT 的限制。
  • 被动模式:客户端发起数据连接,适用于客户端位于防火墙或 NAT 后时,能够绕过这些网络限制,安全性和兼容性更高。

1.3 FTP服务器搭建

准备二台服务器,一台用于客户端(node1),另一台用于服务端(master)

1.3.1 服务器配置

  • 1- 第一步:在master上安装vsftpd服务(FTP服务器)
apt install vsftpd
  • 2- 第二步:启动并配置 vsftpd 服务
systemctl start vsftpd
systemctl enable vsftpd
# 校验
systemctl status vsftpd
  • 3- 第三步: 配置防火墙
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload# 校验
firewall-cmd --list-all

注意: 如果直接将防火墙彻底关闭,此部分可以跳过

systemctl disable firewalld -- now

  • 4- 第四步: 基本访问配置

前置:创建一个用于共享的目录,已经在目录下创建几个文件

mkdir -p /anon
echo 'hello' >> /anon/a.txt
echo 'hi' >> /anon/b.txt

修改配置:

vim /etc/vsftpd.conf添加或修改以下内容:
anonymous_enable=YES          # 允许匿名用户登录
anon_root=/anon               # 匿名用户登录后的根目录
anon_upload_enable=YES        # 允许匿名用户上传文件
anon_mkdir_write_enable=YES   # 允许匿名用户创建目录
anon_other_write_enable=YES   # 允许匿名用户删除、重命名文件
write_enable=YES              # 必须启用写入,否则以上设置无效
# 注意:修改配置文件, 记得重启下FTP服务
systemctl restart vsftpd# 校验:
systemctl status vsftpd

1.3.2 客户端配置

  • 1- 第一步: 在node1上安装FTP服务器
apt install -y lftp

说明:
        安装 lftp(命令行 FTP 客户端)或 FileZilla(图形化客户端)
        我们是无界面化的,故安装lftp即可

  • 2- 第二步:连接FTP服务器
lftp ftp://192.168.132.100

1.3.3 windows浏览器访问

  • 1- 打开windows文件资源管理器(window + e)
  • 2- 地址栏中输入:
ftp://192.168.132.100

上传文件:

在master上创建一个目录,并设置权限为777,允许所有人有对文件夹的全部权限

mkdir -p /anon/test01
chmod 777 -R /anon/test01/

1.4 禁止匿名用户访问

  • 第一步:在 master修改FTP的相关配置

vim /etc/vsftpd.conf

修改以下配置:
anonymous_enable=NO       # 禁用匿名用户访问
local_enable=YES                 # 允许本地用户登录
write_enable=YES                 # 允许写入操作(上传文件)

保存文件并退出,重启服务
systemctl restart vsftpd

  • 第二步: 创建一个普通用户用于后续访问FTP 【可选】
  • 由于开启了允许本地用户访问, 但是系统中仅有一个root超级用户, 故需要创建普通用户,便于客户端连接(注意:由于root用户权限过高,FTP无法直接使用root来让客户端访问)

useradd smartgouser

mkdir /home/smartgouser

sudo chown root:root /home/smartgouser
sudo chmod 755 /home/smartgouser
sudo passwd smartgouser

然后按提示输入两次密码,例如:
New password: 123
Retype new password: 123
passwd: password updated successfully

  • node1 客户端访问查看

格式:
lftp ftp://用户名[:密码]@ftp服务器主机地址

示例:
lftp ftp://smartgouser:123@192.168.132.100

        一旦登录成功后, 即可使用该账号来操作文件系统了, 此时可以理解为该用户直接访问了对应服务器系统, 只要这个用户对相关的文件或目录有权限, 即可进行直接操作(依赖与该用户在服务器的权限)

1.5 禁锢在指定的数据目录中

  • 1- 创建一个本地用户的数据目录 【master】

mkdir -p /data/kefu

说明: 该目录将会作为共享上下传目录

  • 2- 修改配置文件

vim /etc/vsftpd.conf

# 添加以下内容
local_root=/data/kefu   # 设置默认访问的路径地址 ,如果不指定, 默认访问的是该用户的家目录


# 修改以下内容: 前面的#去除即可
chroot_local_user=YES  # 限制所有本地用户(即服务器上的普通用户)只能访问他们的 home 目录

保持退出后,重启vsftpd服务
systemctl restart vsftpd

  • 3- 创建用户, 指定用户的家目录为禁锢的数据目录下

useradd -m ftpuser
passwd ftpuser

  • 4- 客户端测试访问

lftp ftp://ftpuser:123@192.168.132.100

通过上述的配置,可以将所有的用户禁锢在指定的目录下, 但是某些特殊的用户需要具备访问其他目录的权限, 如何办呢?(选做)

步骤一: 修改配置文件
vim /etc/vsftpd.conf


步骤二: 修改以下配置 (打开对应行注释即可)

chroot_local_user=YES                        # 启用用户目录锁定
chroot_list_enable=YES                       # 允许部分用户例外(可访问其他目录)
chroot_list_file=/etc/vsftpd.chroot_list  # 指定例外用户列表文件路径
allow_writeable_chroot=YES               # 允许锁定目录可写(Ubuntu 必加)
 


步骤三: 编辑 /etc/vsftpd.chroot_list文件

sudo vim /etc/vsftpd.chroot_list
 

添加允许访问其他目录的用户名,例如:

smartgouser

itheima

添加后, :x 保存退出即可

步骤四: 重启vsftpd. 重启后测试使用

sudo systemctl restart vsftpd

1.6 用户名单列表使用

把上一实验中禁锢用户数据目录功能关闭后再做下面的实验

操作方式,将 禁锢操作中相关配置前面全部添加 #  (表示注释)

  • 观察现象: 当采用root直接访问ftp服务

会被拒绝访问, 权限不够,原因: FTP默认不允许root访问

在master中的/etc/vsftpd目录下,有二个文件:ftpusers和user_list,主要是用来控制哪些用户可以或不能访问 FTP 服务,管理用户访问权限,防止某些用户登录FTP服务器

  • ftpusers 文件:ftpusers 文件用于列出不允许访问 FTP 服务的用户。任何列在这个文件中的用户都将被拒绝登录到 FTP 服务器,即使这些用户的用户名和密码是正确的
  • /etc/vsftpd.user_list文件:user_list 文件的作用和 ftpusers 文件相似,但有一些区别。user_list 文件控制哪些用户可以访问 FTP 服务,具体取决于配置文件中 userlist_enable 和 userlist_deny 的设置
    • userlist_enable=YES 启用或禁用 vsftpd 服务的系统用户列表功能。
    • userlist_deny=YES 默认情况下,列在 user_list 文件中的用户会被拒绝访问。
    • userlist_deny=NO 列在 user_list 文件中的用户将被允许访问,除非在 ftpusers 中显式禁止。
  • # 如果没有/etc/vsftpd.user_list文件,请运行下面命令
    sudo cat > /etc/vsftpd.user_list << "EOF"
    # vsftpd userlist
    # If userlist_deny=YES, only allow users NOT on this list
    # If userlist_deny=NO, only allow users on this list
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody
    EOFsudo chmod 644 /etc/vsftpd.user_list
    sudo chown root:root /etc/vsftpd.user_list
    

应用场景: 通过这两个文件,可以为FTP服务器设置黑名单和白名单用户

需求: 将root从黑名单释放出来,允许root用户正常访问

  • 1- 开启白名单功能

vim /etc/vsftpd.conf

# 修改以下内容:
userlist_enable=YES  # 开启user_list权限设置功能

# 添加一下内容:
userlist_deny=NO   # 开启白名单,运行文件中的用户


保存后,重启一下FTP服务
systemctl restart vsftpd

  • 2- 在ftpusers 文件(黑名单)中去除root用户
  • 3- 访问FTP服务器

lftp ftp://root:123@192.168.132.100

1.7 常见错误

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

说明: 此错误表示的当前FTP文件系统的根目录的权限过大,存在写权限, 一般就会爆出如上错误, 因为FTP默认情况下,不允许文件系统根目录存在写权限, 以保证根目录的文件安全(根目录下可能会放置一些系统文件信息, 担心出现破坏)

550 Delete operation failed

当在ftp中看到550错误的时候, 一般就是当前这个用户没有权限操作这个文件或目录,如果想要操作, 请赋予相应权限

1.8 如何删除FTP服务

node1:

apt -y remove lftp
apt clean all

master:

apt -y remove vsftpd
apt clean allfirewall-cmd --permanent --remove-service ftp
firewall-cmd --reload
firewall-cmd --list-allrm -rf /anon
rm -rf /etc/vsftp*

1.9 综合案例

操作案例之前,请先将node1和master关于ftp的相关内容全部删除

1- 请将node1作为ftp的服务器, master为ftp的客户端,并完成服务端ftp和客户端ftp的安装操作


在node1执行:

apt -y install vsftpd
# 启动服务
systemctl start vsftpd
systemctl status vsftpd

在master执行:

apt -y install lftp

2- FTP服务器node1要求如下:
        2.1 不允许匿名用户访问
        2.2 将用户禁锢在 /export/public 目录下
        2.3 在FTP服务器端的/export/public目录下, 创建logs、src目录,并将目录的权限所有用户设置写入权限
        2.4 在客户端的家目录下, 创建 a.log   hello.java文件, 并将这两个文件通过ftp客户端上传到服务器刚刚创建的logs和src目录, a.log放置到logs目录, hello.java放置到src目录
        2.5 设置黑白名单:
                1. 在服务器端 创建 zhangsan lisi wangwu 三个用户, 并设置密码均为123456
                2. 将zhangsan放置到黑名单,lisi和wangwu用户放置到白名单, 验证zhangsan无法访问,lisi和wangwu可以正常访问

服务器端node1的操作:
node1执行:

# 创建禁锢的目录
mkdir -p /export/public# 完成需求2.3
cd /export/public
mkdir -p logs src
chmod a+w logs
chmod a+w src# 完成需求2.5 服务器添加用户
useradd zhangsan
useradd lisi
useradd wangwu
mkdir /home/lisi
passwd zhangsan
passwd lisi
passwd wangwu

/etc/vsftpd.conf中:

# 需求2.1 : 禁用匿名登录
anonymous_enable=NO
local_enable=YES
write_enable=YES# 需求 2.2 禁锢操作
local_root=/export/public
chroot_local_user=YES# 需求2.3 黑马名单设置
# 修改配置, 开启白名单
userlist_enable=YES
userlist_deny=NO

黑白名单文件设置:    
 

# 注意: 一定要使用 >> 追加的方式
echo 'wangwu' >> /etc/ftpusers
echo 'lisi' >> /etc/vsftpd.user_list
echo 'lisi' >> /etc/vsftpd.user_list# 完成后: 记得重启vsftpd服务器
systemctl restart vsftpd
systemctl status vsftpd# 最后,防火墙放行 ftp服务
firewall-cmd --add-service ftp --permanent
firewall-cmd --reload
firewall-cmd --list-all

客户端操作:
master执行:

cd ~
touch a.log hello.java# 通过ftp客户端上传文件到ftp服务器
lftp ftp://lisi:123@192.168.132.101
# 执行上传
put ~/a.log -o /logs/
put ~/hello.java -o /src/

注意:
        由于我们已经在服务端设置禁锢操作,将用户已经锁定到/export/public目录下, 所以当客户端登录成功后, 其实就已经进入/export/public中, 客户端会直接将此目录当做为根目录操作, 在客户端中 我们的 / 其实表示的就是/export/public

提示上传命令为:

put 本地路径 -o 远端的路径

注意:路径不需要带地址, 直接写对应的路径即可

例如:node1是服务器端  master是客户端 将master的家目录下的hello.java 上传到 logs目录
# 因为 /export/public 本身就是根目录
put ~/hello.java -o logs/

http://www.dtcms.com/a/585227.html

相关文章:

  • 嘉兴网站备案去哪里优化网站是什么意思
  • SQL笔试题(2)
  • MATLAB/Simulink三机九节点
  • JVM 内存结构与 GC 调优全景图
  • 4.3.5【2024统考真题】
  • 如何进行MSSQL提权?sp_oacreate、sp_oamethod和沙盒提权以及xp_regwrighte提权
  • AI大模型开发架构设计(23)——LangChain技术架构和关键技术深度剖析
  • JavaScript 中的 void 关键字详解
  • 智能演示时代:8款免费AI PPT生成工具全面评测
  • 实验室建设网站网站开发公司经营范围
  • 怎样做能直接上传微信的视频网站钢结构招聘网最新招聘信息
  • 什么是缓存
  • 电力设备多模态数据融合与自适应阈值在线状态评估
  • 顺序表vector--------练习题8题解
  • 百度C++实习生面试题深度解析
  • rnn lstm transformer mamba
  • 卷积神经网络(CNN)全面解析
  • 50_AI智能体运维部署之集成LangSmith实现全链路追踪:AI系统的可观测性实践
  • Java 9 + 模块化系统实战:从 Jar 地狱到模块解耦的架构升级​
  • 及时通讯桌面端应用基vue+GO
  • 三个常听到的消息/中间件MQTT RabbitMQ Kafka
  • QML学习笔记(五十四)QML与C++交互:数据转换——QVariantList与QVariantMap
  • Linux的基础IO流
  • RabbitMQ死信交换机与延迟队列:原理、实现与最佳实践
  • 网站建设人员叫什么科目wordpress站长地图
  • Kafka安装搭建
  • 深度血虚:Django水果检测识别系统 CNN卷积神经网络算法 python语言 计算机 大数据✅
  • 郑州h5网站建设信息流推广
  • Git-新建分支并推送远程仓
  • 团关系转接网站建设免费psd模板素材