我有一台连接到 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
也解决了这个问题。现在客户端可以正确显示用户名和组。