系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)

NIS+ 项的属主、组、访问权限和 TTL

如果 NIS+ 表项是从 LDAP 数据创建的,则缺省行为是使用项对象所在表对象中的属主、组、访问权限和 TTL 来初始化项对象的相应值。这通常是足够的,但也可能会存在必须单独设置这些 NIS+ 项属性的情况。例如,当站点不使用 rpc.nispasswdd(1M) 守护进程时。为了允许个别用户更改其 NIS+ 口令(并重新加密存储在 cred.org_dir 表中的 Diffie-Hellman 密钥),该用户应当拥有自己的 passwd.org_dircred.org_dir 项,而且对这些项必须拥有与项属主相同的修改权限。

如果您需要将一个或多个 NIS+ 表中表项的属主、组、访问权限或 TTL 存储在 LDAP 中,则需要执行以下操作。

如何将其他项属性存储到 LDAP 中
  1. 请查阅 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 ) )
  2. 修改相关表的 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
  3. 编辑 nisplusLDAPattributeFromColumnnisplusLDAPcolumnFromAttribute 属性值,以指定所需的属主、组、访问权限或 TTL 的任何子集。

    在步骤 2 中,创建了用于存储这些值的 LDAP 属性。对于 NIS+,存在几个名称分别为 zo_ownerzo_groupzo_accesszo_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
  4. [[将属主、组、访问权限和/或 TTL 项数据上载到 LDAP 中。]]

    有关更多信息,请参见如何通过一个操作将所有的 NIS+ 数据转换为 LDAP

  5. 重新启动 NIS+ 服务,以便使对映射进行的更改生效。


    # svcadm restart network/rpc/nisplus:default