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

系统运维Day04_共享文件和目录服务

1. NFS共享文件和目录

1.1 NFS基本介绍

        CentOS Stream 9中的NFS(网络文件系统)是一种允许不同计算机通过网络共享文件和目录的协议,使得远程主机能够像本地磁盘一样访问和操作文件。

        它基于客户端-服务器架构,NFS服务器将本地文件系统共享给客户端,客户端可以通过网络挂载这些共享目录,像访问本地文件一样进行操作。

        NFS主要应用于Linux/Unix系统之间的文件共享,虽然也支持跨操作系统,但其兼容性一般较差。

1.2 NFS相关配置

        需求:在 node2服务器中的根目录下,有一个/export/software目录,该目录下存储了大量的软件包,由于各个服务器都需要解压使用,为了节省空间,需要将此目录共享出来,提供给各个服务器进行使用,同时也方便各个服务器放置共享的安装包。

        服务器规划:

                node2 作为 NFS服务端

                node1 作为客户端,获取共享目录信息

1.2.1 安装NFS服务器

# 客户端安装:
dnf install nfs-utils -y# 服务端安装:
dnf install nfs-utils -y

注意说明:

# 执行开放端口:
firewall-cmd --add-service=nfs --permanent  # 核心, 有了这个, NFS即可使用共享操作
firewall-cmd --reload

1.2.2 在node2创建共享目录

# 第一步:创建需要共享的目录
mkdir -p /export/software# 第二步:NFS中设置指定需要共享的目录
vim /etc/exports# 添加以下内容:
/export/software   *(rw,sync,no_root_squash)

参数说明:
/export/software : 这是要共享的目录路径,意味着 NFS 服务器将 /export/software 这个目录导出,允许客户端访问

*  : 表示所有客户端都可以访问这个共享目录。它相当于一个通配符,代表任何 IP 地址或主机名。通常,* 用于允许整个网络中的所有主机访问此共享。也可以指定特定的 IP 地址或子网来限制访问权限,比如 192.168.1.0/24
    192.168.0.0/24:代表共享给某个网段
    192.168.0.0/24 192.168.1.0/24 :代表共享给不同网段,表示给192.168.0网段和192.168.1网段共享
    192.168.0.254:共享给某个IP
    *.itcast.cn:代表共享给某个域下的所有主机

rw  : 表示客户端可以对共享目录进行读写操作,若没有指定 rw,默认是只读权限 (ro)
sync :  表示 NFS 服务器会同步写入数据,即客户端写入的数据必须被立即写入到磁盘,才能认为是完成,如果选择async异步,先缓存在内存再同步磁盘

no_root_squash  :
    在 NFS 默认情况下,客户端的 root 用户(即 UID 0)会被“映射”到一个普通用户,这叫做 root squashing,目的是增强安全性,防止远程 root 用户拥有过高的权限。
    使用 no_root_squash 选项时,NFS 服务器将不对客户端的 root 用户进行 UID 映射,意味着客户端的 root 用户可以直接访问共享目录中的所有文件,拥有与 NFS 服务器本地 root 用户相同的权限。

1.2.3 服务启动并设置开机自启

systemctl enable nfs-server
systemctl start nfs-server
systemctl status nfs-server

1.2.4 验证是否成功共享

# 服务端执行: 查看服务端NFS共享信息
(早期版本兼容)
showmount -e
exportfs

1.2.5 挂载使用

# node1执行: 创建挂载目录
mkdir -p /export/software 
#  (一定是一个空目录, 以免挂载后,将不显示原有磁盘的内容)# 执行挂载操作:
mount -t nfs 192.168.132.202:/export/software /export/software# 执行后,可以通过df -h 的方式查看是否挂载成功

        测试: 可以尝试在服务端添加内容,才客户端是否可以查看到, 或在客户端添加内容, 在服务器中是否可以查看的到

  • 在服务器添加一个测试文件
# node2执行:
echo 'DNS Hello' >> /export/software/a.txt# node1查看:
ll /export/software

  • 在客户端添加一个测试文件
# node1执行:
echo 'DNS Hello2' >> /export/software/b.txt# node2查看:
ll /export/software

1.3 NFS工作原理【了解】

在NFS早期版本中, 负责数据传输工作,主要采用rpcbind工具, 其底层采用的就是RPC远程过程调用协议

RPC(Remote Procedure Call Protocol): 远程过程调用协议, 它是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议

当安装NFS的时候, 由于该服务依赖了很多其他的服务,主要包括:

rpcbind(RPC 服务绑定) TCP/UDP 111

nfs-server(NFS 服务)   TCP 2049(NFS 主要端口)

mountd(NFS 挂载守护进程) 动态分配,通常是 20048/tcp 和 20048/udp

statd(NFS 锁定守护进程)动态分配,通常是  TCP/UDP 32765-32766

问题一: RPC与NFS如何通讯呢?

答:客户端要与服务端进行数据传输,必须知道服务端 NFS 的具体端口号。然而,在 NFS 服务的早期版本(如 NFSv3),NFS 服务的一些组件(如 mountd, nlockmgr 等)使用动态分配的端口,导致客户端无法直接确定端口号。为了协调这些动态端口,RPC 框架通过 rpcbind 服务(监听在固定端口 111)实现以下功能:

动态端口管理:
RPC 统一管理服务端各 NFS 服务组件(mountd、nfsd 等)的动态端口,并将这些端口信息记录在 rpcbind 中。
当客户端发起请求时,客户端首先与 rpcbind 通信,查询目标 NFS 服务对应的实际端口号。

客户端与服务端的通信流程:
客户端向服务端的 rpcbind 服务(监听端口 111)发送查询请求,指定目标服务(如 mountd)。
rpcbind 返回目标服务的实际端口号。
客户端随后通过查询到的端口与 NFS 的具体服务进行通信,完成挂载、文件读写等操作。

固定端口的引入(在 NFSv4 中):
NFSv4 对架构进行了简化,将所有功能整合在一个服务中,并固定使用 TCP 2049 端口。
客户端无需再依赖 rpcbind 动态查询端口,直接与服务端通信。

问题二:RPC是如何指定NFS服务的端口的呢?

1. 首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口
2. RPC记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求
3. 客户端发送请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端
4. 客户端获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了


补充说明
在 NFSv4 中,整个机制变得更加简单:

所有 NFS 功能整合到一个服务上,并使用固定的 TCP 2049 端口。
不再需要 rpcbind 管理动态端口,客户端可以直接与服务端通信,无需额外的端口查询步骤。

2. SAMBA共享文件和目录

需求:

        构建一个SAMBA服务,共享node2服务器中的 /sambda/share 目录,分别在Linux和Windows访问该共享目录

2.1 SAMBA基本介绍

        Samba 是一个开源的软件套件,允许 Linux 或 Unix 系统与 Windows 系统进行文件和打印共享。它实现了 SMB(Server Message Block)协议和 CIFS(Common Internet File System),这两者是 Windows 操作系统用于文件共享和打印服务的主要协议。

        Samba 使 Linux/Unix 系统和 Windows 系统之间的文件共享和打印服务变得简单,广泛应用于家庭、企业和跨平台环境中。

2.2 服务端安装SAMBA服务

# node2执行: 
dnf -y install samba

说明: SAMBA通常会有二个主要的服务,分别用于不同的目的

Samba SMB/CIFS 服务 (smb) : 是Samba提供的主要服务,用于实现 SMB (Server Message Block) 和 CIFS (Common Internet File System) 协议的文件共享和打印服务

Samba NetBIOS 名称解析服务 (nmb) : 是Samba中另一个重要的服务,用于提供NetBIOS名称解析服务,它使得Samba服务器可以通过NetBIOS名称(而非IP地址)来识别和访问,即将计算机名(例如 server)转换为IP地址,便于其他计算机通过名称访问,同时提供Samba服务器在局域网中显示的能力,使其在网络浏览器中可见。

2.2.1 创建共享目录

mkdir -p /sambda/share

2.2.2 修改配置文件

配置文件所在位置:/etc/samba/smb.conf

增加共享配置文件信息:

vim /etc/samba/smb.conf# 添加以下内容
[smbshare]comment = samba sharepath = /sambda/shareread only = No

配置文件内容说明:

[global]  
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes

[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/drivers
        write list = @printadmin root
        force group = @printadmin
        create mask = 0664
        directory mask = 0775

说明:

[global]
[global]部分包含了Samba服务器的全局配置,影响到整个Samba服务的行为。

1. workgroup = SAMBA  
   设置Samba服务器所属的工作组名称。这里设置为"SAMBA",可以根据需要修改为其它工作组名。它与Windows工作组相对应。

2. security = user  
   设置Samba服务器的安全模式。`user`模式表示用户需要提供有效的用户名和密码才能访问共享资源。常见的安全模式还有`share`和`domain`。

3. passdb backend = tdbsam  
   指定密码数据库后端,`tdbsam`是默认的后端,用于存储用户的密码信息。

4. printing = cups  
   配置Samba与CUPS(Common UNIX Printing System)的集成,表示使用CUPS来管理打印服务。

5. printcap name = cups  
   设置Samba使用的打印配置文件的名称,这里指定为CUPS。

6. load printers = yes  
   启用打印机共享。设置为`yes`时,Samba会自动检测系统中安装的打印机并共享它们。

7. cups options = raw  
   指定CUPS打印机的选项。`raw`表示直接将打印数据发送到打印机,而不进行任何格式转换。



[homes]
[homes]部分配置了用户的家目录共享。

1. comment = Home Directories  
   提供共享的描述信息。这里标明该共享是用户的家目录。

2. valid users = %S, %D%w%S  
   限制访问该共享的用户。`%S`是当前用户的用户名,`%D`是域名,`%w`是工作组。该配置允许用户仅访问他们自己的家目录。

3. browseable = No
   设置为`No`表示此共享不出现在网络浏览器中,不允许被列出。

4. read only = No  
   设置为`No`表示该共享可读写。

5. inherit acls = Yes  
   启用ACL(访问控制列表)继承,这意味着共享目录将继承父目录的ACL设置。



[printers]
[printers]部分配置了打印机共享。

1. comment = All Printers  
   提供共享的描述信息。这里标明该共享包含所有的打印机。

2. path = /var/tmp  
   指定打印文件的存储路径。`/var/tmp`是一个常见的临时目录,用于存储打印作业的文件。

3. printable = Yes  
   表示该共享是一个打印共享(即它代表一个打印机)。

4. create mask = 0600
   设置新创建文件的权限掩码,这里设置为0600,意味着新文件只能由文件所有者读写。

5. browseable = No  
   设置为`No`表示此共享不会在网络浏览器中列出。



[print$]
[print$]部分配置了打印机驱动程序共享。

1. comment = Printer Drivers  
   提供共享的描述信息。这里标明该共享用于存储打印机驱动程序。

2. path = /var/lib/samba/drivers  
   指定存储打印机驱动程序的路径。`/var/lib/samba/drivers`是Samba存放打印机驱动程序的默认目录。

3. write list = @printadmin root  
   允许`@printadmin`组和`root`用户具有写权限,从而管理和上传打印机驱动程序。

4. force group = @printadmin  
   强制设置共享中文件的所属组为`@printadmin`组。

5. create mask = 0664  
   设置新创建文件的权限掩码,允许文件的所有者和所属组具有读写权限,而其他用户只有读权限。

6. directory mask = 0775  
   设置目录的权限掩码,允许目录的所有者和所属组具有读、写、执行权限,其他用户只有读、执行权限。

2.2.3 配置用户信息

创建一个本地用户, 添加到SMB服务中, 便于后续基于这个用户来访问

# 创建本地用户,并设置密码
useradd user01
echo 123 | passwd --stdin user01# 基于本地用户创建smb用户
smbpasswd -a user01# 验证用户是否添加成功
pdbedit -L

2.2.4 启动samba服务

systemctl enable nmb
systemctl enable smbsystemctl start nmb
systemctl start smb验证是否启动:
systemctl status nmb
systemctl status smb

2.2.5 开启防火墙

firewall-cmd --add-service samba --permanent
firewall-cmd --reload
firewall-cmd --list-all

2.2.6 访问操作

2.2.6.1 在Linnux主机访问

node1执行:

# 如果是第一次使用smb客户端,需要先安装:
# 查看是否存在smb客户端
rpm -qa | grep samba

没有安装执行下面命令:
 

dnf -y install samba-client

查看sambda服务共享资源:

smbclient -L 192.168.132.202 -U user01

访问共享目录:

smbclient //192.168.132.202/smbshare -U user01# 进入共享目录, 输入 ?  可以查看支持的命令

注意一个前提:操作用户对该目录一定要有权限

建议: 可以直接将共享目录的所属用户更改为SAMBA的登录用户即可

2.2.6.2 在windows主机访问

用户名:user01
密码:123

2.2.6.3 在windows中基于添加网络位置【挂载】

添加成功后, 即可访问该位置, 后续的操作就类似于访问一个本地的文件系统操作

注意一个前提:操作用户对该目录一定要有权限

3. 清空操作

node1执行:

dnf -y remove nfs-utils
dnf -y remove samba-client
dnf clean all
rm -rf nfs.conf exports* /export/software 

node2执行:

dnf -y remove nfs-utils
dnf -y remove samba
dnf clean all
rm -rf nfs.conf /etc/samba exports* /export/software /sambda/share

【综合】跨平台文件共享与自动化备份管理

公司多个服务器需要进行文件共享、日志管理和定期备份。具体需求如下:

  • 文件共享: 服务器间需要共享安装包、配置文件,避免重复存储和传输。
  • 共享目录:
  • 安装包: /export/software
  • 配置文件: /export/properties
  • 跨平台共享: Linux 服务器与 Windows 客户端需要共享特定目录。
  • 特定共享目录: /export/software
  • 日志管理: 所有服务器的日志文件需集中到一个目录进行查看和管理。
  • 日志目录: /var/log
  • 备份与同步: 需要确保文件数据和日志定期同步到备份服务器。
  • 定时同步: 每日凌晨2点同步各个服务器的日志目录/var/log
  • 实时同步: 实时同步/export/properties
  • 目的地路径: 实时同步路径地址/all_server_data_log/data 、日志同步路径地址 /all_server_data_log/log/node1、 日志同步路径地址/all_server_data_log/log/node2

系统架构

  • node1 和 node2 为 Linux 服务器,分别用作客户端和 共享服务器。
  • node3 作为备份服务器,负责所有文件和日志的备份。
  • node1、node2、node3三个服务器SSH免密
  • Windows 10/11 客户端,通过 Samba 访问 Linux 共享目录,请在windwos中添加远程网络位置【可选】。
http://www.dtcms.com/a/589841.html

相关文章:

  • 前端本地存储进阶:IndexedDB 封装与离线应用开发
  • 长岛网站建设wow做宏的网站
  • 两队列(栈)实现一个栈(队列)
  • 网站过期了怎么办泉州电商网站建设
  • 顺序表算法题---顺序表的去重操作(第12讲)
  • 高频面试八股文用法篇(十五)如何高效操作字符串?
  • 网站链接维护怎么做织梦 更换网站图标
  • 【Linux】TCP
  • 网站建设设计文档模板本机网站环境搭建
  • 从学术视角审视BCT与BUYCOIN生态的抗风险能力:机制、合规与价值重塑
  • web网站开发,在线%考勤管理%系统demo,基于vscode,vue,java,jdk,springboot,高德地图,mysql数据库
  • 逻辑回归(Logistic Regression)详细解释与公式推导
  • 网站搜索引擎优化建议辽宁省建设局网站
  • Rust中Protobuf使用简介
  • 【ISO8601库】日期时间解析器测试套件详解(tests.rs)
  • 游戏手柄遥控越疆协作机器人[三]
  • 怎样搭建免费网站一个网站怎么做镜像站
  • 专业网站建设套餐深圳西乡网站建设
  • 35.linux的定时器使用
  • 网站建设最好的公司哪家好太原的网站搭建公司
  • 【开题答辩全过程】以 基于SpringBoot的中央厨房系统的设计与实现为例,包含答辩的问题和答案
  • 如何做到30分钟可完成企业网站建设
  • 自己做的美食分享到网站用wordpress做网站页面显示404
  • 打工人日报#20251109
  • 沃森 | 科学突破与争议并存 / “与智者为伍” 的人生启示
  • zmaiFy自研排版与格式优化介绍
  • ESLint 是什么?
  • 车联网UDS诊断:0x22,0x2E,0x11,0x2F,0x31,0x28请求数据分析实战.
  • Python字符串详解
  • STL中容器vector -- 讲解超详细