⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0330nfs.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
		以 CentOS 4.x 为例的话,要设定好 NFS 伺服器我们必须要有两个套件才行,分别是∶<br />
		<ul><span class=text_import2>
		<li>NFS 主程式∶nfs-utils
		<li>RPC 主程式∶portmap
		</span></ul>

		<li><span class=text_import1>portmap</span><br />
		<div class=block2>
		就如同刚刚提的到,我们的 NFS 其实可以被视为一个 RPC 程式,而要启动任何一个 RPC 程式之前,我们都需要做好 
		port 的对应 (mapping) 的工作才行,这个工作其实就是『 portmap 』这个服务所负责的!也就是说,
		<span class=text_import2>在启动任何一个 RPC server 之前,我们都需要启动 portmap 才行</span>!<br /><br />
		</div>

		<li><span class=text_import1>nfs-utils</span><br />
		<div class=block2>
		就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行档等的套件!这个就是 
		NFS 的主要套件啦!一定要有喔!<br /><br />
		</div>

		好了,知道我们需要这两个套件之后,现在干嘛?赶快去您的系统先用 RPM 看一下有没有这两个套件啦!
		没有的话赶快用 RPM 或 yum 去安装喔!不然就玩不下去了!<br /><br />

<table border=1 width=90% cellspacing=0 cellpadding=5><tr><td>
例题∶<br />请问我的主机是以 RPM 为套件管理的 Linux distribution ,例如 Red Hat, CentOS 与 
SuSE 等版本,那么我要如何知道我的主机里面是否已经安装了 portmap 与 nfs 相关的套件呢?<br />
答∶<ul>
简单的使用 rpm -qa | grep nfs 与 rpm -qa | grep portmap 即可知道啦!如果没有安装的话,
在 CentOS 内可以使用『 <a href="0220upgrade.php#yum">yum</a> install nfs-utils 』来安装!
</ul>
</td></tr></table><br />

	</div>

	<hr /><a NAME="nfsserver_nfs"></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 这个咚咚真的是很简单,上面我们提到的 NFS 套件中,设定档只有一个,执行档也不多,
		记录档也三三两两而已呐!赶紧先来看一看吧! ^_^<br />

		<ul>
		<li><span class=text_import1>/etc/exports</span><br />
		这个档案就是 NFS 的主要设定档了!不过,系统并没有预设值,所以这个档案『
		<span class=text_import2>不一定会存在</span>』,您可能必须要使用 vi 
		主动的建立起这个档案喔!我们等一下要谈的设定也仅只是这个档案而已呐!</li><br />

		<li><span class=text_import1>/usr/sbin/exportfs</span><br />
		这个是维护 NFS 分享资源的指令,我们可以利用这个指令重新分享 /etc/exports 
		变更的目录资源、将 NFS Server 分享的目录卸载或重新分享等等,这个指令是 NFS 
		系统里面相当重要的一个喔!至于指令的用法我们在底下会再介绍。</li><br />

		<li><span class=text_import1>/usr/sbin/showmount</span><br />
		这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 
		则主要用在 Client 端。这个 showmount 可以用来察看 NFS 分享出来的目录资源喔!</li><br />

		<li><span class=text_import1>/var/lib/nfs/*tab</span><br />
		在 NFS 伺服器的登录档都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档,
		一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 
		则记录曾经连结到此 NFS 主机的相关用户端资料。
		</ul>

		就说不难吧!主要就是这几个棉!<br /><br />
	</div>

	<hr /><a NAME="nfsserver_exports"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">/etc/exports 
	设定档的语法与参数</span><br />
	<div class=block2>
		在开始 NFS 伺服器的设定之前,您必须要了解的是,<span class=text_import2>NFS 
		会直接使用到核心功能,所以你的核心必须要有支援 NFS 才行。</span>
		万一如果你的核心版本小于 2.2 版,或者重新自行编译过核心的话,那么就得要很注意啦!
		因为你可能会忘记选择 NFS 的核心支援啊!<br /><br />

		还好,我们 CentOS 或者是其他版本的 Linux ,预设核心通常是支援 NFS 功能的,
		所以你只要确认你的核心版本是目前新的 2.6.x 版,并且使用你的 distribution 所提供的核心,
		那应该就不会有问题啦!<br /><br />

		至于 NFS 伺服器的架设实在很简单,<span class=text_import2>你只要编辑好主要设定档 /etc/exports 之后,
		先启动 portmap ,然后再启动 nfs ,你的 NFS 就成功了!</span>
		不过这样的设定能否对用户端生效?那就得要考虑你权限方面的设定能力了。
		废话少说,我们就直接来看看那个 /etc/exports 应该如何设定吧!
		某些 distributions 并不会主动提供 /etc/exports 档案,所以请您自行手动建立他吧。<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/exports</span>
<span class=term_write>/tmp         192.168.1.0/24(ro)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)</span>
<span class=term_say># [分享目录] [第一部主机(权限)]   [可用主机名]    [可用万用字元]</span>
</pre></td></tr></table>

		您看看,这个设定档有够简单吧!每一行最前面是要分享出来的目录,注意喔!是以目录为单位啊!
		然后这个目录可以依照不同的权限分享给不同的主机,像鸟哥上面的例子说明是∶
		要将 /tmp 分别分享给三个不同的主机或网域的意思。记得主机后面以小括号 () 设计权限参数,
		若权限参数不止一个时,则以逗号 (,) 分开。且主机名与小括号是连在一起的喔!
		在这个档案内也可以利用 # 来注解呢。<br /><br />

		至于主机名称的设定主要有几个方式∶<br />
		<ul><span class=text_import2>
		<li>可以使用完整的 IP 或者是网域,例如 192.168.1.10 或 192.168.1.0/24 ,或
		192.168.1.0/255.255.255.0 都可以接受!<br /><br />
		<li>可以使用主机名称,这个主机名称要在 /etc/hosts 内或使用 DNS 可以被找到才行啊!重点是可找到 IP 
		就是了。如果是主机名称的话,那么他可以支援万用字元,例如 * 或 ? 均可接受。
		</span></ul>

		至于权限方面 (就是小括号内的参数) 常见的参数则有∶<br />
		<ul>
		<li><span class=text_import1>rw</span>∶read-write,可读写的权限;<br /><br />
		<li><span class=text_import1>ro</span>∶read-only,唯读的权限;<br /><br />
		<li><span class=text_import1>sync</span>∶资料同步写入到记忆体与硬碟当中;<br /><br />
		<li><span class=text_import1>async</span>∶资料会先暂存于记忆体当中,而非直接写入硬碟!<br /><br />
		<li><span class=text_import1>no_root_squash</span>∶<br />登入 NFS 主机使用分享目录的使用者,如果是 
		root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!
		<span class=text_import2>这个项目『极不安全』,不建议使用</span>!<br /><br />
		<li><span class=text_import1>root_squash</span>∶<br />在登入 NFS 主机使用分享之目录的使用者如果是 
		root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody(nfsnobody)
		那个系统帐号的身份;<br /><br />
		<li><span class=text_import1>all_squash</span>∶<br />不论登入 NFS 的使用者身份为何,
		他的身份都会被压缩成为匿名使用者,通常也就是 nobody(nfsnobody) 啦!<br /><br />
		<li><span class=text_import1>anonuid</span>∶<br />anon 意指 anonymous (匿名者) 
		前面关于 *_squash 提到的匿名使用者的 UID 
		设定值,通常为 nobody(nfsnobody),但是您可以自行设定这个 UID 的值!当然,这个 UID 
		必需要存在于您的 /etc/passwd 当中!<br /><br />
		<li><span class=text_import1>anongid</span>∶同 anonuid ,但是变成 group ID 就是了!
		</ul>

		这是几个比较常见的权限参数,如果你有兴趣玩其他的参数时,请自行 man exports 可以发现很多有趣的资料。
		接下来我们利用上述的几个参数来实际思考一下几个有趣的小习题∶<br /><br />

		<li><span class=text_import2>思考一∶让 root  保有 root 的权限</span><br />
		<div class=block2>
		我想将 /tmp 分享出去给大家使用,由于这个目录本来就是大家都可以读写的,因此想让所有的人都可以存取。
		此外,我要让 root 写入的档案还是具有 root 的权限,那如何设计设定档?<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/exports</span>
<span class=term_say># 任何人都可以用我的 /tmp ,用万用字元来处理主机名称,重点在 no_root_squash</span>
<span class=term_write>/tmp  *(rw,no_root_squash)</span>
</pre></td></tr></table>

		参考前面的主机名称设定说明,我们可以利用万用字元的。这表示无论来自哪里都可以使用我的 /tmp 这个目录。
		再次提醒,『 *(rw,no_root_squash) 』这一串设定值中间是没有空白字元的喔!而 
		/tmp 与 *(rw,no_root_squash) 则是有空白字元来隔开的!<span class=text_import2>特别注意到那个 
		no_root_squash 的功能</span>!在这个例子中,如果你是用户端,而且您是以 root 的身份登入您的 Linux 
		主机,那么当您 mount 上我这部主机的 /tmp 之后,您在该 mount 的目录当中,将具有『root 的权限!』
		<br /><br />
		</div>

		<li><span class=text_import2>思考二∶同一目录针对不同范围开放不同权限</span><br />
		<div class=block2>
		我要将一个公共的目录 /home/public 公开出去,但是只有限定我的区域网路内 192.168.0.0/24 
		这个网域可以读写,其他人则只能读取∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/exports</span>
<span class=term_write>/tmp          *(rw,no_root_squash)
/home/public  192.168.0.0/24(rw)    *(ro)</span>
<span class=term_say># 继续累加在后面,注意,我有将主机与网域分为两段 (用空白隔开) 喔!</span>
</pre></td></tr></table>

		上面的例子说的是,当我的 IP 是在 192.168.0.0/24 这个网段的时候,那么当我在 Client 端挂载了 
		Server 端的 /home/public 后,针对这个被我挂载的目录我就具有可以读写的权限~
		至于如果我不是在这个网段之内,那么这个目录的资料我就仅能读取而已,亦即为唯读的属性啦!<br /><br />

		需要注意的是,之前鸟哥将主机名称的万用字元与 IP 网段搞错了!
		万用字元仅能用在主机名称的分辨上面,IP 或网段就只能用 192.168.0.0/24 的状况,
		不可以使用 192.168.0.* 喔!<br /><br />
		</div>

		<li><span class=text_import2>思考三∶仅给某个单一主机使用的目录设定</span><br />
		<div class=block2>
		我要将一个私人的目录 /home/test 开放给 192.168.0.100 这个 Client 端的机器来使用,那么我就必需这么写∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/exports</span>
<span class=term_write>/tmp          *(rw,no_root_squash)
/home/public  192.168.0.0/24(rw)    *(ro)
/home/test    192.168.0.100(rw)</span>
<span class=term_say># 只要设定 IP 正确即可!</span>
</pre></td></tr></table>

		这样就设定完成了!而且,只有 192.168.0.100 这部机器才能对 /home/test 这个目录进行存取喔!<br /><br />
		</div>

		<li><span class=text_import2>思考四∶开放匿名登入的情况</span><br />
		<div class=block2>
		我要让 *.linux.org 网域的主机,登入我的 NFS 主机时,可以存取 /home/linux 
		,但是他们存资料的时候,我希望他们的 UID 与 GID 都变成 40 这个身份的使用者,
		假设我 NFS 伺服器上的 UID 40 已经有设定妥当∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/exports</span>
<span class=term_write>/tmp          *(rw,no_root_squash)
/home/public  192.168.0.0/24(rw)    *(ro)
/home/test    192.168.0.100(rw)
/home/linux   *.linux.org(rw,all_squash,anonuid=40,anongid=40)</span>
<span class=term_say># 如果要开放匿名,那么重点是 all_squash,并且要配合 anonuid 喔!</span>
</pre></td></tr></table>

		特别注意到那个 all_squash 与 anonuid, anongid 的功能!如此一来,当 test.linux.org 
		登入这部 NFS 主机,并且在 /home/linux 写入档案时,该档案的所有人与所有群组,就会变成 
		/etc/passwd 里面对应的 UID 为 40 的那个身份的使用者了!<br /><br />
		</div>

		上面四个案例的权限如果依照前一小节的<a href="#What_NFS_perm">存取设定权限</a>来思考的话,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -