我编写了一个 Nagios 检查程序,用于检查服务器将文件写入其某个挂载点所需的时间。该检查由用户 nagios 运行。
NFS 服务器配置如下:
[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
客户端配置如下:
[root@ny4aproxy11 ~]# grep sync /etc/fstab
IP:/sync_logs /sync_logs nfs intr,noatime 0 0
当 nagios 用户运行检查时,如果命令dd
尝试将.dat
文件写入 nfs 共享,则会出现“权限被拒绝”错误/sync_logs
,即使nagios
两台机器上的用户配置相同:
服务器:
[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用户是peeradmin组的成员,该组是/sync_logs
目录的所有者。
/sync_logs
在 NFS 服务器上:
[root@ny4aftp2 ~]# ls -ld /sync_logs/
drwxrwxr-x 3 peeradmin peeradmin 4096 Dec 10 10:20 /sync_logs/
/sync_logs
在 NFS 客户端上:
[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)
提前致谢
答案1
根据迄今为止的评论:
- 您的挂载适用于 NFSv3,但不适用于 NFSv3。
- 您正在使用本地帐户。
这意味着问题很可能出在 NFSv4 帐户处理和 上idmapd
。在 NFSv3 中,您的客户端会告诉服务器您正在使用的 UID 和 GID。
NFSv4 中的情况是他们使用用户名并用于idmapd
来回映射。这意味着您不再需要在身份验证领域中拥有相同的 UID 和 GID。
但这里有个问题 -idmapd
需要能够进行来回映射。它将发送user@domain
(等效)而不是数字 UID/GID。
因此,请检查您的/etc/idmapd.conf
。还请检查客户端和主机上的域名是否匹配。您要查找的domainname
-idmapd.conf
如果未设置,它将默认为domainname
服务器/客户端上的命令报告的任何内容。
切换到 NFSv3 可能是一种解决方法(和验证),但可能不是一个好主意 - NFSv4 相对于 v3 有一些不错的增强功能,而由于身份验证问题而关闭它们并不理想。