在 NFS 的安全性上面,有些地方是你必须要知道的喔!底下我们分别来谈一谈:
防火墙的设定问题与解决方案:
一般来说, NFS 的服务仅会对内部网域开放,不会对因特网开放的。然而,如果你有特殊需求的话,
那么也可能会跨不同网域就是了。但是,NFS 的防火墙特别难搞,为什么呢?因为除了固定的 port 111, 2049 之外,
还有很多不固定的埠口是由 rpc.mountd, rpc.rquotad 等服务所开启的,所以,你的 iptables 就很难设定规则!
那怎办?难道整个防火墙机制都要取消才可以?
为了解决这个问题, CentOS 6.x 有提供一个固定特定 NFS 服务的埠口配置文件,那就是 /etc/sysconfig/nfs 啦!
你在这个档案里面就能够指定特定的埠口,这样每次启动 nfs 时,相关服务启动的埠口就会固定,如此一来,
我们就能够设定正确的防火墙啰!这个配置文件内容很多,绝大部分的数据你都不要去更改,只要改跟 PORT 这个关键词有关的数据即可。
那么需要更改的 rpc 服务有哪些呢?主要有 mountd, rquotad, nlockmgr 这三个,所以你应该要这样改:
[root@www ~]# vim /etc/sysconfig/nfs
RQUOTAD_PORT=1001 <==约在 13 行左右
LOCKD_TCPPORT=30001 <==约在 21 行左右
LOCKD_UDPPORT=30001 <==约在 23 行左右
MOUNTD_PORT=1002 <==约在 41 行左右
# 记得设定值最左边的批注服务要拿掉之外,埠口的值你也可以自行决定。
[root@www ~]# /etc/init.d/nfs restart
[root@www ~]# rpcinfo -p | grep -E '(rquota|mount|nlock)'
100011 2 udp 1001 rquotad
100011 2 tcp 1001 rquotad
100021 4 udp 30001 nlockmgr
100021 4 tcp 30001 nlockmgr
100005 3 udp 1002 mountd
100005 3 tcp 1002 mountd
# 上述的输出数据已经被鸟哥汇整过了,没用到的埠口先挪掉了啦!
很可怕吧!如果想要开放 NFS 给别的网域的朋友使用,又不想要让对方拥有其他服务的登入功能,
那你的防火墙就得要开放上述的十个埠口啦!有够麻烦的~假设你想要开放 120.114.140.0/24 这个网域的人能够使用你这部服务器的
NFS 的资源,且假设你已经使用第九章提供的防火墙脚本,
那么你还得要这样做才能够针对该网域放行喔:
[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -p tcp -s 120.114.140.0/24 -m multiport \
--dport 111,2049,1001,1002,30001 -j ACCEPT
iptables -A INPUT -i $EXTIF -p udp -s 120.114.140.0/24 -m multiport \
--dport 111,2049,1001,1002,30001 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
# 总是要重新执行这样防火墙规则才会顺利的生效啊!别忘记!别忘记!
使用 /etc/exports 设定更安全的权限:
这就牵涉到你的逻辑思考了!怎么设定都没有关系,但是在『便利』与『安全』之间,要找到你的平衡点吶!善用
root_squash 及 all_squash 等功能,再利用 anonuid
等等的设定来规范登入你主机的用户身份!应该还是有办法提供一个较为安全的 NFS 服务器的!
另外,当然啦,你的 NFS 服务器的文件系统之权限设定也需要很留意!
不要随便设定成为 -rwxrwxrwx ,这样会造成你的系统『很大的困扰』的啊!
更安全的 partition 规划:
如果你的工作环境中,具有多部的 Linux 主机,并且预计彼此分享出目录时,那么在安装 Linux
的时候,最好就可以规划出一块 partition 作为预留之用。因为『
NFS 可以针对目录来分享』,因此,你可以将预留的
partition 挂载在任何一个挂载点,再将该挂载点 (就是目录啦!)由 /etc/exports
的设定中分享出去,那么整个工作环境中的其他 Linux 主机就可以使用该 NFS 服务器的那块预留的
partition 了!所以,在主机的规划上面,主要需要留意的只有 partition 而已。此外,由于分享的
partition 可能较容易被入侵,最好可以针对该 partition 设定比较严格的参数在 /etc/fstab 当中喔!
此外,如果你的分割做的不够好,举例来说,很多人都喜欢使用懒人分割法,亦即整个系统中只有一个根目录的 partition
而已。这样做会有什么问题呢?假设你分享的是 /home 这个给一般用户的目录好了,有些用户觉得这个 NFS 的磁盘太好用了,
结果使用者就将他的一大堆暂存数据通通塞进这个 NFS 磁盘中。想一想,如果整个根目录就因为这个 /home 被塞爆了,
那么你的系统将会造成无法读写的困扰。因此,一个良好的分割规划,或者是利用磁盘配额来限制还是很重要的工作。
NFS 服务器关机前的注意事项:
需要注意的是,由于 NFS 使用的这个 RPC 服务,当客户端连上服务器时,那么你的服务器想要关机,
那可就会成为『不可能的任务』!如果你的服务器上面还有客户端在联机,那么你要关机,
可能得要等到数个钟头才能够正常的关机成功!嗄!真的假的!不相信吗?不然你自个儿试试看!^_^!
所以啰,建议你的 NFS Server 想要关机之前,能先『关掉 rpcbind 与 nfs 』这两个东西!
如果无法正确的将这两个 daemons 关掉,那么先以 netstat -utlp 找出 PID ,然后以 kill
将他关掉先!这样才有办法正常的关机成功喔!这个请特别特别的注意呢!
当然啦,你也可以利用 showmount -a localhost 来查出来那个客户端还在联机?
或者是查阅 /var/lib/nfs/rmtab 或 xtab 等档案来检查亦可。找到这些客户端后,
可以直接 call 他们啊!让他们能够帮帮忙先! ^_^
事实上,客户端以 NFS 联机到服务器端时,如果他们可以下达一些比较不那么『硬』的挂载参数时,
就能够减少这方面的问题喔!相关的安全性可以参考下一小节的
客户端可处理的挂载参数与开机挂载。