为什么挂载相同 NFS 共享的两个系统之间的文件所有权不一致?

为什么挂载相同 NFS 共享的两个系统之间的文件所有权不一致?

我有一台连接到 san 存储的 IBM AIX 服务器 (serverA)。我创建了一个卷组和文件系统(jfs2)并安装到目录 /profit。

之后,我为该目录创建了 NFS 共享并启动了 NFS 守护进程。

在另一台服务器(也是 IBM AIX (serverB))上,我创建了一个挂载点 /profit 并使用以下命令将 nfs 共享从 serverA 挂载到了 serverB: mount 192.168.10.1:/profit /profit

在 serverB 上,我可以访问该目录并列出其中的文件。但奇怪的是,在serverA上,目录和文件都在oracle用户所有权之下。但在 serverB 中,我将他们视为不同的用户。

当我触摸 serverB 上该目录中的文件时,在 serverA 上,我将其视为另一个用户 ID。

有什么线索我可以解决这个问题吗?

以下是来自 serverB 的文件列表

$ ls -l
total 0
-rwxrwxrwx    1 root     system            0 Mar 16 15:00 haha
-rwxrwxrwx    1 radiusd  radiusd           0 Mar 16 15:19 haha2
-rwxrwxrwx    1 radiusd  radiusd           0 Mar 16 15:31 haha3
-rw-r--r--    1 oracle   oinstall          0 Mar 17 2011  hahah3
drwxrwxrwx    2 radiusd  radiusd         256 Mar 16 14:40 lost+found

在 serverA 上,如下所示:

# ls -l /profit
total 0
-rwxrwxrwx    1 root     system            0 Mar 16 15:00 haha
-rwxrwxrwx    1 oracle   dba               0 Mar 16 15:19 haha2
-rwxrwxrwx    1 oracle   dba               0 Mar 16 15:31 haha3
-rw-r--r--    1 10       sshd              0 Mar 17 16:01 hahah3
drwxrwxrwx    2 oracle   dba             256 Mar 16 14:40 lost+found

以下是来自 serverA 的 /etc/exports 文件

# more /etc/exports
/profit -vers=3,sec=sys:krb5p:krb5i:krb5:dh,rw

谢谢。

答案1

请记住,每个 NFS 客户端系统都将通过使用本地系统的本地 UID 查找数字 UID 来确定用户名。/etc/密码,或在您的集中式用户数据库中。 NFS服务器只存储数字格式的UID,不知道用户名。对于组名称与 GID 也是如此。

在您的情况下,serverA 和 serverB 必须在 /etc/passwd 中列出不同的用户名

要对此进行测试,请使用ls -n以数字方式显示用户和组 ID,而不是在长 (-l) 输出中转换为用户或组名称。如果该ls -n选项在 AIX 上不可用,请查阅该功能的联机帮助页。

要查看用户名到 uid 的映射,请在 serverA 和 serverB 上执行以下操作之一。

grep $THEUSERID /etc/passwd

或者,使用 是一个好习惯getent,因为它与 /etc/password 和目录服务(LDAP 等)一起使用:

getent passwd $THEUSERID

两个系统上的 UID 应相同,但用户名会不同。

答案2

您遇到了我所说的 NFS 导出的第一条规则:

切勿将挂载导出为可写到客户端,除非该客户端使用与服务器相同的 UID 映射。

换句话说,文件服务器所有者应该要求所有潜在的 NFS 客户端使用相同的集中式用户数据库(NIS、NIS+、LDAP、Kerberos 等)。

答案3

我也遇到过你的问题并且设法用这个解决它:

事实上,客户端的NEED_IDMAPD文件中没有设置。/etc/default/nfs-common

客户端的设置NEED_IDMAPD=yes也解决了这个问题。现在客户端可以正确显示用户名和组。

相关内容