如果 NIS+ 表项是从 LDAP 数据创建的,则缺省行为是使用项对象所在表对象中的属主、组、访问权限和 TTL 来初始化项对象的相应值。这通常是足够的,但也可能会存在必须单独设置这些 NIS+ 项属性的情况。例如,当站点不使用 rpc.nispasswdd(1M) 守护进程时。为了允许个别用户更改其 NIS+ 口令(并重新加密存储在 cred.org_dir 表中的 Diffie-Hellman 密钥),该用户应当拥有自己的 passwd.org_dir 和 cred.org_dir 项,而且对这些项必须拥有与项属主相同的修改权限。
如果您需要将一个或多个 NIS+ 表中表项的属主、组、访问权限或 TTL 存储在 LDAP 中,则需要执行以下操作。
请查阅 LDAP 服务器文档,并新建下列属性和对象类。(LDIF 数据适用于 ldapadd。属性和对象类 OID 仅用于说明。)
dn: cn=schema changetype: modify add: attributetypes attributetypes: ( 1.3.6.1.4.1.42.2.27.5.42.42.4.0 NAME 'nisplusEntryOwner' \ DESC 'Opaque representation of NIS+ entry owner' \ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) attributetypes: ( 1.3.6.1.4.1.42.2.27.5.42.42.4.1 NAME 'nisplusEntryGroup' \ DESC 'Opaque representation of NIS+ entry group' \ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) attributetypes: ( 1.3.6.1.4.1.42.2.27.5.42.42.4.2 NAME 'nisplusEntryAccess' \ DESC 'Opaque representation of NIS+ entry access' \ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) attributetypes: ( 1.3.6.1.4.1.42.2.27.5.42.42.4.3 NAME 'nisplusEntryTtl' \ DESC 'Opaque representation of NIS+ entry TTL' \ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) |
dn: cn=schema changetype: modify add: objectclasses |
objectclasses:(1.3.6.1.4.1.42.2.27.5.42.42.5.0 NAME 'nisplusEntryData'\ SUP top STRUCTURAL DESC 'NIS+ entry object non-column data'\ |
MUST ( cn ) MAY ( nisplusEntryOwner $ nisplusEntryGroup $\ nisplusEntryAccess $ nisplusEntryTtl ) ) |
修改相关表的 nisplusLDAPobjectDN 属性值,以使写入部分包括新创建的 nisplusEntryData 对象类。
例如,对于 passwd.org_dir 表,假定使用的是基于 /var/nis/NIS+LDAPmapping.template 的映射文件,并按以下方式进行编辑:
nisplusLDAPobjectDN passwd:ou=People,?one?objectClass=shadowAccount,\ objectClass=posixAccount:\ ou=People,?one?objectClass=shadowAccount,\ objectClass=posixAccount,\ objectClass=account,objectClass=top |
按如下方式编辑属性值:
nisplusLDAPobjectDN passwd:ou=People,?one?objectClass=shadowAccount,\ objectClass=posixAccount:\ ou=People,?one?objectClass=shadowAccount,\ objectClass=posixAccount,\ objectClass=nisplusEntryData,\ objectClass=account,objectClass=top |
编辑 nisplusLDAPattributeFromColumn 和 nisplusLDAPcolumnFromAttribute 属性值,以指定所需的属主、组、访问权限或 TTL 的任何子集。
在步骤 2 中,创建了用于存储这些值的 LDAP 属性。对于 NIS+,存在几个名称分别为 zo_owner、zo_group、zo_access 和 zo_ttl 的预定义伪列。例如,为了将 passwd.org_dir 项的属主、组和访问权限存储在 LDAP 中,请修改以下内容中的 nisplusLDAPattributeFromColumn 值:
nisplusLDAPattributeFromColumn \ passwd: dn=("uid=%s,", name), \ cn=name, \ uid=name, \ userPassword=("{crypt$}%s", passwd), \ uidNumber=uid, \ gidNumber=gid, \ gecos=gcos, \ homeDirectory=home, \ loginShell=shell, \ (shadowLastChange,shadowMin,shadowMax, \ shadowWarning, shadowInactive,shadowExpire)=\ (shadow, ":") |
按以下方式编辑读取部分:
nisplusLDAPattributeFromColumn \ passwd: dn=("uid=%s,", name), \ cn=name, \ uid=name, \ userPassword=("{crypt$}%s", passwd), \ uidNumber=uid, \ gidNumber=gid, \ gecos=gcos, \ homeDirectory=home, \ loginShell=shell, \ (shadowLastChange,shadowMin,shadowMax, \ shadowWarning, shadowInactive,shadowExpire)=\ (shadow, ":"), \ nisplusEntryOwner=zo_owner, \ nisplusEntryGroup=zo_group, \ nisplusEntryAccess=zo_access |
同样,要从 LDAP 数据中为 passwd.org_dir 表设置 NIS+ 项的属主、组和访问权限,请修改以下内容:
nisplusLDAPcolumnFromAttribute \ passwd: name=uid, \ ("{crypt$}%s", passwd)=userPassword, \ uid=uidNumber, \ gid=gidNumber, \ gcos=gecos, \ home=homeDirectory, \ shell=loginShell, \ shadow=("%s:%s:%s:%s:%s:%s", \ shadowLastChange, \ shadowMin, \ shadowMax, \ shadowWarning, \ shadowInactive, \ shadowExpire) |
按以下方式编辑读取部分:
nisplusLDAPcolumnFromAttribute \ passwd: name=uid, \ ("crypt$%s", passwd)=authPassword, \ uid=uidNumber, \ gid=gidNumber, \ gcos=gecos, \ home=homeDirectory, \ shell=loginShell, \ shadow=("%s:%s:%s:%s:%s:%s", \ shadowLastChange, \ shadowMin, \ shadowMax, \ shadowWarning, \ shadowInactive, \ shadowExpire), \ zo_owner=nisplusEntryOwner, \ zo_group=nisplusEntryGroup, \ zo_access=nisplusEntryAccess |
[[将属主、组、访问权限和/或 TTL 项数据上载到 LDAP 中。]]
有关更多信息,请参见如何通过一个操作将所有的 NIS+ 数据转换为 LDAP。
重新启动 NIS+ 服务,以便使对映射进行的更改生效。
# svcadm restart network/rpc/nisplus:default |