从AIX 4.3版本开始,AIX提供LDAP作为加载模块。 LDAP是在TCP / IP上运行的面向连接的协议。 可以将该模块配置为在AIX系统上进行用户和组管理。 集成了AIX本机命令以支持LDAP功能。 AIX LDAP客户机守护程序secldapclntd向LDAP服务器发出请求,并根据来自LDAP服务器的应用程序或命令请求获取详细信息。 本文的范围是从AIX 6.1 Tl06和AIX 7.1版本开始涵盖AIX LDAP客户端环境的增强功能。 从AIX 6.1 Tl06起,LDAP客户端增强功能包括:
- LDAP区分大小写
- LDAP别名支持
- LDAP缓存增强
- LDAP负缓存增强
- 域RBAC与LDAP的集成
LDAP区分大小写
LDAP服务器上的用户和组不区分大小写。 LDAP将用户foo,Foo和FOO视为同一用户。 UNIX®具有区分大小写的功能,因此所有这些用户都被视为不同的用户。 因此,当为AIX环境中的任何用户授予或限制特权时,该特权将应用于LDAP服务器上的所有用户。 这种情况有时会导致安全漏洞。
增强了AIX LDAP客户端以处理这种区分大小写的问题。 在AIX LDAP客户端配置文件/etc/security/ldap/ldap.cfg下引入了新的配置参数“ caseExactAccountName”。 当此参数设置为“ yes”时,LDAP客户端将检查与LDAP服务器返回的结果输入的用户名是否完全匹配。 默认情况下,此选项设置为“ no”。 每当修改LDAP客户端配置文件以使更改生效时,请重新启动LDAP客户端守护程序。
运行以下命令以重新启动LDAP客户端守护程序:
#/usr/sbin/restart-secldapclntd
当caseExactAccountName参数设置为“ yes”并且LDAP用户foo存在于LDAP服务器上,并且管理员或特权用户尝试创建另一个用户Foo时,mkuser命令显示以下消息:
#mkuser -R LDAP Foo
3004-698 Error committing changes to "Foo".
同样,使用lsuser命令,将显示以下消息:
# lsuser -R LDAP Foo
3004-687 User "Foo” does not exist.
LDAP别名支持
LDAP以目录信息树(DIT)格式存储信息,并管理用户和组。 有时,使用多个用户名或主要用户的别名来调用用户。
LDAP以以下目录树格式存储用户信息:
dn:uid=foo,ou=people,cn=aixdata
uid:foo
uid:foo1
objectclass: posixaccount
…
dn: uid=foo,ou=people,cn=aixdata
被称为用户的专有名称(DN)。 用户的相对可分辨名称(RDN)为uid: foo, uid : foo1
。 AIX本机命令(如lsuser)通过使用foo
或foo1
从LDAP服务器获取用户属性。 但是,AIX登录使用区分名称作为用户。 因此,以foo身份登录成功,但使用foo1失败。 增强了AIX LDAP客户端,以在用户登录期间支持LDAP别名机制。
LDAP缓存增强
AIX LDAP客户机守护程序secldapclntd将从LDAP服务器检索到的用户和组条目存储在LDAP客户机高速缓存中。 用户属性存储在用户缓存中,而组属性存储在组缓存中。 每个缓存条目都有一个时间戳。 在可配置的缓存超时之后,缓存条目将失效,并且对用户的查询将导致对LDAP服务器的LDAP查询。 LDAP服务器的新结果将再次缓存,以供LDAP客户端上随后的应用程序和命令请求。
缓存机制在当前实现中具有局限性。 修改或更新用户帐户后,如果仍然使用旧值来缓存用户,则该更新对于AIX系统可能不可见。 一个示例是密码更改。 在高速缓存超时窗口内,即使从其他系统更改了密码,仍然可以允许用户使用旧密码登录到用户高速缓存条目仍然有效的系统。 出于同样的原因,如果旧密码仍然被缓存并且仍然有效,则使用新密码登录到后者的系统将失败。
通过扩展AIX LDAP客户端中的缓存机制,解决了此限制。 新属性TO_BE_CACHED
添加到LDAP用户和组映射文件。 默认情况下,此属性的值为“ yes”,这意味着用户和组属性均已缓存。 对于不需要缓存的用户和组属性,可以将其设置为“ no”。 当用户请求进入时,LDAP客户端读取高速缓存以查看是否可以从高速缓存中提取请求。 在此之前,它将扫描用户和组映射文件,以查看是否将任何属性的TO_BE_CACHED属性设置为“ no”。 如果是这样,它将不读取高速缓存,而是发送请求以从LDAP服务器获取值。
LDAP负缓存增强
AIX LDAP secldapclntd守护程序的另一个增强功能是secldapclntd客户端守护程序缓存从LDAP服务器检索的用户和组条目。 如果请求提供用户或组信息,并且该条目在LDAP服务器上不存在,则服务器会将适当的不存在的信息发送到客户端,并缓存该信息。 如果用户请求相同的不存在信息而不是去服务器,则在缓存信息中检查该信息并将其显示给用户。 如果查询相同的不存在的用户或组信息,则可以提高性能。 该概念在AIX LDAP客户机中被描述为“负缓存”机制。
将域RBAC集成到LDAP中
在AIX 6.1 Tl07和AIX 7.1 Tl02发行版及更高版本中,LDAP客户端得到了增强,以支持Domain RBAC与LDAP服务器的集成。 LDAP客户端从LDAP服务器获取Domain RBAC信息,并将其下载到AIX内核以控制系统上的资源。 增强了Domain RBAC命令和LDAP客户端命令,以支持LDAP服务器的Domain RBAC功能。
要在LDAP服务器上配置Domain RBAC数据库,请按照下列步骤操作:
- 如果LDAP服务器是Microsoft Windows AD服务器,请使用/etc/security/ldap/aixSchemaForAD.ldif文件。 语法为:
ldapadd –h <ldap servername> -D <bindn> -w <bind password> -i
<schema file> -c –v
此命令将域RBAC架构加载到LDAP服务器。
- 以下命令将Domain RBAC数据库转换为LDIF格式,并将其导出到/tmp/domain.ldif文件。
rbactoldif -d <basedn> -s eo >> /tmp/domain.ldif
ldapadd -h <ldapservername> -D <binddn> -w <bind password > -i
/tmp/domain.ldif -v
#mksecldap -c –h <LDAP server> -a <bind dn> -p <bind passwd> -S
rfc2307aix
- 键入以下命令以检查LDAP服务器上的后缀:
#lsldap
该命令列出了域RBAC后缀以及其他后缀。
domains:
secorder = LDAP,files
domobjs:
secorder = LDAP,files
- 使用以下命令将表加载到内核中:
#setkst
mkdom –R LDAP <domain name>
setsecattr –R LDAP –o domains = <域名> objtype = file <对象名称>
翻译自: https://www.ibm.com/developerworks/aix/library/au-ldapclientenhance/index.html