《鸟哥的Linux私房菜 服务器架设篇(第三版)》 第13章 文件服务器之一:NFS服务器 笔记...

目录

NFS

远程过程调用 (RPC) 的服务

NFS 启动的 RPC daemons

  1、rpc.nfsd

  2、rpc.mountd

  3、rpc.lockd (非必要)

  4、rpc.statd (非必要)

NFS Server 端

  NFS 服务器的架设步骤

    1、编辑主要配置文件 /etc/exports

    2、启动 rpcbind (若已经启动了,就不要重新启动)

    3、启动 nfs

  RPC 主程序      rpcbind

  NFS主程序      nfs-utils

  配置文件         /etc/exports

    表         /etc/exports配置文件的权限参数

  日志文件         /var/lib/nfs/*tab

  命令         /usr/sbin/exportfs

  命令         /usr/sbin/showmount

  命令  rpcinfo

  端口

  端口文件/etc/sysconfig/nfs

NFS client端

  客户端的UID与服务器端的UID关系

  表         mount命令的主要参数

  表         额外的NFS挂载参数

  无法挂载的原因分析

    1、客户端的主机名或 IP 网段不被允许使用

    2、服务器或客户端某些服务未启动

  (重点)自动挂载 autofs 的使用

    1、建立主配置文件 /etc/auto.master ,并指定侦测的特定目录

    2、建立数据对应文件内/etc/auto.nfs的挂载信息与服务器对应的资源

     3、启动autofs

 

NFS

NFS 为 Network FileSystem 的简称,它的目的就是想让不同的机器、不同的操作系统可以彼此共享数据文件。

 

Unix Like主机连接到另一部 Unix Like 主机来共享彼此的文件时,使用 NFS 要比 SAMBA 这个服务器快速且方便的多了!

 

NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器共享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区一样 (partition)!

 

因为 NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口口来传输数据,因此, NFS 的功能所对应的端口口才没有固定住, 而是随机取用一些未被使用的小于 1024 的端口来作为传输之用。

远程过程调用 (RPC) 的服务

RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的端口上去。

 

那 RPC 又是如何知道每个 NFS 的端口呢?

这是因为当服务器在启动NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的端口。

 

要启动 NFS 之前, RPC 就要先启动了,否则 NFS 会无法向 RPC 注册。 另外,RPC 若重新启动时,原本注册的数据会不见,因此 RPC 重新启动后,它管理的所有服务都需要重新启动来重新向 RPC 注册。

 

NFS 必须要有 RPC 存在时才能成功的提供服务,因此我们称 NFS 为 RPC server 的一种。

 

不论是客户端还是服务器端,要使用 NFS 时,两者都需要启动 RPC 才行。

NFS 启动的 RPC daemons

1、rpc.nfsd

最主要的 NFS 服务器服务提供商。这个 daemon 主要的功能就是在管理客户端是否能够使用服务器文件系统挂载信息等, 其中还包含这个登入者的 ID 的判别!

2、rpc.mountd

这个 daemon 主要的功能,则是在管理 NFS 的文件系统哩!当客户端顺利的通过 rpc.nfsd 而登入服务器之后,在他可以使用 NFS 服务器提供的文件之前,还会经过文件权限 (就是那个 -rwxrwxrwx 与 owner, group 那几个权限啦)的认证程序!他会去读 NFS 的配置文件 /etc/exports 来比对客户端的权限,当通过这一关之后客户端就可以取得使用 NFS 文件的权限啦!(注:这个也是我们用来管理 NFS 共享之目录的权限与安全设定的地方哩!)

3、rpc.lockd (非必要)

这个玩意儿可以用在管理文件的锁定 (lock) 用途。为何文件需要『锁定』呢?因为既然共享的 NFS 文件可以让客户端使用,那么当多个客户端同时尝试写入某个文件时, 就可能对于该文件造成一些问题啦!这个 rpc.lockd 则可以用来克服这个问题。 但 rpc.lockd 必须要同时在客户端与服务器端都开启才行!此外, rpc.lockd 也常与 rpc.statd 同时启用。

4、rpc.statd (非必要)

可以用来检查文件的一致性,与 rpc.lockd 有关!若发生因为客户端同时使用同一文件造成文件可能有所损毁时, rpc.statd 可以用来检测并尝试回复该文件。与 rpc.lockd 同样的,这个功能必须要在服务器端与客户端都启动才会生效。

NFS Server 端

NFS 服务器的架设步骤

实在很简单:

1、编辑主要配置文件 /etc/exports

2、启动 rpcbind (若已经启动了,就不要重新启动)

3、启动 nfs

你的 NFS 就成功了! 不过这样的设定能否对客户端生效?那就得要考虑你权限方面的设定能力了。

 

RPC 主程序     rpcbind

启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的

NFS主程序      nfs-utils

提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件

NFS 会直接使用到核心功能,所以你的核心必须要有支持 NFS 才行。万一如果你的核心版本小于 2.2 版,或者重新自行编译过核心的话,那么就得要很注意。

配置文件    /etc/exports

主要配置文件

系统并没有默认值,所以这个文件『 不一定会存在』,你可能必须要使用 vim 主动的建立起这个文件

 

[root@www ~]# vim /etc/exports

/tmp                   192.168.100.0/24(ro)      *.ev.ncku.edu.tw(ro,sync)

[共享目录]       [第一部主机(权限)]                  localhost(rw)   [可用主机名]  [可用通配符]

 

# 任何人都可以用我的 /tmp ,用通配符来处理主机名,重点在no_root_squash

/tmp *(rw,no_root_squash)

 

/tmp                            *(rw,no_root_squash)

/home/public   192.168.100.0/24(rw)     *(ro)

# 继续累加在后面,注意,我有将主机与网域分为两段 (用空白隔开) !

 

/tmp                            *(rw,no_root_squash)

/home/public   192.168.100.0/24(rw)     *(ro)

/home/test                192.168.100.10(rw)

 

/tmp                            *(rw,no_root_squash)

/home/public   192.168.100.0/24(rw)     *(ro)

/home/test                192.168.100.10(rw)

/home/linux               *.centos.vbird(rw,all_squash,anonuid=45,anongid=45)

# 如果要开放匿名,那么重点是 all_squash,并且要配合 anonuid !

 

主机后面以小括号 () 设计权限参数, 若权限参数不止一个时,则以逗号 (,) 分开。且主机名与小括号是连在一起的!在这个文件内也可以利用 # 来批注呢。

主机名的设定主要有几个方式:

 可以使用完整的 IP 或者是网域,例如 192.168.100.10 或192.168.100.0/24 ,或 192.168.100.0/255.255.255.0 都可以接受!

 也可以使用主机名,但这个主机名必须要在 /etc/hosts 内,或可使用 DNS找到该名称才行啊!反正重点是可找到 IP 就是

表 /etc/exports配置文件的权限参数

参数值

内容说明

rw

ro

该目录共享的权限是可擦写 (read-write) 或只读(read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

sync

async

sync 代表数据会同步写入到内存与硬盘中, async 则代表数据会先暂存于内存当中,而非直接写入硬盘!

no_root_squash

root_squash

客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由root_squash的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!

all_squash

不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!

anonuid

anongid

anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的/etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID。

                  

日志文件    /var/lib/nfs/*tab

在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的日志文件, 一个是 etab ,主要记录了 NFS 所共享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。

命令  /usr/sbin/exportfs

NFS文件系统维护命令

当重新设定完 /etc/exports 后需不需要重新启动 nfs ? 不需要啦!如果重新启动 nfs 的话,要得再向 RPC 注册!很麻烦~这个时候我们可以透过 exportfs 这个命令来帮忙管理NFS共享文件系统列表

exportfs [-aruv]

选项与参数:

-a :全部挂载(或卸除) /etc/exports 文件内的设定

-r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports

及 /var/lib/nfs/xtab 的内容!

-u :卸除某一目录

-v :在 export 的时候,将共享的目录显示到屏幕上!

 

# 1. 重新挂载一次 /etc/exports 的设定

[root@www ~]# exportfs -arv

 

# 2. 将已经共享的 NFS 目录资源,通通都卸除

[root@www ~]# exportfs -auv

 

命令  /usr/sbin/showmount

客户端查询服务器共享资源的命令

显示关于 NFS 服务器文件系统挂载的信息

showmount [-ae] [hostname|IP]

选项与参数:

-a :显示目前主机与客户端的 NFS 联机共享的状态;

-e :显示某部主机的 /etc/exports 所共享的目录数据。

 

命令  rpcinfo

RPC 服务的注册状况查看命令

rpcinfo -p [IP|hostname]

[root@www ~]# rpcinfo -t|-u IP|hostname 程序名称

选项与参数:

-p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;

-t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;

-u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;

端口

NTP开启了很多port端口,不过主要的端口是:

1、    rpcbind 启动的 port 在 111 ,同时启动在 UDP 与 TCP;

2、    nfs 本身的服务启动在 port 2049 上头!

3、    其他 rpc.* 服务启动的 port 则是随机产生的,因此需向 port 111 注册。

端口文件/etc/sysconfig/nfs

固定特定 NFS 服务的端口

[root@www ~]# vim /etc/sysconfig/nfs

RQUOTAD_PORT=1001            <==约在 13 行左右

LOCKD_TCPPORT=30001         <==约在 21 行左右

LOCKD_UDPPORT=30001        <==约在 23 行左右

MOUNTD_PORT=1002             <==约在 41 行左右

 

NFS client端

客户端的UID与服务器端的UID关系

1、在客户端要以一个例如名为dmtsai的用户名访问NFS服务器端的文件系统,
2、客户端上,dmtsai用户去参照/etc/passwd, /etc/group,
3、客户端上,得到对应的UID(501)、GID(501),
4、到服务器端找对于的UID、GID,
5、服务器端的UID、GID参照回得到用户名
得到的服务器端用户名有这四种可能:
1、恰巧也为dmtsai。dmtsai。此时客户端dmtsai用户以dmtsai的身份访问服务器所提供的共享文件系统。
2、其他的,如vbird。vbird。此时客户端dmtsai用户以vbird的身份访问服务器所提供的共享文件系统。会被乱改!!!
3、UID(501)不存在。匿名者(UID:65534,用户名:nfsnobody)。另一个极端的情况是,在服务器端并没有 501 这个 UID 的存在,则此时 dmtsai的身份在该目录下会被压缩成匿名者。但有时也会有特殊的情况,例如在服务器端共享/tmp的情况下, dmtsain 的身份还是会保持 501 ,但建立的各项数据在服务器端来看,就会属于无属主的资料。
4、root。匿名者(UID:65534,用户名:nfsnobody)。有个比较特殊的使用者,那就是每个 Linux 主机都有的 UID 为 0 的 root。想一想,如果客户端可以用 root 的身份去存取服务器端的文件系统时,那服务器端的数据哪有什么保护性? 所以在预设的情况下, root 的身份会被主动的压缩成为匿名者。
  身份(UID)确认环节,很是容易出错,因此NFS通常需要与NIS(第14章)可以确认客户端与服务器端身份一致的服务搭配使用。

表      mount命令的主要参数

参数

参数代表意义

系统默认值

suid

nosuid

晓得啥是 SUID 吧?如果挂载的 partition 上面有任何 SUID的 binary 程序时, 你只要使用 nosuid 就能够取消 SUID 的功能了!嗄?不知道什么是 SUID ?那就不要学人家架站嘛!@_@! 赶紧回去基础学习篇第三版复习一下第十七章、程序与资源管理啦!

suid

rw

ro

你可以指定该文件系统是只读 (ro) 或可擦写!服务器可以提供给你可擦写, 但是客户端可以仅允许只读的参数设定值!

rw

dev

nodev

是否可以保留装置文件的特殊功能?一般来说只有 /dev 这个目录才会有特殊的装置,因此你可以选择 nodev !

dev

exec

noexec

是否具有执行 binary file 的权限? 如果你想要挂载的仅是数据区 (例如 /home),那么可以选择 noexec 啊!

exec

user

nouser

是否允许用户进行文件的挂载与卸除功能? 如果要保护文件系统,最好不要提供使用者进行挂载与卸除吧!

nouser

auto

noauto

这个 auto 指的是『mount -a』时,会不会被挂载的项目。 如果你不需要这个 partition 随时被挂载,可以设定为 noauto。

auto

                 

表      额外的NFS挂载参数

参数

参数功能

默认参数

fg

bg

当执行挂载时,该挂载的行为会在前景 (fg) 还是在背景(bg) 执行? 若在前景执行时,则 mount 会持续尝试挂载, 直到成功或 time out 为止,若为背景执行, 则 mount 会在背景持续多次进行 mount ,而不会影响到前景的程序操作。 如果你的网络联机有点不稳定,或是服务器常常需要开关机,那建议使用 bg 比较妥当。

fg

soft

hard

如果是 hard 的情况,则当两者之间有任何一部主机脱机,则 RPC 会持续的呼叫,直到对方恢复联机为止。如果是 soft的话,那 RPC 会在 time out 后『重复』呼叫,而非『持续』呼叫, 因此系统的延迟会比较不这么明显。同上,如果你的服务器可能开开关关,建议用 soft !

hard

intr

当你使用上头提到的 hard 方式挂载时,若加上 intr 这个参数, 则当 RPC 持续呼叫中,该次的呼叫是可以被中断的(interrupted)。

rsize

wsize

读出(rsize)与写入(wsize)的区块大小 (block size)。 这个设定值可以影响客户端与服务器端传输数据的缓冲记忆容量。一般来说, 如果在局域网络内 (LAN) ,并且客户端与服务器端都具有足够的内存,那这个值可以设定大一点, 比如说 32768 (bytes) 等,提升缓冲记忆区块将可提升 NFS 文件系统的传输能力! 但要注意设定的值也不要太大,最好是达到网络能够传输的最大值为限。

rsize=1024

wsize=1024

无法挂载的原因分析

1、客户端的主机名或 IP 网段不被允许使用

[root@www ~]# mount -t nfs localhost:/home/test /mnt

mount.nfs: access denied by server while mounting localhost:/home/test

解决办法:确定自己IP无误,则将当前客户端IP加入/etc/exports中。

 

2、服务器或客户端某些服务未启动

[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/test /mnt

mount: mount to NFS server '192.168.100.254' failed: System Error: Connection refused.

# 如果你使用 ping 却发现网络与服务器都是好的,那么这个问题就是

rpcbind 没有开啦!

 

[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/test

/home/nfs

mount: mount to NFS server '192.168.100.254' failed: RPC Error: Program not registered.

# 注意看最后面的数据,确实有连上 RPC ,但是服务器的 RPC 告知我们,该程序无注册

 

(重点)自动挂载 autofs 的使用

举例来说:『当我们在客户端要使用 /home/nfsfile/public 的数据时,此时autofs 才会去 192.168.100.254 服务器上挂载 /home/public !』且『当隔了 5 分钟没有使用该目录下的数据后,则客户端系统将会主动的卸除/home/nfsfile/public 』。

 

1、建立主配置文件 /etc/auto.master ,并指定侦测的特定目录

[root@clientlinux ~]# vim /etc/auto.master

/home/nfsfile /etc/auto.nfs

 

上述数据中比较需要注意的是,那个 /home/nfsfile 目录不需要存在,因为 autofs 会主动的建立该目录! 如果你建立了,可能反而会出问题~因此,先确定一下没有该目录吧!

 

2、建立数据对应文件内/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

# 参数部分,只要最前面加个 - 符号即可!

 

3、启动autofs

[root@clientlinux ~]# /etc/init.d/autofs stop

[root@clientlinux ~]# /etc/init.d/autofs start

转载于:https://www.cnblogs.com/shoubituling/p/11197746.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值