linux服务--nfs服务

一、nfs 服务的配置

1、服务器配置

1)服务器配置

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# vi /etc/exports
#添加共享目录以及设置可访问网络
/data/jiaofan   *(ro,all_squash,anonuid=1111,anongid=1112)      <==所有网络可以进行读文件,all_squash设置使用服务器的那个用户来访问/data/jiaofan这个目录。
/data/user      192.168.91.159(rw)    <==只有192.168.91.159网络有读写权限,其他ip不能访问。
/tmp    192.168.100.0/24(ro)  localhost(rw)       *.ev.ncku.edu.tw(ro,sync)   <==192.168.100.0/24有读的权限,本地登录有读写权限。ev.ncku.edu.tw域有读的权限,并且数据会同步写入到内存与硬盘中
[root@localhost ~]# systemctl  restart nfs

2)/etc/exports配置介绍

配置如下:“共享目录 网络(权限)”

1> 共享目录:自己想要分享的目录
2> 网络:

  • 可以使用完整的 IP 或者是网域,例如 192.168.100.10 或 192.168.100.0/24 ,或 192.168.100.0/255.255.255.0
  • 使用主机名:但这个主机名必须要在 /etc/hosts 内,或可使用 DNS 找到该名称才行!反正重点是可找到 IP 就是了。如果是主机名的话,那么他可以支持通配符,例如 * 或 ? 均可接受。

3> ()里面的权限参数

参数内容说明
ro,rwro(read-only):仅有读的权限;rw(read-write):有读写的权限
sync,asyncsync 代表数据会同步写入到内存与硬盘中;async 则代表数据会先暂存于内存当中,而非直接写入硬盘!
no_root_squash,root_squash预设的情况下,客户端 root 的身份会由root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!
all_squash不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody),可以和下面参数结合使用
anonuid,anongidanon 意指 anonymous (匿名者) 前面关于 all_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值,这个 UID 必需要存在于你的/etc/passwd 当中。anonuid 指的是 UID 而 anongid 则是群组的 GID

注:最终能不能写进去,还有看用户对共享目录有没有写入权限。(后面有详细的权限介绍)

2、客户端配置

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.91.157
Export list for 192.168.91.157:
/data/jiaofan *
/data/user    192.168.91.159
[root@localhost ~]# mount 192.168.91.157:/data/jiaofan /data/jiao
mount.nfs: mount point /data/jiao does not exist   <==本地的挂在目录必须存在
[root@localhost ~]# mkdir /data/jiao
[root@localhost ~]# mount 192.168.91.157:/data/jiaofan /data/jiao

3、常用的命令

1)服务器端在/etc/exports 文档中添加或者删除文件常用的命令

[root@www ~]# exportfs [-aruv]
 选项与参数:
 -a :全部挂载(或卸除) /etc/exports 档案内的设定
 -r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports
 及 /var/lib/nfs/xtab 的内容!
 -u :卸除某一目录
 -v :在 export 的时候,将分享的目录显示到屏幕上!

1>重新挂在一次 /etc/exports 的设定

[root@localhost ~]# exportfs -arv
exporting 192.168.91.159:/data/user
exporting *:/data/jiaofan

2>将已经分享的 NFS 目录资源,通通都卸除

[root@localhost ~]# exportfs -auv

2)客户端挂在时常用命令

[root@www ~]# showmount [-ae] [hostname|IP]
 选项与参数:
 -a :显示目前主机与客户端的 NFS 联机分享的状态;
 -e :显示某部主机的 /etc/exports 所分享的目录数据。

1>请显示出刚刚我们所设定好的相关 exports 分享目录信息

[root@localhost ~]# showmount -e 192.168.91.157
Export list for 192.168.91.157:
/data/jiaofan *
/data/user    192.168.91.159

2> 挂在/data/jiaofan到本地/data/jiao

[root@localhost ~]# mount   -t nfs 192.168.91.157:/data/jiaofan /data/jiao

3> 卸载目录

[root@localhost nfs]# umount /data/jiao  <==/data/jiao是本地客户端的挂载目录

报错:

[root@localhost jiao]# umount /data/jiao
umount.nfs4: /data/jiao: device is bus

#使用 -f  参数
[root@localhost jiao]# umount -f /data/jiao
umount.nfs4: /data/jiao: device is busy

#使用 -l 参数(小写的L)
[root@localhost jiao]# umount -l /data/jiao

注: -t nfs :指定文件系统类型,

二、nfs 软件介绍

  1. 主要配置文件:/etc/exports:
  2. NFS 文件系统维护指令:/usr/sbin/exportfs
  3. 分享资源的登录档:/var/lib/nfs/*tab
    在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab则记录曾经链接到此 NFS 服务器的相关客户端数据。
  4. 客户端查询服务器分享资源的指令:/usr/sbin/showmount

三、nfs 的权限设置

首先要明白一个问题:客户端的用户对服务器的文件进行操作,那么服务器用的是哪个用户?

分析:客户端有客户端的passwd文件,服务端有服务端的passwd文件,两个文件的用户肯定不一样,但是有一个是一样的,那就是UID和GID。

答:客户端用jiaofan(uid=1111 gid=1111)去访问服务器的文件,其实是客户端用uid=1000去访问服务器的文件,然后服务器在passwd里面找uid=1000的用户对文件进行操作。

此时就会产生几个问题:

  1. 服务器刚好有个uid=1111的用户,还刚好就是jiaofan这个用户
  2. 服务器刚好有个uid=1111的用户,但这个用户是其他的,比如user
  3. 服务器根本就没有uid=1111的这个用户。
  4. 客户端用root登录,root用户服务器总要有吧,但是这操作权限是不是有点大。

服务端:

[root@localhost nfs]# cat /etc/exports
/data/user	192.168.91.0/24(rw)
[root@localhost nfs]# exportfs -arv

客户端:

[root@localhost jiao]# showmount -e 192.168.91.157
Export list for 192.168.91.157:
/data/user 192.168.91.0/24
[root@localhost jiao]# mount -t nfs 192.168.91.157:/data/user  /data/jiao

1)/data/user设置了192.168.91.159(rw),但是客户端(192.168.91.159)仍然写不进去。

[root@localhost jiao]# su - jiao2
[jiao2@localhost ~]$ id jiao2
uid=1111(jiao2) gid=1111(jiao2) 组=1111(jiao2)
[jiao2@localhost ~]$ cd /data/jiao
[jiao2@localhost jiao]$ ls
b.txt
[jiao2@localhost jiao]$ touch test1.txt
touch: 无法创建"test1.txt": 权限不够      <==我以jiao1的身份去访问显示权限不够。

这是因为服务器的/data/user没有给其他用户写的权限,看一下服务器的/data/user的权限。

[root@localhost data]# ll
总用量 0
drwxr-xr-x. 2 root root 19 1月  26 17:47 user   <==文件是root用户的,其他用户没有写入权限。
[root@localhost data]# id 1111
uid=1111(jiao2) gid=1111(jiao2) 组=1111(jiao2)
[root@localhost data]# 

我们更改一下/data/user的权限,让其他用户可以访问。

#服务端的操作
[root@localhost data]# chmod 757 user
[root@localhost data]# ll
总用量 0
drwxr-xrwx. 2 root root 19 1月  26 17:47 user

#客户端检查是否可以写入
[jiao2@localhost jiao]$ pwd
/data/jiao
[jiao2@localhost jiao]$ touch test1.txt
[jiao2@localhost jiao]$ ll
总用量 0
-rw-r--r--. 1 root  root  0 1月  26 17:47 b.txt
-rw-rw-r--. 1 jiao2 jiao2 0 1月  27 14:17 test1.txt

#服务端检查
[root@localhost user]# ll
总用量 0
-rw-r--r--. 1 root  root  0 1月  26 17:47 b.txt
-rw-rw-r--. 1 jiao2 jiao2 0 1月  27 14:17 test1.txt

2)服务器刚好有个uid=1111的用户,还刚好就是jiao2这个用户

上面的案例中,刚好在服务端有uid=1111的用户,而且刚好是jiao2

[jiao2@localhost jiao]$ touch test1.txt
[jiao2@localhost jiao]$ ll
总用量 0
-rw-r--r--. 1 root  root  0 1月  26 17:47 b.txt
-rw-rw-r--. 1 jiao2 jiao2 0 1月  27 14:17 test1.txt

3)服务器刚好有个uid=1111的用户,但这个用户是其他的,比如jiao1

#服务端
[root@localhost data]# id 1111
uid=1111(jiao1) gid=1111(jiao1) 组=1111(jiao1)

客户端创建文件test2.txt

[jiao2@localhost jiao]$ touch test2.txt
[jiao2@localhost jiao]$ ll
总用量 0
-rw-r--r--. 1 root  root  0 1月  26 17:47 b.txt
-rw-rw-r--. 1 jiao2 jiao2 0 1月  27 14:24 test2.txt

查看服务端的属主和属组

[root@localhost user]# ll
总用量 0
-rw-r--r--. 1 root  root  0 1月  26 17:47 b.txt
-rw-rw-r--. 1 jiao1 jiao1 0 1月  27 14:24 test2.txt   <==没错,这个文件属于uid=1111的用户。

4)服务器根本就没有uid=1111的这个用户。

服务器:

[root@localhost user]# userdel jiao1
[root@localhost user]# id 1111
id: 1111: no such user

客户端创建文件:

[jiao2@localhost jiao]$ touch test3.txt
[jiao2@localhost jiao]$ ll
总用量 0
-rw-r--r--. 1 root  root  0 1月  26 17:47 b.txt
-rw-rw-r--. 1 jiao2 jiao2 0 1月  27 14:17 test1.txt
-rw-rw-r--. 1 jiao2 jiao2 0 1月  27 14:24 test2.txt    <==客户端永远都是
-rw-rw-r--. 1 jiao2 jiao2 0 1月  27 14:28 test3.txt

来服务器端查看

[root@localhost user]# ll
总用量 0
-rw-r--r--. 1 root root 0 1月  26 17:47 b.txt
-rw-rw-r--. 1 1111 1111 0 1月  27 14:17 test1.txt
-rw-rw-r--. 1 1111 1111 0 1月  27 14:24 test2.txt  <==这个怎么也是1111了,因为这个文件属于uid=1111用户的,没有了1111用户所以就变成了属于1111.
-rw-rw-r--. 1 1111 1111 0 1月  27 14:28 test3.txt    <==这个不用解释了吧

突发奇想,我现在创建一个1111用户会如何?

#服务端操作
[root@localhost user]# useradd -u 1111 user1
[root@localhost user]# id 1111
uid=1111(user1) gid=1111(user1) 组=1111(user1)
[root@localhost user]# ll
总用量 0
-rw-r--r--. 1 root  root  0 1月  26 17:47 b.txt
-rw-rw-r--. 1 user1 user1 0 1月  27 14:17 test1.txt
-rw-rw-r--. 1 user1 user1 0 1月  27 14:24 test2.txt
-rw-rw-r--. 1 user1 user1 0 1月  27 14:28 test3.txt

5)客户端用root登录,root用户服务器总要有吧,但是这操作权限是不是有点大。

如果没有特别配置,root用户会被压缩到匿名用户登录。可以参考前面配置root用户登录

四、RPC 简介

因为NFS支持很多功能,而没一个功能都会开放不同的端口,而这些端口还不是固定的,而是随机取用一些未被使用的小于 1024 的埠口来作为传输之用。这让客户端怎么来连接?

所以就想到了RPC,NFS每开启一个功能,都要去RPC注册一个端口号,而RPC始终用111这个端口,这就很舒服,客服端直接去找RPC询问就可以了。默认开启nfs就会先开启RPC,所以不用特别开启rpc。

  1. 客户端会向服务器端的 RPC (port 111) 发出 NFS 档案存取功能的询问要求;
  2. 服务器端找到对应的已注册的 NFS daemon 埠口后,会回报给客户端;
  3. 客户端了解正确的埠口后,就可以直接与 NFS daemon 来联机。

五、autofs自动化挂在

都好了以后我又有了新的需求:

  1. 可不可以让客户端在有使用到 NFS 文件系统的需求时才让系统自动挂载?
  2. 当 NFS 文件系统使用完毕后,可不可以让 NFS 自动卸除,以避免可能的RPC 错误?

1、安装autofs服务

[root@localhost data]# yum -y install autofs

2、配置autofs,配置文件:/etc/auto.master

[root@localhost data]# showmount -e 192.168.91.157
Export list for 192.168.91.157:
/data/jiaofan 192.168.91.0/24
/data/user    192.168.91.0/24

[root@localhost data]# vi /etc/auto.master
#添加下面内容
/data   /etc/auto.nfs    <==/data目录是不需要存在的,autofs会自己解决。

[root@localhost data]# vi /etc/auto.nfs
#添加下面配置
jiao	-rw,bg.soft	192.168.91.157:/data/jiaofan
user1	192.168.91.157:/data/user

[root@localhost data]# systemctl restart autofs

3、测试:

你会发现他是有/data这个目录的,但是里面并没有我们需要挂载的文件

[root@localhost data]# ll /data
总用量 0

你直接cd /data/jiao你会发现进去了。而且进入了192.168.91.157:/data/jiaofan。

[root@localhost data]# cd /data/jiao
[root@localhost jiao]# ls
a.txt  c.txt  d.txt  e.txt

在看一下/data,居然有个jiao。但是为什么没有user。因为你并没有使用它的需求

[root@localhost jiao]# ll /data
总用量 0
drwxr-xrwx. 2 root root 58 1月  26 17:58 jiao
[root@localhost jiao]# 

直接进去/data/user1

[root@localhost jiao]# cd /data/user1
[root@localhost user1]# ls
b.txt  test1.txt  test2.txt  test3.txt
[root@localhost user1]# cd ..
[root@localhost data]# ll
总用量 0
drwxr-xrwx. 2 root root 58 1月  26 17:58 jiao
drwxr-xrwx. 2 root root 70 1月  27 14:28 user1
[root@localhost data]# 

注:过五分钟不使用,这两个文件自动取消挂在。

4、/etc/auto.nfs文件解释

[本地端次目录] [-挂载参数] [服务器所提供的目录]
 选项与参数:
 [本地端次目录] :指的就是在 /etc/auto.master 内指定的目录之次目录
 [-挂载参数] :就是前面提到的 rw,bg,soft 等等的参数。
 [服务器所提供的目录] :例如 192.168.100.254:/home/public 等
 
 [root@clientlinux ~]# vim /etc/auto.nfs
 public -rw,bg,soft,rsize=32768,wsize=32768 
192.168.100.254:/home/public
 testing -rw,bg,soft,rsize=32768,wsize=32768 
192.168.100.254:/home/test
 temp -rw,bg,soft,rsize=32768,wsize=32768 192.168.100.254:/tmp
 # 参数部分,只要最前面加个 - 符号即可!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值