如果 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 |