Linux实验记录:使用Samba或NFS实现文件共享

前言:

本文是一篇关于Linux系统初学者的实验记录。

参考书籍:《Linux就该这么学》

实验环境:

VmwareWorkStation 17——虚拟机软件

RedHatEnterpriseLinux[RHEL]8——红帽操作系统

备注:

  FTP实现了文件传输,而非文件共享。要想通过客户端直接在服务器上修改文件内容就要通过Samba文件共享服务。

Samba文件共享服务:

1987年,微软公司和因特尔公司共同制定了SMB(Server Messages Bolck,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源共享问题,这也使得在多个主机之间共享文件变得越来越简单。

1991年,Tridgwell为了解决Linux系统与Windows系统之间的文件共享系统,基于SMB协议开发出了SMBServer服务程序。

Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。

目录

前言:

备注:

准备:

正文:

实验1:配置共享资源

Step1:创建用于访问共享资源的账户信息

Step2:创建用于共享资源的文件目录

Step3:设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。

Step4:在Samba服务程序的主配置文件中,写入共享信息。

Step5:重启smb服务并加入到启动项中,保证在重启后依然能够为用户持续提供服务

Step6:查看Samba服务状态

实验2:Windows挂载共享

 实验3:Linux挂载共享

 总结:

实验4:NFS(网络文件系统)

Step1:在NFS服务器上建立用于NFS文件共享的目录,并设置足够权限

Step2:配置NFS服务的配置文件:/etc/exports

Step3:启动和启用NFS服务程序。

Step4:配置NFS客户端

 实验5:autofs自动挂载服务


准备:

  Samba服务程序的配置:

安装Samba服务程序和一个samba-client软件包。

dnf install samba samba-client

打开Samba服务程序的主配置文件,删除【home】【printers】【print$】

Samba服务中的参数及作用:

security参数代表用户登录Samba服务时采用的验证方式:

share:代表主机无须验证密码。这相当于vsftpd服务的匿名公开访问模式

user:代表登录Samba服务时需要使用账号密码进行验证,、

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

server:代表使用独立主机验证来访问用户提供的密码。

 在最早期的CentOS/RHEL系统中,Samba服务使用的是PAM(可插拔认证模块)来调用本地账号和密码信息。

RHEL8版本中,使用tdbsam数据库进行验证。这是一个专门用于保存Samba服务账号密码的数据库,用户需要用pdbedit命令进行独立的添加操作。

正文:

实验1:配置共享资源

全局配置参数用于设置整体的资源共享环境,对里面每一个独立的共享资源都有效。

区域配置参数则用于设置单独的共享资源,且仅对该资源有效。

参数作用
[database]

共享名称为database

comment = Do not arbitrarily modify警告用户不要最易修改数据库
path = /home/database共享目录为/home/database
public = no

关闭“所有人可见”

writable = yes允许写入

Step1:创建用于访问共享资源的账户信息

在RHEL8系统中,Samba服务程序默认使用的是用户密码认证模式(user)。

这种认证模式可以确保仅让有密码且受信任的用户访问共享资源。

Samba服务程序的数据库要求账户必须在当前系统中已存在,

pdbedit命令用于管理Samba服务程序的账户信息库。

id linuxprobe
pdbedit -a -u linuxprobe

账户:linuxprobe

密码:redhat

Step2:创建用于共享资源的文件目录

由于/home目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的SELinux上下文所带来的限制。

查阅Samba帮助手册,正确的文件上下文应该是samba_share_t

修改完执行restorecon命令,就能让应用于目录的新SELinux安全上下文立即生效。

mkdir /home/database
chown -Rf linuxprobe:linuxprobe /home/database
semanage fcontext -a -t samba_share_t /home/database
restorecon -Rv /home/database

Step3:设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。

getsebool -a | grep samba
setsebool -P samba_enable_home_dirs on

Step4:在Samba服务程序的主配置文件中,写入共享信息。

vim /etc/samba/smb.conf
[global]
        workgroup = SAMBA
        security = user
        passdb backend = tdbsam
[database]
        comment = Do not arbitrarily modify the database file
        path = /home/database
        public = no
        writable = yes              

 Samba服务程序的配置工作基本完毕。

Step5:重启smb服务并加入到启动项中,保证在重启后依然能够为用户持续提供服务

systemctl restart smb
systemctl enable smb

为了避免防火墙功能干扰,将iptables防火墙清空,再把Samba服务添加到firewalld防火墙中

iptables -F
iptables-save
firewall-cmd --zone=public --permanent --add-service=samba
firewall-cmd --reload

Step6:查看Samba服务状态

使用"systemctl status smb“命令查看服务器是否启动了Samba服务。

smbclient命令查看共享详情;

-U参数指定用户名称

-L参数列出共享清单

smbclient -U linuxprobe -L 192.168.31.128

实验2:Windows挂载共享

  无论Samba共享服务是部署Windows系统上还是部署在Linux系统上,通过Windows系统进行访问时,其步骤和方法都是一样的。

 实验3:Linux挂载共享

Samba不仅能解决Windows和Linux之间共享

还可以解决Linux和Linux之间的共享

主机名称操作系统IP地址
Samba共享服务器RHEL 8192.168.31.128
Linux客户端RHEL 8192.168.31.130
Windows客户端Windows 11 家庭中文版192.168.31.1

客户机:

dnf install cifs-utils
mkdir /database
mount -t cifs -o username=linuxprobe,password=redhat //192.168.31.128/database /database

 现在每次重启电脑后都要使用mount命令手动挂载远程目录。

可以按照Samba服务的用户名、密码、共享域的顺序将相关信息写入一个认证文件中。

让/etc/fstab文件和系统自动加载它。

修改认证文件权限为仅root管理员才能够读写

vim auth.smb
username=linuxprobe
password=redhat
domain=SAMBA
chmod 600 auth.smb

将挂载信息写入/etc/fstab文件中,以确保共享挂载信息在服务器重启后依然生效:

mount -a

 看到了刚才在Windows上共享出的文件。

 总结:

ftp只能下载后修改,然后上传覆盖。

smba、smb、NFS是在线修改的。

smb只能在Windows之间共享

samba可以在Linux和Windows之间共享

实验4:NFS(网络文件系统)

  如果觉得Samba服务程序太麻烦,而且恰巧需要共享的主机都是Linux系统。

可以在客户端部署NFS(网络文件系统)服务来共享文件。

NFS服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使本地主机(Linux客户端)基于TCP / IP 协议,像使用本地主机上的远程资源一样读写远程Linux系统上的共享文件。

主机名称操作系统IP地址
NFS服务器RHEL 8 192.168.31.128
NFS客户端RHEL 8192.168.31.130

对两台主机: 

dnf install nfs-utils
iptables -F 
iptables-save
firewall-cmd --permanent --zone=public --add-service=nfs
firewall-cmd --permanent --zone=public --add-service=rpc-bind
firewall-cmd --permanent --zone=public --add-service=mountd
firewall-cmd --reload

Step1:在NFS服务器上建立用于NFS文件共享的目录,并设置足够权限

mkdir /nfsfile
chmod -R 777 /nfsfile

Step2:配置NFS服务的配置文件:/etc/exports

  该文件默认情况下里面没有任何内容。

按照”共享目录路径 允许访问的NFS客户端(共享权限参数)“的格式,定义要共享的目录与相应的权限。

vim /etc/exports

注意:NFS客户端地址与权限之间没有空格

/nfsfile 192.168.10.*(rw,sync,root_squash)

Step3:启动和启用NFS服务程序。

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

systemctl restart rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server

Step4:配置NFS客户端

先使用showmount命令查询NFS服务器的远程共享信息。

参数作用
-e显示NFS服务器的共享列表
-a显示本机挂载的文件资源的情况NFS资源的情况
-v显示版本号

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

mkdir /nfsfile
mount -t nfs 192.168.31.128:/nfsfile /nfsfile
df -h

vim /etc/fstab
192.168.31.128:/nfsfile /nfsfile nfs defaults 0 0 

 实验成功:

 实验5:autofs自动挂载服务

  无论是Samba服务还是NFS服务,都要把挂载信息写入到/etc/fstab中,这样远程共享资源就会自动跟随服务器开机而进行挂载。但是如果挂载的远程资源太多,则会给网路宽带和服务器硬件资源的浪费。

autofs自动挂载服务可以解决这一问题。autofs服务程序是一种Linux系统守护进程,当检测用户试图访问一个为挂载的文件系统时,将自动挂载该文件系统。

——autofs服务程序在用户需要使用该文件系统时才去挂载。

dnf install autofs

 处于生成环境中的Linux服务器,一般会同时管理许多设备的挂载操作。

如果把这些设备挂载信息都写入autofs服务的主配置文件中,不利于服务执行效率

因此按照:”挂载目录 子配置文件“的格式进行填写

子配置文件是对这个挂载目录内的挂载设备信息作进一步的说明。

vim /etc/auto.master

 在子配置文件中:

按照”挂载目录 挂载文件类型及权限:设备名称“的格式填写。

vim /etc/iso.misc
iso -fstype=ios9660,ro,nosuid,nodev :/dev/cdrom

-fstype为文件系统格式参数,iso9660为光盘设备格式

ro、nosuid、nodev为光盘设备具体权限参数

systemctl start autofs
systemctl enable autofs

检测结果:

现查看当前光盘设备挂载情况,确认没有被挂载上

umount /dev/cdrom
df -h

/media目录中根本就没有iso子目录:

但是,却可以使用cd命令切换到这个iso子目录中,而且光盘设备会被立即自动挂载。

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值