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

📄 0330nfs.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
		上面仅仅是一个小范例,只是....怎么 anonuid 会是 -2 啊?
		其实那个数值是 65536-2 啦!所以得到 65534 ,比对 /etc/passwd ,
		会发现 CentOS 出现的是 nfsnobody 啦!这个帐号在不同的版本都可能会不一样的!
		另外,<span class=text_import2>如果有其他用户端挂载了你的 NFS 档案系统时,
		那么该用户端与档案系统资讯就会被记录到
		/var/lib/nfs/xtab 里头去的</span>!<br /><br />

		<a name="exportfs"></a>
		另外,如果你想要重新处理 /etc/exports 档案,当重新设定完 /etc/exports 后需不需要重新启动 nfs ?
		不需要啦!如果重新启动 nfs 的话,要得要向 RPC 注册!很麻烦~
		这个时候我们可以透过 exportfs 这个指令来帮忙喔!<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>exportfs [-aruv]</span>
<span class=term_say>参数∶
-a ∶全部挂载(或卸载) /etc/exports 档案内的设定
-r ∶重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports
     及 /var/lib/nfs/xtab 的内容!
-u ∶卸载某一目录
-v ∶在 export 的时候,将分享的目录显示到萤幕上!</span>

<span class=term_hd>范例一∶重新挂载一次 /etc/exports 的设定</span>
[root@linux ~]# <span class=term_command>exportfs -arv</span>
exporting 192.168.0.100:/home/test
exporting 192.168.0.0/24:/home/public
exporting *.linux.org:/home/linux
exporting *:/home/public
exporting *:/tmp

<span class=term_hd>范例二∶全部都卸载</span>
[root@linux ~]# <span class=term_command>exportfs -auv</span>
</pre></td></tr></table>

		要熟悉一下这个指令的用法喔!这样一来,就可以直接重新 exportfs 我们的记录在 /etc/exports 的目录资料棉!
		<br /><br />
	</div>

	<hr /><a NAME="nfsserver_security"></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 的安全性上面,有些地方是你必须要知道的喔!底下我们分别来谈一谈∶<br /><br />

		<li><span class=text_import1>利用 iptables 做大范围连线的限制∶</span><br />
		<div class=block2>
		假设我们的 NFS 主要是针对内部网路开放而已,而对于外部网路只有对成大的学术网路开放,亦即是 
		140.116.0.0/16 ,那么你可以在鸟哥于<a href="0250simple_firewall.php">防火墙与 NAT</a>
		那个章节提供的 iptables.allow 内增加如下的语法∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /usr/local/virus/iptables/iptables.allow</span>
<span class=term_write>iptables -A INPUT -i $EXTIF -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i $EXTIF -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i $EXTIF -p TCP -s 140.116.0.0/16 --dport 111 -j ACCEPT
iptables -A INPUT -i $EXTIF -p UDP -s 140.116.0.0/16 --dport 111 -j ACCEPT</span>
</pre></td></tr></table>

		这样大致上就可以让 192.168.0.0/24 这个 C Class 的网域与 140.116.0.0/16 这个 B Class 
		的网域到您的主机里面来,而其他的连线就视您的原本的 iptables 的状态而定喔!<br /><br />

		那为什么是限制 port 111 而不是每个 RPC server 所开启的埠口呢?
		因为 RPC server 所开启的埠口都是随机产生的,要对他开放实在是...
		而且用户端想要连上 NFS 伺服器之前,都是透过 port 111 来向 NFS 伺服器询问连线的埠口的,
		所以当然先就 port 111 来进行限制棉!^_^<br /><br />
		</div>

		<li><span class=text_import1>利用 TCP Wrappers 限制</span><br />
		<div class=block2>
		但是不同的 RPC 毕竟提供的服务不一样,如果你想要针对某些服务来抵挡的话,
		那可以透过 TCP Wrappers 这个根据 program name 来抵挡网路封包的咚咚棉!
		还记得我们刚刚使用过 <a href="#rpcinfo">rpcinfo</a> 这个指令吧?
		不是会输出很多的 RPC program name 吗?没错!你可以这样做∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/hosts.allow</span>
<span class=term_say># 让来自 140.116.44.0/255.255.255.0 的主机可以使用 mountd</span>
<span class=term_write>mountd: 140.116.44.0/255.255.255.0</span>

[root@linux ~]# <span class=term_command>vi /etc/hosts.deny</span>
<span class=term_say># 让所有人都不能使用 mountd</span>
<span class=term_write>mountd: ALL</span>
</pre></td></tr></table>

		为什么使用的是 mountd 呢?去到前一小节的 rpcinfo 指令处瞧一瞧,
		你就会知道为何需要使用到 mountd 棉!^_^<br /><br />
		</div>

		<li><span class=text_import1>使用 /etc/exports 设定更安全的权限</span><br />
		<div class=block2>
		这就牵涉到您的逻辑思考了!怎么设定都没有关系,但是在『便利』与『安全』之间,要找到您的平衡点呐!善用 
		<span class=text_import2>root_squash 及 all_squash 等功能,再利用 anonuid </span>
		等等的设定来规范登入您主机的使用者身份!应该还是有办法提供一个较为安全的 NFS 主机的!<br /><br />

		另外,当然啦,你的 NFS 伺服器的档案系统之权限设定也需要很留意!
		不要随便设定成为 -rwxrwxrwx ,这样会造成你的系统『很大的困扰』的啊!<br /><br />
		</div>

		<li><span class=text_import1>更安全的 partition 规划∶</span><br />
		<div class=block2>
		如果您的工作环境中,具有多部的 Linux 主机,并且预计彼此分享出目录时,那么在安装 Linux 
		的时候,最好就可以规划出一块 partition 作为预留之用。因为『 
		<span class=text_import2>NFS 可以针对目录来分享</span>』,因此,您可以将预留的 
		partition 挂载在任何一个挂载点,再将该挂载点 (就是目录啦!)由 /etc/exports 
		的设定中分享出去,那么整个工作环境中的其他 Linux 主机就可以使用该 NFS 主机的那块预留的 
		partition 了!所以,在主机的规划上面,主要需要留意的只有 partition 而已。此外,由于分享的 
		partition 可能较容易被入侵,最好可以针对该 partition 设定比较严格的参数在 /etc/fstab 当中喔!<br /><br />
		</div>

		<li><span class=text_import1>NFS 伺服器关机前的注意事项∶</span><br />
		<div class=block2>
		需要注意的是,由于 NFS 使用的这个 RPC 在 client 端连上伺服器时,那么您的伺服器想要关机,
		那可就会成为『不可能的任务』!如果您的 Server 上面还有 Client 在连线,那么您要关机,
		可能得要等到数个钟头才能够正常的关机成功!嗄!真的假的!不相信吗?不然您自个儿试试看!^_^!<br /><br />

		所以棉,建议您的 NFS Server 想要关机之前,能先『关掉 portmap 与 nfs 』这两个东西!
		如果无法正确的将这两个 daemons 关掉,那么先以 netstat -utlp 找出 PID ,然后以 kill 
		将他关掉先!这样才有办法正常的关机成功喔!这个请特别特别的注意呢!<br /><br />

		当然啦,你也可以利用 <a href="#showmount">showmount</a> -a localhost 来查出来那个用户端还在连线?
		或者是查阅 /var/lib/nfs/rmtab 或 xtab 等档案来检查亦可。找到这些用户端后,
		可以直接 call 他们啊!让他们能够帮帮忙先! ^_^<br /><br />

		事实上,用户端以 NFS 连线到伺服器端时,如果他们可以下达一些比较不那么『硬』的挂载参数时,
		就能够减少这方面的问题喔!相关的安全性可以参考下一小节的
		<a href="#nfsclient_mount">用户端可处理的挂载参数与开机挂载</a>。
		</div>
	</div>
</div>


<hr /><a NAME="nfsclient"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">NFS 用户端的设定</span><br />
<div class=block1>
	既然 NFS 伺服器最主要的工作就是分享档案系统给网路上其他的用户端,所以用户端当然得要挂载这个玩意儿棉!
	此外,主机端可以加设防火墙来保护自己的档案系统,那么用户端挂载该档案系统后,难道不需要保护自己?
	呵呵!所以底下我们要来谈一谈几个 NFS 用户端的课题。<br /><br />

	<hr /><a NAME="nfsclient_servermount"></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 伺服器所提供的档案系统呢?基本上,可以这样做∶<br />
		<ol><span class=text_import2>
		<li>确认本地端已经启动了 portmap 服务!
		<li>扫瞄 NFS 伺服器分享的目录有哪些,并了解我们是否可以使用 (<a href="#showmount">showmount</a>);
		<li>在本地端建立预计要挂载的挂载点目录 (mkdir);
		<li>利用 mount 将远端主机直接挂载到相关目录。
		</span></ol>

		好,现在假设用户端在 192.168.0.100 这部机器上,而伺服器是 192.168.0.2 ,
		那么赶紧来检查一下我们是否已经有 portmap 的启动,另外远端主机有什么可用的目录呢!<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>/etc/init.d/portmap start</span>
[root@linux ~]# <span class=term_command>/etc/init.d/nfslock start</span>
<span class=term_say># 一般来说,系统预设会启动 portmap ,不过鸟哥之前关闭过,所以要启动。
# 另外,如果伺服器端有启动 nfslock 的话,用户端也要启动才能生效!</span>

[root@linux ~]# <span class=term_command>showmount -e 192.168.0.2</span>
Export list for 192.168.0.2:
/tmp         *
/home/linux  *.linux.org
/home/public (everyone)   <span class=term_say>&lt;==这是等一下我们要挂载的目录</span>
/home/test   192.168.0.100
</pre></td></tr></table>

		接下来我想要将远端主机的 /home/public 挂载到本地端主机的 /home/nfs/public ,
		所以我就得要在本地端主机先建立起这个挂载点目录才行啊!然后就可以用 mount
		这个指令直接挂载 NFS 的档案系统棉!<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>mkdir -p /home/nfs/public</span>

[root@linux ~]# <span class=term_command>mount -t nfs 192.168.0.2:/home/public /home/nfs/public</span>
<span class=term_say># 注意一下挂载的语法!『 -t nfs 』指定档案系统类型,
# IP:/dir 则是指定某一部主机的某个提供的目录!</span>

[root@linux ~]# <span class=term_command>df</span>
Filesystem    1K-blocks      Used Available Use% Mounted on
<span class=term_say>....中间省略....</span>
<span class=term_write>192.168.0.2:/home/public</span>
               10080512   2135072   7433344  23% <span class=term_write>/home/nfs/public</span>
</pre></td></tr></table>

		先注意一下挂载 NFS 档案的格式范例喔!呵呵!这样就可以将资料挂载进来啦!请注意喔!
		以后,<span class=text_import2>只要您进入您的目录 /home/nfs/public 就等于到了 192.168.0.2 那部远端主机的 
		/home/public 那个目录中棉</span>!很不错吧!至于你在该目录下有什么权限?
		那就请您回去前一小节查一查权限的思考吧! ^_^ !那么如何将挂载的 NFS 目录卸载呢?就使用 umount 啊!<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>umount /home/nfs/public</span>
</pre></td></tr></table>
	</div>

	<hr /><a NAME="nfsclient_mount"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">用户端可处理的挂载参数与开机挂载</span><br />
	<div class=block2>
		瞧!用户端的挂载工作很简单吧!不过不晓得你有没有想过,如果你刚刚挂载到本机 /home/nfs/public 
		的档案系统当中,含有一支 script ,且这支 script 的内容为『 rm -rf / 』且该档案权限为 555 ,
		夭寿~如果你因为好奇给他执行下去,可有的你受的了~因为整个系统都会被杀光光!真可怜!<br /><br />

		所以说,除了 NFS 伺服器需要保护之外,我们取用人家的 NFS 档案系统也需要自我保护才行啊!
		那要如何自我保护啊?可以透过 mount 的指令参数喔!包括底下这些主要的参数可以尝试加入∶<br /><br />

<table width=95% bor

⌨️ 快捷键说明

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