Linux学习(十一)使用Samba或NFS实现文件共享

1. Samba 文件共享服务

  1987年,微软公司和英特尔公司共同制定了SMB(Server Messages Block,服务器消息块)协议。1991年,为了解决Linux系统与Windows系统之间的文件共享问题,Tridgwell基于SMB协议开发出了SMBServer服务程序(Samba服务程序)。Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。

# 安装 samba 服务程序
[root@localhost ~]# yum -y install samba

1.1 创建共享目录(匿名访问)

  1. 创建一个用于共享的目录
# 创建一个用于共享的目录
[root@localhost ~]# mkdir -p /data/share
# 设置足够的权限确保其他人也有写入权限
[root@localhost ~]# chmod -Rf 777 /data/share
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld
  1. 配置共享目录
# 编辑配置文件
vim /etc/samba/smb.conf

# 在全局配置下,加上 map to guest = bad user
[global]
     # 允许匿名访问(将samba不能正确识别的用户都映射成guest用户)
     map to guest = bad user

# 在配置文件最后追加共享目录配置,share 是共享目录名称
[share]
    # 共享目录描述
    comment = share
    # 共享目录
    path = /data/share
    # 关闭“只读模式”
    read only = No
    # 允许guest账户访问此共享目录
    public = Yes
  1. 重启 smb 服务生效
[root@localhost ~]# systemctl restart smb

1.2 创建共享目录(用户认证)

  Samba服务程序默认使用的是用户口令认证模式(user),Samba 用户必须是操作系统中已经存在的用户,但两者的密码可以不相同。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源。
  pdbedit命令用于管理SMB服务程序账户信息。pdbedit命令的参数以及作用:

  • -a 建立Samba用户
  • -x 删除Samba用户
  • -L 列出用户列表
  • -Lv 列出用户详细信息的列表
  1. 创建 Samba 用户
# 创建 Samba 用户 root,并设置密码
[root@localhost ~]# pdbedit -a -u root
  1. 创建一个用于共享的目录
# 创建一个用于共享的目录
[root@localhost ~]# mkdir -p /data/share2
# 设置足够的权限确保其他人也有写入权限
[root@localhost ~]# chmod -Rf 777 /data/share2
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld
``` bash
3. 配置共享目录
``` bash
vim /etc/samba/smb.conf

# 在文件最后加入以下配置,share2 是共享目录名称
[share2]
    comment = share2
    # 共享目录描述
    path = /data/share2
    # 关闭“只读模式”
    read only = No
    # 不允许guest账户访问此共享目录
    public = No
  1. 重启 smb 服务生效
[root@localhost ~]# systemctl restart smb

1.3 Windows 访问共享目录

  要在Windows系统中访问共享资源,只需在Windows的“运行”命令框中输入两个反斜杠,然后再加服务器的IP地址即可。
image.png

1.4 Linux 挂载共享目录

  Linux 挂载共享的方式不只一种,这里只介绍了其中较为简单的一种方式。通过mount命令将共享目录挂载到文件系统中。

  1. 挂载共享目录(匿名)
# 创建挂载目录
[root@localhost ~]# mkdir /mnt/share

# 挂载共享目录(匿名)
[root@localhost ~]# mount -t cifs -o username="Everyone" //192.168.1.10/share /mnt/share
  1. 挂载共享目录(用户认证)
# 创建挂载目录
[root@localhost ~]# mkdir /mnt/share2

# 挂载匿名访问目录(用户认证)
[root@localhost share]# mount -t cifs -o username="root",password="123456" //192.168.1.10/share2 /mnt/share2

  使用mount命令挂载有个缺点就是系统重启后,会导致挂载失效。我们可以把挂载信息写入/etc/fstab 使系统重启后自动挂载。

# 编辑 fstab 文件
vim /etc/fstab

# 在文件最后加入挂载信息
//192.168.1.10/share2  /mnt/share2  cifs  defaults,username=root,password=123456  0 0

2. NFS网络文件系统

  NFS(Network File System),顾名思义,网络文件系统,是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。如果需要共享文件的主机都是Linux系统,推荐使用此种方式。

  测试NFS服务配置效果,需要使用两台Linux主机,分别充当服务端和客户端,本次实验用到的主机IP地址如下:

  • 服务端:192.168.1.10
  • 客户端:192.168.1.11

2.1. 服务端配置

# 安装 NFS 服务
[root@localhost ~]# yum install -y nfs-utils

2.1.1 服务端创建一个用于共享的目录

# 创建一个用于共享的目录
[root@localhost ~]# mkdir -p /data/nfsfile
# 设置足够的权限确保其他人也有写入权限
[root@localhost ~]# chmod -Rf 777 /data/nfsfile
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld

2.1.2 共享目录配置

  NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。常用的配置参数如下:

参数作用
ro只读
rw读写
root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync同时将数据写入到内存与硬盘中,保证不丢失数据
async优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

  例如,如果想要把/data/nfsfile目录共享给192.168.1.0/24网段内的所有主机,让这些主机都拥有读写权限,在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失,以及把来访客户端root管理员映射为本地的匿名用户等,则可以按照下面命令中的格式。

[root@localhost ~]# vim /etc/exports
/data/nfsfile 192.168.1.*(rw,sync,root_squash)

2.1.3 开启相关服务

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

[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl start nfs-server
[root@localhost ~]# systemctl enable nfs-server

2.2. 客户端配置

使用showmount命令查询NFS服务器的远程共享信息,常用参数说明如下:

参数作用
-e显示NFS服务器的共享列表
-a显示本机挂载的文件资源的情况NFS资源的情况
-v显示版本号
# 安装 showmount 工具
[root@localhost ~]# yum install -y showmount

# 查看NFS服务器的远程共享信息
[root@localhost ~]# showmount -e 192.168.1.10
Export list for 192.168.1.10:
/data/nfsfile 192.168.1.*

# 创建挂载目录
[root@localhost ~]# mkdir /mnt/nfsfile

# 挂载
[root@localhost ~]# mount -t nfs 192.168.1.10:/data/nfsfile /mnt/nfsfile

如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中:

[root@localhost nfsfile]# vim /etc/fstab
192.168.1.10:/data/nfsfile mnt/nfsfile nfs defaults 0 0

3. autofs 自动挂载服务

  我们将挂载信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,而autofs服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。

# 安装 autofs 
[root@localhost nfsfile]#  yum install autofs -y

3.1 autofs 挂载 nfs

3.1.1 编辑主配置文件

  主配置文件中需要按照“挂载目录 子配置文件”的格式进行填写。在下面命令中,/mnt/nfs 是要挂载到的本地目录,如果不存在会自动创建,/etc/auto-nfs.misc 是自定义的子配置文件。

[root@localhost nfsfile]# vim /etc/auto.master
/mnt/nfs  /etc/auto-nfs.misc

3.1.2 编辑子配置文件

  在下面的命令中 nfsfile 是在 /mnt/nfs (主配置文件中配置的那个) 下自动创建的一个挂载目录。fstype 是挂载类型,192.168.1.10:/data/nfsfile 是nfs共享地址。

# 编辑子配置文件
[root@localhost nfsfile]# vim /etc/auto-nfs.misc
nfsfile -fstype=nfs 192.168.1.10:/data/nfsfile

3.1.3 重启服务并测试

# 重启 autofs 服务
[root@localhost nfsfile]# systemctl restart autofs
[root@localhost nfsfile]# systemctl enable autofs

# 列出目录
[root@localhost /]# ll /mnt/nfs/nfsfile

参考文档:
使用Samba或NFS实现文件共享
https://www.cnblogs.com/pipci/p/10155761.html

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://dukec.cn/archives/使用samba或nfs实现文件共享

Buy me a cup of coffee ☕.