📄 0330nfs.htm
字号:
那么权限会是什么情况呢?让我们来检查一下∶<br /><br />
<li><span class=text_import2>用户端与主机端具有相同的 UID 与帐号∶</span><br />
<div class=block2>
假设我在 192.168.0.100 登入这部 NFS (IP 假设为 192.168.0.2) 主机,并且我在
192.168.0.100 的帐号为 dmtsai 这个身份,同时,在这部 NFS 上面也有 dmtsai 这个帐号,
并具有相同的 UID ,果真如此的话,那么∶<br />
<ol>
<li>由于 192.168.0.2 这部 NFS 主机的 /tmp 权限为 -rwxrwxrwt ,所以我 (dmtsai 在 192.168.0.100 上面)
在 /tmp 底下具有存取的权限,并且写入的档案所有人为 dmtsai ;
<li>在 /home/public 当中,由于我有读写的权限,所以如果在 /home/public 这个目录的权限对于 dmtsai
有开放写入的话,那么我就可以读写,并且我写入的档案所有人是 dmtsai 。但是万一
/home/public 对于 dmtsai 这个使用者并没有开放可以写入的权限时,
那么我还是没有办法写入档案喔!这点请特别留意!
<li>在 /home/test 当中,我的权限与 /home/public 相同的状态!还需要 NFS 主机的 /home/test 对于
dmtsai 有开放权限;
<li>在 /home/linux 当中就比较麻烦!因为不论您是何种 user ,您的身份一定会被变成 UID=40
这个帐号!所以,这个目录就必需要针对 UID = 40 的那个帐号名称,修改他的权限才行!
</ol>
</div>
<li><span class=text_import2>用户端与主机端的帐号并未相同时∶</span><br />
<div class=block2>
假如我在 192.168.0.100 的身份为 vbird ,但是 192.168.0.2 这部 NFS 主机却没有 vbird
这个帐号时,情况会变成怎样呢?<br />
<ol>
<li>我在 /tmp 底下还是可以写入,但是写入的档案所有人变成 nobody 了;
<li>我在 /home/public 里面是否可以写入,还需要视 /home/public 的权限而定,不过,反正我的身份就被变成
nobody 了就是;
<li>/home/test 的观点与 /home/public 相同!
<li>/home/linux 底下,我的身份就被变成 UID = 40 那个使用者就是了!
</ol>
</div>
<li><span class=text_import2>当用户端的身份为 root 时∶</span><br />
<div class=block2>
假如我在 192.168.0.100 的身份为 root 呢? root 这个帐号每个系统都会有呀!权限变成怎样呢?<br />
<ol>
<li>我在 /tmp 里面可以写入,并且由于 no_root_squash 的参数,改变了预设的
root_squash 设定值,所以在 /tmp 写入的档案所有人为 root 喔!
<li>我在 /home/public 底下的身份还是被压缩成为 nobody 了!因为预设属性里面都具有
root_squash 呢!所以,如果 /home/public 有针对 nobody
开放写入权限时,那么我就可以写入,但是档案所有人变成 nobody 就是了!
<li>/home/test 与 /home/public 相同;
<li>/home/linux 的情况中,我 root 的身份也被压缩成为 UID = 40 的那个使用者了!
</ol>
</div>
这样的权限讲解之后,您可以了解了吗?这里是最重要的地方,如果这一关通过了,底下的咚咚就没有问题啦! ^_^!
当然啦,您还是得要回到前一小节<a href="#What_NFS_perm">NFS 的档案存取权限</a>好好的瞧一瞧,
才能解决 NFS 的问题喔!<br >
</div>
<hr /><a NAME="nfsserver_startup"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">启动 NFS</span><br />
<div class=block2>
设定档搞定后,当然要开始来启动才行啊!而前面我们也提到过,NFS 的启动还需要 portmap 的协助才行啊!
所以赶紧来启动吧!<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>/etc/init.d/portmap start</span>
<span class=term_say># 如果 portmap 本来就已经在执行了,那就不需要启动啊!</span>
[root@linux ~]# <span class=term_command>/etc/init.d/nfs start</span>
<span class=term_say># 有时候可能会出现如下的警告讯息∶</span>
exportfs: /etc/exports [3]: No 'sync' or 'async' option specified
for export "192.168.0.100:/home/test".
Assuming default behaviour ('sync').
<span class=term_say># 上面的警告讯息仅是在告知因为我们没有指定 sync 或 async 的参数,
# 则 NFS 将预设会使用 sync 的资讯而已。你可以不理他,也可以加入 /etc/exports。</span>
[root@linux ~]# <span class=term_command>vi /etc/exports</span>
<span class=term_write>/tmp *(rw,no_root_squash,sync)
/home/public 192.168.0.0/24(rw,sync) *(ro,sync)
/home/test 192.168.0.100(rw,sync)
/home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40,sync)</span>
[root@linux ~]# <span class=term_command>/etc/init.d/nfs restart</span>
</pre></td></tr></table>
那个 portmap 根本就不需要设定!只要直接启动他就可以啦!<span class=text_import2>启动之后,会出现一个
port 111 的 sunrpc 的服务,那就是 portmap 啦</span>!至于 nfs 则会启动至少两个以上的 daemon
出现!然后就开始在监听 Client 端的需求啦!你必须要很注意萤幕上面的输出资讯,
因为如果设定档写错的话,萤幕上会显示出错误的地方喔!<br /><br />
此外,如果你想要增加一些 NFS
伺服器的资料一致性功能时,可能需要用到 rpc.lockd 及 rpc.statd 等 RPC 服务,
那么或许你可以增加一个服务,那就是 nfslock<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>/etc/init.d/nfslock start</span>
</pre></td></tr></table>
启动之后,请赶快到 /var/log/messages 里面看看有没有被正确的启动呢?<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /var/log/messages</span>
Sep 22 00:01:37 linux nfs: Starting NFS services: succeeded
Sep 22 00:01:37 linux nfs: rpc.rquotad startup succeeded
Sep 22 00:01:37 linux nfsd[1050]: nfssvc_versbits: +2 +3 +4
Sep 22 00:01:37 linux nfs: rpc.nfsd startup succeeded
Sep 22 00:01:37 linux nfs: rpc.mountd startup succeeded
Sep 22 00:01:37 linux rpcidmapd: rpc.idmapd -SIGHUP succeeded
</pre></td></tr></table>
在确认没有问题之后,接下来我们来瞧一瞧那么 NFS 到底开了哪些埠口?<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>netstat -ultn</span>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:803 0.0.0.0:* LISTEN 1047/rpc.rquotad
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 32503/portmap
tcp 0 0 0.0.0.0:819 0.0.0.0:* LISTEN 1064/rpc.mountd
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
udp 0 0 0.0.0.0:800 0.0.0.0:* 1047/rpc.rquotad
udp 0 0 0.0.0.0:816 0.0.0.0:* 1064/rpc.mountd
udp 0 0 0.0.0.0:111 0.0.0.0:* 32503/portmap
</pre></td></tr></table>
注意看到上面喔!总共产生了好多的 port 喔!真是可怕!不过主要的埠口是∶<br />
<ul><span class=text_import2>
<li>portmap 启动的 port 在 111;
<li>NFS 启动的 port 在 2049;
<li>其他 rpc.daemons 启动的 port 则是随机产生的,因此需向 port 111 注册。
</span></ul>
<a name="rpcinfo"></a>好了,那我怎么知道每个 RPC 服务的注册状况?没关系,你可以使用 rpcinfo 来处理的。<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>rpcinfo [-p] [IP|hostname]</span>
<span class=term_say>参数∶
-p ∶显示出所有的 port 与 porgram 的资讯;</span>
<span class=term_hd>范例一∶显示出目前这部主机的 RPC 状态</span>
[root@linux ~]# <span class=term_command>rpcinfo -p localhost</span>
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100011 1 udp 800 rquotad
100011 2 udp 800 rquotad
100011 1 tcp 803 rquotad
100011 2 tcp 803 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100005 1 udp 816 mountd
100005 1 tcp 819 mountd
100005 2 udp 816 mountd
100005 2 tcp 819 mountd
100005 3 udp 816 mountd
100005 3 tcp 819 mountd
<span class=term_say># NFS版本 埠口 服务名称</span>
</pre></td></tr></table>
仔细瞧瞧,上面出现的资讯当中除了程式名称与埠口的对应可以与 netstat -tlunp
输出的结果作比对之外,还需要注意到 NFS 的版本支援!新的 NFS 版本传输速度较快,
由上表看起来,我们的 NFS 至少支援到第 3 版,应该还算合理啦! ^_^!
如果你的 rpcinfo 无法输出,那就表示注册的资料有问题啦!可能需要重新启动
portmap 与 nfs 喔!<br /><br />
</div>
<hr /><a NAME="nfsserver_look"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">NFS 的连线观察</span><br />
<div class=block2>
在你的 NFS 伺服器设定妥当之后,我们可以先自我测试一下是否可以连线喔!
就是利用 showmount 这个指令来查阅!<br />
<a name="showmount"></a>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>showmount [-ae] [hostname|IP]</span>
<span class=term_say>参数∶
-a ∶显示目前主机与用户端的 NFS 连线分享的状态;
-e ∶显示某部主机的 /etc/exports 所分享的目录资料。</span>
<span class=term_hd>范例一∶请显示出刚刚我们所设定好的相关 exports 资讯</span>
[root@linux ~]# <span class=term_command>showmount -e localhost</span>
Export list for localhost:
/tmp *
/home/linux *.linux.org
/home/public (everyone)
/home/test 192.168.0.100
</pre></td></tr></table>
很简单吧!所以,当您要扫瞄某一部主机他提供的 NFS 分享的目录时,就使用 showmount -e
IP (或hostname) 即可!非常的方便吧!这也是 NFS client 端最常用的指令喔!<br /><br />
<a name="etab"></a>
事实上 NFS 关于目录权限设定的资料非常之多!我们可以检查一下 /var/lib/nfs/etab 就知道了!<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>tail /var/lib/nfs/etab</span>
/home/public *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,
subtree_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
<span class=term_say># 上面是同一行,可以看出除了 ro, sync, root_squash 等等,
# 其实还有 anonuid 及 anongid 等等的设定!</span>
/tmp *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,subtr
ee_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
<span class=term_say># 同样的,在 /tmp 也有很多的权限相关的参数喔!</span>
</pre></td></tr></table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -