churnd Asked: 2009-06-05 11:41:51 +0800 CST2009-06-05 11:41:51 +0800 CST 2009-06-05 11:41:51 +0800 CST 为 NFS 映射 UID 772 我有一个通过 SMB/CIFS 和 AFP 服务的 Mac OS X 文件服务器。服务器是通过金三角方法的域客户端,但这会导致用户的 UID 非常大。这对我当前的设置来说很好,但我想让 NFS 也能正常工作。显然我需要做一些 UID 映射,但我不确定如何去做。有什么建议吗? nfs mount setuid 4 个回答 Voted Best Answer Kamil Kisiel 2009-07-06T14:42:05+08:002009-07-06T14:42:05+08:00 在大多数 NFSv3 实现中,尤其是内核级服务器,除了一些有限的映射(例如 root 到 nobody)之外,这是不可能的。在 NFS v4 中,您有 rpc.idmapd,它在服务器上执行 NFSv4 ID <-> UID 映射,让您变得更加灵活。 如果您不能使用 NFSv4,推荐的 NFSv3 处理方法是让您的用户来自 LDAP 等目录服务或其他公共数据库。通常,守护进程等的所有系统用户都来自外部,/etc/passwd而所有人类用户都来自外部来源。这将确保统一的 UID 并消除对任何类型映射的需要。 churnd 2009-06-08T10:48:33+08:002009-06-08T10:48:33+08:00 好吧,经过进一步研究,我发现 nfs-user-server 将允许您进行这种映射。这有点令人沮丧,因为我想在 CIFS 上使用 NFS 的主要原因是速度。nfs-user-server 在用户空间中运行,所以它没有 nfs-kernel-server 快。似乎不是最佳解决方案。 Eric Anderson 2011-06-10T10:38:51+08:002011-06-10T10:38:51+08:00 我想补充一点,NFSv4 的 UID 映射方法有一个主要问题(参见 Kamil 的评论):它不适用于AUTH_SYS/AUTH_UNIX身份验证,如果不同的计算机不使用 LDAP 或 Kerberos 或其他一些共享访问权限,这就是你所拥有的控制系统。 问题来了:NFSv4 将在通过网络描述文件所有权时使用文本(即非数字)ID,这正是您想要的,但 RPC 层仍然使用数字 UID 和 GID 值。简单AUTH_SYS的身份验证返回到 RPC,然后你又被卡住了。这是一个看起来像的示例(tshark 捕获客户端->服务器数据包,在服务器端捕获): Frame 26 (306 bytes on wire, 306 bytes captured) ... Remote Procedure Call, Type:Call XID:0x2790a46d ... Credentials Flavor: AUTH_UNIX (1) Length: 48 Stamp: 0x00419c55 Machine Name: localhost.localdomain length: 21 contents: localhost.localdomain fill bytes: opaque data UID: 500 GID: 500 Auxiliary GIDs GID: 500 Verifier Flavor: AUTH_NULL (0) Length: 0 Network File System ... Karl Katzke 2009-06-05T17:12:51+08:002009-06-05T17:12:51+08:00 我还没有在 OSX 上配置它,但是你正在寻找的是 idmapd。在 OSX 机器上,守护进程实际上称为 rpc.idmapd。(注意:不是 imapd。)
在大多数 NFSv3 实现中,尤其是内核级服务器,除了一些有限的映射(例如 root 到 nobody)之外,这是不可能的。在 NFS v4 中,您有 rpc.idmapd,它在服务器上执行 NFSv4 ID <-> UID 映射,让您变得更加灵活。
如果您不能使用 NFSv4,推荐的 NFSv3 处理方法是让您的用户来自 LDAP 等目录服务或其他公共数据库。通常,守护进程等的所有系统用户都来自外部,
/etc/passwd
而所有人类用户都来自外部来源。这将确保统一的 UID 并消除对任何类型映射的需要。好吧,经过进一步研究,我发现 nfs-user-server 将允许您进行这种映射。这有点令人沮丧,因为我想在 CIFS 上使用 NFS 的主要原因是速度。nfs-user-server 在用户空间中运行,所以它没有 nfs-kernel-server 快。似乎不是最佳解决方案。
我想补充一点,NFSv4 的 UID 映射方法有一个主要问题(参见 Kamil 的评论):它不适用于
AUTH_SYS
/AUTH_UNIX
身份验证,如果不同的计算机不使用 LDAP 或 Kerberos 或其他一些共享访问权限,这就是你所拥有的控制系统。问题来了:NFSv4 将在通过网络描述文件所有权时使用文本(即非数字)ID,这正是您想要的,但 RPC 层仍然使用数字 UID 和 GID 值。简单
AUTH_SYS
的身份验证返回到 RPC,然后你又被卡住了。这是一个看起来像的示例(tshark 捕获客户端->服务器数据包,在服务器端捕获):我还没有在 OSX 上配置它,但是你正在寻找的是 idmapd。在 OSX 机器上,守护进程实际上称为 rpc.idmapd。(注意:不是 imapd。)