奇怪NFS问题的幕后黑手─SELinux
前一阵子偶机器的NFS突然出了问题,连在本机上都无法挂载,其中本机IP为192.168.1.60
错误如下:
[root@Lrj-FC ppc]# mount -t nfs 192.168.1.60:/home/lrj/ppc/fs/nfs-root /home/lrj/ppc/mnt/
mount: 192.168.1.60:/home/lrj/ppc/fs/nfs-root failed, reason given by server: 权限 不够
报错相关的log文件内容:
/var/log/messages:
Apr 12 16:50:32 Lrj-FC iiimd[2342]: status has not been enabled yet. (1, 3)
Apr 12 16:50:50 Lrj-FC rpc.mountd: authenticated mount request from Lrj-FCnet:826 for /home/lrj/ppc/fs/nfs-root (/home/lrj/ppc/fs/nfs-root)
Apr 12 16:50:50 Lrj-FC rpc.mountd: can't stat exported dir /home/lrj/ppc/fs/nfs-root: Permission denied
-------------------------------------------------------------------------------
下面是我的NFS相关设置:
/etc/exports:
/home/lrj/ppc/fs/nfs-root 192.168.1.60(rw,no_root_squash)
/home/lrj/ppc/fs/nfs-root 192.168.1.62(rw,no_root_squash)
/etc/hosts:
192.168.1.62 PPC405EP ppc
127.0.0.1 Lrj-FC localhost.localdomain localhost
192.168.1.60 Lrj-FCnet localnet
/etc/hosts.allow:
portmap: 192.168.1.60/255.255.255.0
portmap: 192.168.1.62/255.255.255.0
lockd: ALL
mountd: ALL
rquatad: ALL
statd: ALL
/etc/hosts.deny: 空
---------------------------------------------------------------------
相关服务的情况:
[lrj@Lrj-FC ppc]$ showmount -e
Export list for Lrj-FC:
/home/lrj/ppc/fs/nfs-root Lrj-FC,PPC405EP,Lrj-FCnet
[lrj@Lrj-FC ppc]$ rpcinfo -p
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 32770 status
100024 1 tcp 32769 status
100011 1 udp 776 rquotad
100011 2 udp 776 rquotad
100011 1 tcp 779 rquotad
100011 2 tcp 779 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 udp 32771 nlockmgr
100021 3 udp 32771 nlockmgr
100021 4 udp 32771 nlockmgr
100021 1 tcp 32770 nlockmgr
100021 3 tcp 32770 nlockmgr
100021 4 tcp 32770 nlockmgr
100005 1 udp 789 mountd
100005 1 tcp 792 mountd
100005 2 udp 789 mountd
100005 2 tcp 792 mountd
100005 3 udp 789 mountd
100005 3 tcp 792 mountd
------------------------------------------------
软件版本:
[lrjt@Lrj-FC ppc]$ rpm -q nfs-utils
nfs-utils-1.0.7-8
[lrj@Lrj-FC ppc]$ uname -r
2.6.11-1.1369_FC4smp
防火墙已经禁用
-------------------------------------------------
就在偶已经无奈放弃了的时候,由于要从Suse多给FC划一些磁盘空间,索性将FC重装了一次,结果。。。完全一样的设置,NFS就好了。
那么,为什么会有如此诡异的情况呢?难道FC也被M$传染了,成了一个“不行重启,重装万岁”的恶心系统?我想啊想啊,查啊查啊,结果终于查到了那个罪魁祸首──SELinux!这个东东相信用过RH系列系统的人都见过,在安装时有这个单独的选项,老版本默认不开启,而新的则是默认开启(其它发行版就不清楚了。。。)。google了一下,它抛弃了传统的“文件所有者就是天”的DAC权限机制,而是采用MAC机制,再加上一层的权限管理,强行进行进程级的权限控制,就是它阻止了nfs要用的的rpc.mountd服务进程,而导致了“Permission Denied”的错误。──不过,为什么不把这个真正的错误原因写入syslog?!害偶白忙了一阵子。。。
看了一些关于SELinux的资料,感觉确实是一个不错的安全解决方案,只不过,对于我这种对安全要求不高,又经常做底层开发的人来说,那玩意儿就太麻烦了。还是不用的好。