0
点赞
收藏
分享

微信扫一扫

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12

       本章先学习 SMB 协议与 Samba 服务程序的起源和发展过程,比较文件传输和文件共享这两种资源交换方式,然后通过实验的方式部署文件共享服务来深入了解 Samba 服务中相关参数的作用,最后分别使用 Windows 系统和 Linux 系统访问共享的文件资源。

       还会学习如何配置网络文件系统(Network File System,NFS)服务来简化 Linux 系统之间的文件共享工作,以及通过部署 NFS 服务在多台 Linux 系统之间挂载并使用资源。在管理设备挂载信息时,使用 autofs 服务不仅可以正常满足设备挂载的使用需求,还能进一步提高服务器硬件资源和网络带宽的利用率。

12.1 Samba 文件共享服务

       1987 年微软公司和英特尔公司共同制定了 SMB(Server Messages Block,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了 1991 年,当时还在读大学的 Tridgwell 为了解决 Linux 系统 与 Windows 系统之间的文件共享问题,基于 SMB 协议开发出了 SMBServer 服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现 Linux 系统与 Windows 系统之间的文件共享工作。

       当时 Tridgwell 想把 SMBServer 注册成为商标,但却被商标局以 “SMB 是没有意义的字符” 为由拒绝了申请。后来 Tridgwell 不断翻看词典,突然看到一个拉丁舞蹈的名字—Samba,而且这个热情洋溢的舞蹈名字中又恰好包含了“SMB”,于是Samba 服务程序的名字由此诞生,Samba 服务程序现在已经成为在 Linux 系统与 Windows 系统之间共享文件的最佳选择。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba

       Samba 服务程序的配置方法与之前讲解的很多服务的配置方法类似,首先需要先通过软件仓库来安装 Samba 服务程序(Samba 服务程序的名字也恰巧是软件包的名字),和 samba-client 软件包,用于测试共享目录的客户端程序。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_02

       安装完毕后打开 Samba 服务程序的主配置文件 /etc/samba/smb.conf,有 37 行。其中第 17~ 22 行代表共享每位登录用户的家目录内容,意味着用户之间可以相互查看;第 24~29 行是用 SMB 协议共享本地的打印机设备,方便局域网内的用户远程使用打印机设备;最后的第 31~37 行依然为共享打印机设备的参数。以上参数对目前实验用不到,可全部删除或加 # 注释掉。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_03

       对 Samba 服务的主配置文件进行删减操作之后,最后的有效配置参数只剩下了 8 行。其中第 5~8 行参数中所提到的 cups 的全称为 Common UNIX Printing System(通用 UNIX 打印系统),还是用于打印机或打印服务器的,最后留下了4行。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_04

       下面对上述代码配置行进行详细的注释说明,以备留存查询。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_05

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_NFS_06

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_NFS_07

       在上面的代码中,security 参数代表用户登录 Samba 服务时采用的验证方式,共有 4 种可用参数。

   ➢ share:代表主机无须验证密码。这相当于 vsftpd 服务的匿名公开访问模式,比较方便但安全性很差。

   ➢ user:代表登录 Samba 服务时需要使用账号密码进行验证,通过后才能获取到文件。这是默认的验证方式。

   ➢ domain:代表通过域控制器进行身份验证,用来限制用户的来源域。

   ➢ server:代表使用独立主机验证来访用户提供的密码。这相当于集中管理账号,并不常用。

       在早期的 RHEL/CentOS 系统中,Samba 服务使用的是 PAM(可插拔认证模块)来调用本地账号和密码信息,后来在 5、6 版本中替换成了用 smbpasswd 命令来设置独立的 Samba 服务账号和密码。到了 RHEL 7/8 版本,则又进行了一次改革,将传统的验证方式换成使用 tdbsam 数据库进行验证。这是一个专门用于保存 Samba 服务账号密码的数据库,用户需要用 pdbedit 命令进行独立的添加操作。

12.1.1 配置共享资源

       Samba 服务程序的主配置文件与前面学习过的 Apache 服务很相似,包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源仅对该资源有效。创建共享资源的方法很简单,只要按下图中的格式写入到 Samba 服务程序的主配置文件中,然后重启该服务即可。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_08

       首先创建用于访问共享资源的账户信息,RHEL 8 系统中 Samba 服务程序默认使用的是用户密码认证模式(user),只有建立账户信息数据库之后,才能使用用户密码认证模式。并且 Samba 服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性引发错误。

       pdbedit 命令用于管理 Samba 服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”;在第一次把账户信息写入到数据库时需要使用 -a 参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。pdbedit 命令中使用的参数以及作用如图。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_09

       下面使用系统中已有的 probe 用户作为 samba 服务的访问,pdbedit 命令写入用户时要求输入的密码与用户本地密码无关。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_10

       创建用于共享资源的文件目录,设置文件读写权限,由于/home 目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的 SELinux 安全上下文的限制。在 Samba 的帮助手册中显示,正确的文件上下文值应该是 samba_share_t,修改完毕后执行 restorecon 命令,让应用于目录的新 SELinux 安全上下文立即生效。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_NFS_11

       设置 SELinux 服务策略,使其允许通过 Samba 服务程序访问普通用户家目录。执行 getsebool 命令,筛选出所有与 Samba 服务程序相关的 SELinux 域策略,根据策略的名称(或经验)选择出正确的策略条目进行开启。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_12

       在 Samba 服务程序的主配置文件 /etc/samba/smb.conf,根据 12.1.1 目录下面图片内容的格式追加写入共享信息。Samba 服务程序在系统中的名字为 smb,所以重启 smb 服务并加入到启动项中,保证在重启服务器后依然能够为用户持续提供服务。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_NFS_13

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_14

       为了避免防火墙限制用户访问,这里将 iptables 防火墙清空,再把 Samba 服务添加到 firewalld 防火墙中。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_CentOS_15

       可以使用“systemctl status smb”命令查看服务器是否启动了 Samba 服务。如果想进一步查看 Samba 服务都共享了哪些目录,则可以使用 smbclient 命令来查看共享详情;-U 参数指定了用户名称(用哪位用户挂载了 Samba 服务,就用哪位用户的身份进行查看);-L 参数列出了共享清单。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_16

       查看可能会报错:protocol negotiation failed: NT_STATUS_IO_TIMEOUT有可能是dns的问题。去注释掉 /etc/resolv.conf 里面无关的DNS指向即可。

12.1.2 Windows 访问共享

       无论 Samba 共享服务部署在 Windows 系统上还是部署在 Linux 系统上,通过 Windows 系统进行访问时,方法都是一样的。要在 Windows 系统中访问共享资源,只需要单击 Windows 系统的“开始”按钮后输入两个反斜杠,然后再添加服务器的 IP 地址即可。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_17

       输入密码时不要搞错不是本地用户原来的密码,是前面 pdbedit 命令写入用户时的密码。新建文件后删除均成功。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_18

12.1.3 Linux 挂载共享

       Samba 服务程序还可以实现 Linux 系统之间的文件共享,设置 Samba 服务程序所在主机(即 Samba 共享服务器)和 Linux 客户端使用的 IP 地址,然后在客户端(centos7)安装支持文件共享服务的软件包(cifs-utils)。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_19

       在 centos 7 客户端创建一个用于挂载 Samba 服务共享的目录。这个目录可以与服务器上的共享名称同名。mount 命令中的-t cifs(common internet file system)用于指定协议类型,-o 参数用于指定用户名和密码,接着是服务器 IP 地址/共享名称,最后是本地挂载目录。服务器 IP 地址后面的共享名称指的是配置文件中[database]的值,而不是服务器本地挂载的目录名称。虽然这两个值可以一样。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_20

       远程共享目录也可以实现自动挂载,需按照 Samba 服务的用户名、密码、共享域的顺序将相关信息写入一个认证文件中,然后编辑挂载 /etc/fstab 文件并保存。为了保证不被其他人随意看到,把认证文件的权限修改为仅 root 管理员才能够读写。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_21

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_CentOS_22

       centos 7 客户端成功地挂载了 Samba 服务的共享资源,进入到挂载目录 /db 后就可以看到 Windows 系统访问 Samba 服务程序时留下来的文件(即文件 samba.txt),对该文件进行读写,删除也可以。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_23

12.2 NFS(网络文件系统)

       NFS 服务基于TCP/IP协议,也可以将远程 Linux 系统上的文件共享资源挂载到本地主机的目录上,RHEL 8 和 CentOS 7 系统中默认已经安装了 NFS 服务,可以使用软件仓库检查系统中是否已经安装了 NFS 软件包;默认的防火墙策略禁止 NFS 共享服务,需要添加 nfs 服务及关联项允许。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_NFS_24

       在 NFS 服务器上建立用于 NFS 文件共享的目录,并设置足够的权限确保其他人也有写入权限;NFS 服务程序的配置文件为 /etc/exports,默认情况下里面没有任何内容,可以按照下图参数的格式写到 NFS 服务程序的配置文件中。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_25

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_NFS_26

       在 NFS 服务的配置文件中巧用通配符能够实现很多便捷功能;匹配 IP 地址就有 3 种方法:第一种是直接写 * 号,代表任何主机都可以访问,第二种则是实验中采用的 192.168.187.*通配格式,代表来自 192.168.187.0/24 网段的主机,第三种则是直接写对方的 IP 地址,如 192.168.187.131,代表仅允许该主机进行访问。

       由于在使用 NFS 服务进行文件共享之前,需要使用 RPC(Remote Procedure Call,远程过程调用)服务将 NFS 服务器的 IP 地址和端口号等信息发送给客户端。因此在启动 NFS 服务之前,还需要顺带重启并启用 rpcbind 服务程序,并将这两个服务一并加入开机启动项中。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_NFS_27

       NFS 客户端的配置步骤比较简单,先使用 showmount 命令查询 NFS 服务器的远程共享信息,该命令的参数如图。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_28

       然后在客户端创建一个挂载目录,使用 mount 命令并结合-t 参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的 IP 地址:/共享目录,最后本地的挂载目录。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_29

       同样可以实现开机自动挂载 NFS 文件共享服务,则需要将其写入到 fstab 文件中。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_CentOS_30

       最后来验证一下共享目录的读写,删除,操作成功。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_CentOS_31

12.3 autofs 自动挂载服务

       无论是 Samba 服务还是 NFS 服务,都要把挂载信息写入到 /etc/fstab 配置文件才能开机自动挂载;但是如果挂载的远程资源太多,则会给网络带宽和服务器的硬件资源带来很大负载。如果在资源挂载后长期不使用,也会造成服务器硬件资源的浪费。

       autofs 自动挂载服务可以帮我们解决这一问题。与 mount 命令不同,autofs 服务程序是一种 Linux 系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统,从而节约了网络资源和服务器的硬件资源。

       首先需要自行安装 autofs 服务程序。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_32

       在 autofs 服务程序的主配置文件 /etc/auto.master,需要按照“挂载目录 子配置文件”的格式进行填写;对应的子配置文件需要另外编写,子配置文件名字没有严格要求,但后缀以.misc 结束。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_33

       在子配置文件中按照“挂载目录 挂载文件类型及权限 :设备名称”的格式进行填写;例如目录写为 iso,而-fstype 为文件系统格式,iso9660 为光盘设备格式,ro、nosuid 及 nodev 为光盘设备具体的权限参数,/dev/cdrom 则是定义要挂载的设备名称。配置完成后再将 autofs 服务程序启动并加入到系统启动项中。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_NFS_34

       先卸载/dev/sr0,确认光盘设备没有被挂载上;并且 /media 目录中根本就没有 iso 子目录,但是不会影响我们进入 iso 查看里面的内容。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_CentOS_35

       再对前面 NFS 服务进行配置试试;客户端先安装 autofs ,把 NFS 共享目录卸载掉,在 autofs 服务程序的主配置文件 /etc/auto.master 中会有一行“/misc   /etc/auto.misc”参数,这个 auto.misc 相当于自动挂载的参考文件,它默认就已经存在,所以这里不需要进行任何操作。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_CentOS_36

       编辑上面对应的 /etc/auto.misc 文件,填写本地挂载的目录和 NFS 服务器的共享路径,最后重启 autofs 服务程序。当用户进入到/misc/Cnfs 目录时,便会自动挂载共享信息。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_37

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_autofs_38

        回到 RHEL8 服务器查看上面 CentOS 客户端编写的auto.txt 内容。

RHEL8使用Samba或NFS实现文件共享-Linux就这么学12_samba_39



举报

相关推荐

0 条评论