我有一个通过SMB / CIFS和AFP服务的Mac OS X文件服务器。 服务器是通过金三angular方法的域客户端,但是这会为用户带来非常大的UID。 这对我目前的设置来说很好,但是我想要使NFS工作。 显然我需要做一些UID映射,但我不知道如何去做这件事。 有什么build议?
在大多数NFSv3实现中,尤其是内核级别的服务器,除了root和nobody之外,这是不可能的。 在NFS v4中,您有rpc.idmapd,它在服务器上执行NFSv4 ID < – > UID映射,并允许您获得更多的灵活性。
如果您不能使用NFSv4,则推荐使用NFSv3处理它的方法是让您的用户来自目录服务,例如LDAP或其他常用数据库。 守护进程等所有系统用户通常来自/etc/passwd而所有人类用户来自外部来源。 这将确保一致的UID,并消除任何types的映射的需要。
那么经过进一步的研究,我发现nfs-user-server会允许你做这种映射。 这是一个无趣的,因为我想通过CIFS使用NFS的主要原因是速度。 nfs-user-server在用户空间运行,因此速度不及nfs-kernel-server。 似乎不是一个最佳的解决scheme。
我想补充说的是,NFSv4的UID映射方法有一个主要的问题(见Kamil的评论):它不适用于AUTH_SYS / AUTH_UNIX身份validation,如果不同的计算机不使用LDAP或Kerberos或其他共享访问控制系统。
以下是ruby:在描述文件所有权时,NFSv4会使用文本(即非数字)ID,这就是你想要的,但RPC层仍然使用数字UID和GID值。 简单的AUTH_SYSauthentication会返回到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 ...
我没有在OSX上configuration它,但是你正在寻找的是所谓的idmapd。 在OSX框中,守护进程实际上被称为rpc.idmapd。 (注:不是imapd。)