NIS+ 验证依赖主体名(由域名限定的用户名或主机名)和网络名(主体名的安全 RPC 等效名称)来唯一地标识可以进行验证的实体(主体)。尽管 RFC 2307 提供用于存储 NIS+ 验证所用 Diffie-Hellman 密钥的位置,却没有为主体名或网络名指定任何位置。
/var/nis/NIS+LDAPmapping.template 文件可通过从 cred.org_dir 表的属主名称(本身就是主体名称)派生主体和网络名的域部分来解决此问题。因此,如果 NIS+ 域是 x.y.z.,cred.org_dir 表的属主是 aaa.x.y.z.,那么,从 LDAP 数据创建的 NIS+ 项的所有主体名将采用以下形式:
用户或系统 .x.y.z.
网络名采用以下形式:
unix.uid@x.y.z.
unix.nodename@x.y.z.
虽然这种构造主体和网络名的方法可能足以满足大多数 NIS+ 安装要求,但在某些情况下,该方法也会失败,如下所示:
cred.org_dir 表的属主名称不属于由 cred.org_dir 表中的主体和网络名共享的域。对于子域中的 cred.org_dir 表,如果属主是来自父域的主体,可能会出现这种情况。 此问题可通过以下方法之一来解决:
更改 cred.org_dir 表的属主,使其与该表中项的域一致。
更改 cred.org_dir 数据库 ID 的映射规则,以使用某个其他 NIS+ 对象(如果不存在合适的对象,可能会针对此目的专门创建一个)的属主。
例如,如果 sub.dom.ain. 域中的 cred.org_dir 表由 master.dom.ain. 拥有,但是 cred.org_dir.sub.dom.ain. 中的主体和网络名应当属于 sub.dom.ain,则可以按以下方式创建一个链接对象:
# nisln cred.org_dir.sub.dom.ain. \ credname.sub.dom.ain. |
按以下方式将链接对象的属主设置为 sub.dom.ain. 中的相应主体:
# nischown trusted.sub.dom.ain. credname.sub.dom.ain. |
编辑映射文件。将以下内容:
(nis+:zo_owner[]cred.org_dir, "*.%s")), \ |
更改为:
(nis+:zo_owner[]credname.sub.dom.ain., "*.%s")), \ |
请注意,名为 credname 的链接对象仅用于举例说明,可以使用任何有效的对象类型(项对象除外)和对象名称。要点是将对象的属主设置为具有正确的域名。
如果不想将所有权(甚至特殊用途对象的所有权)赋予来自主体和网络名所用域中的主体,请按照以下详细说明来创建 nisplusPrincipalName 和 nisplusNetname 属性。
cred.org_dir 表中包含属于多个域的主体和网络名。
请查阅 LDAP 服务器的文档,并创建 nisplusPrincipalName 和 nisplusNetname 属性以及 nisplusAuthName 对象类。(以下是 ldapadd 的 LDIF 数据。属性和对象类 OID 仅用于说明。)
dn: cn=schema changetype: modify add: attributetypes attributetypes: ( 1.3.6.1.4.1.42.2.27.5.42.42.7.0 NAME 'nisplusPrincipalName' \ DESC 'NIS+ principal name' \ SINGLE-VALUE \ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) |
attributetypes: ( 1.3.6.1.4.1.42.2.27.5.42.42.9.0 NAME 'nisplusNetname' \ DESC 'Secure RPC netname' \ SINGLE-VALUE \ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) dn: cn=schema changetype: modify add: objectclasses objectclasses: ( 1.3.6.1.4.1.42.2.27.5.42.42.10.0 NAME 'nisplusAuthName' \ SUP top AUXILLIARY DESC 'NIS+ authentication identifiers' \ MAY ( nisplusPrincipalName $ nisplusNetname ) ) |
现在,需要启用 cred.org_dir 映射,以便使用新创建的 nisplusNetname 和 nisplusPrincipalName 属性。模板映射文件 /var/nis/NIS+LDAPmapping.template 中包含用于此目的的已取消注释的行。请参见 credlocal、creduser 和 crednode 数据库 ID 的 nisplusObjectDN 和 nisplusLDAPattributeFromColumn/nisplusLDAPcolumnFromAttribute 属性值。在对映射文件进行编辑以获得此效果之后,重新启动 NIS+ 服务。不要忘记编辑 /lib/svc/method/nisplus 文件,以便根据需要包括 -m 和 -Y 选项或者使用 svcprop 命令。有关详细信息,请参见NIS+ 到 LDAP 转换工具和服务管理工具。
# svcadm restart network/rpc/nisplus:default |