我写了一个Nagios检查,它应该检查服务器将文件写入其中一个挂载的时间。 该检查由用户nagios运行。
NFS服务器configuration如下:
[root@ny4aftp2 ~]# tail /etc/exports /proxy_logs *(rw,insecure,insecure_locks,no_subtree_check,async) /sync_logs *(rw,insecure,insecure_locks,no_subtree_check,async) [root@ny4aftp2 ~]# ls -ld /sync_logs/ drwxrwxr-x 3 peeradmin peeradmin 4096 Dec 10 10:14 /sync_logs/ [root@ny4aftp2 ~]#
这是检查脚本运行的命令:
dd if=/dev/zero of=/$MOUNTPOINT/`hostname`.dat bs=1024 count=102
客户端configuration如下:
[root@ny4aproxy11 ~]# grep sync /etc/fstab IP:/sync_logs /sync_logs nfs intr,noatime 0 0
当nagios用户运行检查时,即使用户nagios在两台计算机上configuration相同,当dd命令尝试将.dat文件写入nfs share /sync_logs时,它也会得到一个“Permission denided”错误:
服务器:
[root@ny4aftp2 ~]# id nagios uid=498(nagios) gid=498(nagios) groups=498(nagios),500(peeradmin)
客户:
[root@ny4aproxy11 ~]# id nagios uid=498(nagios) gid=498(nagios) groups=498(nagios),500(peeradmin)
而nagios用户是/sync_logs目录的所有者peeradmin组的成员。
NFS服务器上的/sync_logs :
[root@ny4aftp2 ~]# ls -ld /sync_logs/ drwxrwxr-x 3 peeradmin peeradmin 4096 Dec 10 10:20 /sync_logs/
NFS客户端上的/sync_logs :
[root@ny4aproxy11 ~]# ls -ld /sync_logs/ drwxrwxr-x 3 peeradmin peeradmin 4096 Dec 10 10:20 /sync_logs/
我不希望chmod o+w /sync_logs ,我更喜欢修复它应该是这样的…就像nagios用户将获得从peeradmin组成员的事实,这将允许nagios用户写入/sync_logs目录。
怎么做,我做错了什么?
编辑#1:
IP:/sync_logs on /sync_logs type nfs (rw,noatime,intr,vers=4,addr=SERVER_IP,clientaddr=CLIENT_IP)
提前致谢
根据目前的评论:
这意味着问题很可能是NFSv4帐号处理和idmapd 。 NFSv3中发生的事情是,您的客户端会告诉服务器您使用的是什么UID和GID。
在NFSv4中发生的是他们使用用户名和使用idmapd来回映射。 这意味着您不再需要在身份validation领域拥有相同的UID和GID。
但是这里有个idmapd – idmapd需要能够来回映射。 它将发送user@domain (等效)而不是数字UID / GID。
所以检查你的/etc/idmapd.conf 。 同时检查您的客户端和主机上的域名是否匹配。 您正在寻找idmapd.conf中的domainname – 如果没有设置,它将默认为您的服务器/客户端报告中的任何domainname命令。
切换到NFSv3可能是一个解决方法(和validation),但可能不是一个好主意 – NFSv4比v3有一些很好的增强function,并且由于auth问题而closures它并不理想。