我正在尝试做什么
我有一个 freeIPA 域名,几个客户端和一个 Synology NAS(也注册了 freeIPA)。
我在 NAS 上创建了一个共享文件夹,支持 NFSv4 + krb5。从客户端,我获取了 LDAP 用户的票证[email protected]
,然后挂载了此文件夹。
最初,在此文件夹中创建的文件归nobody
用户所有。
我终于让它工作了,通过/etc/idmapd.conf
在 NAS 上更改为
- 正确设置域名
[email protected]
和本地用户之间有静态映射
问题
我确实总体上了解前层 NFS 的作用idmapd
。
但在这种情况下:
- 为什么我需要显式映射?它自己不能弄清楚吗?
- 我为什么需要映射?NAS 也位于同一个 freeIPA 域中,是 LDAP 客户端,并且具有正确的 kerberos 主体。它完全知道
[email protected]
是谁,为什么它不能只使用该 uid 来表示该文件夹的文件所有权,而不是本地用户的 uid?我可以避免创建本地用户吗?
我现在的idmapd.conf
样子是这样的:
[General]
Domain=hq.example.com
[Mapping]
Nobody-User=guest
Nobody-Group=users
[Translation]
Method=nsswitch
GSS-Methods=static,synomap
[Static]
[email protected]=user1
我想要实现的是,我不需要静态映射[email protected]=user1
,如果可能的话,我甚至不需要user1
在 NAS 上创建本地用户。
答案1
简而言之,NFSv4 协议依赖于用户姓名在服务器和客户端之间共享,而不是 UID/GID数字s (在早期版本中使用)和 UID <==> 用户名映射在客户端和服务器上实际上可以不同。
作为 NFSv4 协议的一部分,服务器需要将通用安全上下文/权限、所有者和所有者组映射到对本地文件系统操作有意义的内容。该映射由 Linux 系统上的 IDMAPD 完成。
在 Linux 系统上,许多本地文件系统操作都是基于 UID/GID 的,但这些操作需要转换为共享的 NFSv4 上下文,然后才能传输到 NFS 服务器。
或许RFC 3530可以更好地解释:
§ 5.8. 解释所有者和所有者组
建议的属性
"owner"
和"owner_group"
(以及“acl”属性中的用户和组)以 UTF-8 字符串表示。为了避免与客户端或服务器上的特定底层实现绑定的表示,选择了使用 UTF-8 字符串。请注意,[RFC2624] 第 6.1 节提供了额外的理由。预计客户端和服务器将拥有自己的所有者和所有者组的本地表示,用于本地存储或向最终用户呈现。因此,预计当这些属性在客户端和服务器之间传输时,本地表示将转换为以下形式的语法"user@dns_domain"
。这将使不使用相同本地表示的客户端和服务器能够转换为双方都可以解释的通用语法。
编辑响应您的 imapd.conf。
您使用静态映射到本地用户。您可能希望将 NFSv4 身份映射到 LDAP 用户,这可能应该通过选项实现nsswitch
,但显然并非如此。您可以尝试通过增加 NFS 服务器上 idmapd 的详细程度来查看发生了什么。
或者配置 idmapd 以直接查询您的 LDAP 服务器。确切的语法可能取决于您使用的版本,但手册页显示的内容大致如下:
[General]
Verbosity = 0
Domain = domain.org
Local-Realms = DOMAIN.ORG,MY.DOMAIN.ORG,YOUR.DOMAIN.ORG
[Mapping]
Nobody-User = nfsnobody
Nobody-Group = nfsnobody
[Translation]
Method = umich_ldap,nsswitch
GSS-Methods = umich_ldap,static
[Static]
[email protected] = johnny
[UMICH_SCHEMA]
LDAP_server = ldap.domain.org
LDAP_base = dc=org,dc=domain