NFS:如何允许特定用户在 NFS 挂载中写入?

NFS:如何允许特定用户在 NFS 挂载中写入?

我编写了一个 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 有一些不错的增强功能,而由于身份验证问题而关闭它们并不理想。

相关内容