将用户从LDAP目录导入IBM Security Access Manager

IBM安全产品通常以棕场开发的形式实现,这意味着它们是为已经存在一些类似应用程序的环境而构建的。 IBM Security Access Manager就是这样的产品,经常被部署到已经安装了轻型目录访问协议(LDAP)目录服务器的环境中。 在这种情况下,系统管理员需要知道如何将用户条目从LDAP目录服务器导入IBM Security Access Manager。

图1显示了系统体系结构,其中IBM Security Access Manager已引入到现有系统中,该系统包括LDAP目录服务器和后端应用程序。

图1.使用IBM Security Access Manager的目录服务器体系结构
将LDAP存储库连接到IBM Security Access Manager的系统架构

在本文中,我展示了一个Python脚本(请参阅下载 ),您可以从命令行使用它来自动查找新用户并将其从LDAP存储库树导入IBM Security Access Manager。 请注意,本文假定您熟悉IBM Security Access Manager和轻型目录访问协议。 您无需熟悉Python即可使用导入脚本。

导入脚本

在本节中,我将介绍并解释导入脚本的一些元素和阶段,您可以随时下载它们。 请注意,该脚本依赖于IBM Security Access Manager的pdadmin命令,因此您必须在安装了IBM Security Access Manager运行时环境的计算机上运行该脚本。

图2是显示脚本主要进展的流程图。

图2.脚本的主要阶段
显示导入脚本阶段的流程图。

清单1显示了导入脚本。

清单1.导入脚本
#! /usr/bin/python

# Authentication
ldap_dn = "cn=root"
ldap_pwd = "object00"
ldap_server = "localhost"
sameb_uid = "sec_master"
sameb_pwd = "object00"

# The part of the LDAP tree where you expect users
ldap_base = "o=xyz"

# The part of the LDAP tree where the SAMeb 
# configuration is located
ldap_sameb_base = "secAuthority=Default"

# Internal configuration
ldap_user_file = "ldap_users"
uid_file = "uid_file"

from subprocess import call

call("ldapsearch -LLL -D " + ldap_dn + " -w " + ldap_pwd 
	+ " -b " + ldap_base + " -h " + ldap_server
	" objectclass=inetOrgPerson dn >" + ldap_user_file,
		shell=True)

ldap_users = open(ldap_user_file, "r")

for line in ldap_users:
	if len(line) > 1:
		dn = line[4:-1]
		ret_val = call("ldapsearch -D " + ldap_dn +
			" -w " + ldap_pwd + " -h " + ldap_server +
			" -b " + ldap_sameb_base + " secDN=" + dn + 
			" | grep numEntries > /dev/null",
			shell=True)
		if (ret_val == 1):
			print "Need to import " + dn
			call("ldapsearch -D " + ldap_dn +
				" -w " + ldap_pwd + 
				" -h " + ldap_server + " -b " + dn +
				" objectClass=inetOrgPerson uid " + 
				"| grep uid: >" + uid_file, 
				shell=True)
			uid_f = open(uid_file, "r")
			uid = uid_f.read()
			uid_f.close()
			uid = uid[5:-1]
			call("pdadmin -a " + sameb_uid + " -p " +
				sameb_pwd + " user import " + uid + 
				" " + dn,
				shell=True);
			call("pdadmin -a " + sameb_uid + " -p " +
				sameb_pwd + " user modify " + uid + 
				"account-valid yes ",
				shell=True);

在下一节中,我不会解释脚本的每个部分,而只是解释其主要功能。 如果您熟悉Python,这很有用,但不是必需的。 我将解释每种设置的Python语法的相关方面,并向您展示您需要在何处对其进行修改以供自己使用。

脚本设定

通常,以数字符号( # )开头的Python行是注释。 但是, 清单1中的这一行是一个特例。 UNIX®约定是,以数字符号开头并带有感叹号( #! )的文件使用该行的其余部分作为将运行该文件的解释器的名称。 在这种情况下,以下代码是Python解释器的路径。 您将根据环境进行修改。

#! /usr/bin/python

下一个代码片段包含LDAP服务器的登录名,密码和服务器主机名信息。 根据您自己的系统修改它。

# Authentication
ldap_dn = "cn=root"
ldap_pwd = "object00"
ldap_server = "localhost"

接下来,脚本将登录和密码信息传递给IBM Security Access Manager。 根据您的环境修改这些部分。

sameb_uid = "sec_master"
sameb_pwd = "object00"

下一部分是具有用户信息的LDAP树的分支。 图3显示了LDAP树中用户位置的示例。 根据需要修改配置。

图3.带有用户的LDAP树
LDAP树中的分支图。
# The part of the LDAP tree where you expect users
ldap_base = "ou=people,o=xyz"

过滤用户帐户

除了在LDAP树中定位用户之外,该脚本还必须将其自身限制为IBM Security Access Manager中尚未存在的用户。 要过滤掉这些用户,脚本需要知道IBM Security Access Manager配置的LDAP树中的位置。 如下所示,默认位置是secAuthority=Default 。 首次配置策略服务器时,可以更改此默认设置。

# The part of the LDAP tree where the SAMeb
# configuration is located
ldap_sameb_base = "secAuthority=Default"

图4显示了LDAP树以及IBM Security Access Manager配置的缺省位置。

图4. secAuthority = Default的LDAP树
带有ISAM缺省值的LDAP树图。

在脚本结尾处,您将看到用作中间存储的文件,这些文件用于获取用户信息的命令输出。 除非有理由一次运行脚本的多个实例,否则不需要更改以下文件名:

# Internal configuration
ldap_user_file = "ldap_users"
uid_file = "uid_file"

脚本功能

脚本的下一部分使用上面声明的参数实际从LDAP中读取用户并将其导入IBM Security Access Manager。

该脚本使用Python的subprocess.call函数运行Shell命令。 以下行导入了该函数,以便可以使用它:

from subprocess import call

下一行调用ldapsearch以查找用户列表。

call("ldapsearch -LLL -D " + ldap_dn + " -w " + ldap_pwd
        + " -b " + ldap_base + " -h " + ldap_server
        " objectclass=inetOrgPerson dn >" + ldap_user_file,
        shell=True)

在默认配置下,以上各行运行以下shell命令。 此命令搜索inetOrgPerson类型的实体,该实体用于表示人。 它仅读取其专有名称,并将输出发送到名为ldapusers的文件:

ldapsearch -LLL -D cn=root -w object00 -b ou=people,o=xyz
        -h localhost objectclass=inetOrgPerson dn > ldapusers

接下来,该脚本打开ldapusers文件并ldapusers读取它。 注意,Python通过缩进处理块; 因此,从此刻起,至少缩进一次的所有操作对每个用户都执行一次。

ldap_users = open(ldap_user_file, "r")
for line in ldap_users:

注意: ldapusers中的行格式为: dn: cn=jdoe,ou=users,o=xyz 。 前四个字符是dn:后跟一个空格。 实际的专有名称以第五个字符开头,从零开始计数时为数字4。

ldapusers中的一半ldapusers空白。 另一半以dn:开头。 此代码片段忽略空白行,并丢弃其他行的前四个字符。 由于Python块是由缩进指定的,因此脚本的其余部分仅针对非空白行运行。

if len(line) > 1:
        dn = line[4:-1]

检查现有帐户

如前所述,在将用户从LDAP存储库导入IBM Security Access Manager时,确保不复制现有帐户非常重要。 IBM Security Access Manager中的用户条目具有secDN属性,该属性具有原始专有名称的值。 以下代码段使用ldapsearch查找具有适当secDN值的条目。

ret_val = call("ldapsearch -D " + ldap_dn +
        " -w " + ldap_pwd +
        " -h " + ldap_server +
        " -b " + ldap_sameb_base + " secDN=" + dn +
        " | grep numEntries > /dev/null",
        shell=True)

返回值1表示grep失败,这意味着没有LDAP条目与过滤器匹配。 在这种情况下,脚本将导入用户,从而为IBM Security Access Manager用户信息创建一个新的LDAP实体。

if (ret_val == 1):
        print "Need to import " + dn

导入新用户

要将用户导入到IBM Security Access Manager中,您必须指定用户的UID ,即他或她用于登录的标识符。 以下几行检索该值:

call("ldapsearch -D " + ldap_dn +
        " -w " + ldap_pwd +
        " -h " + ldap_server +
        " -b " + dn +
        " objectClass=inetOrgPerson uid " +
        "| grep uid: >" + uid_file,
        shell=True)

此行读取文件的第一行:

uid_f = open(uid_file, "r")
     uid = uid_f.read()
     uid_f.close()

请注意,以上行指定应丢弃前五个字符( uid: :)。 其余字符代表实际属性值。

uid = uid[5:-1]

建立新帐户

最后,该脚本使用pdadmin在IBM Security Access Manager中创建新帐户:

call("pdadmin -a " + sameb_uid + " -p " +
        sameb_pwd + " user import " + uid +
        " " + dn,
        shell=True);
call("pdadmin -a " + sameb_uid + " -p " +
        sameb_pwd + " user modify " + uid +
        "account-valid yes ", shell=True)

请注意,该脚本需要发出第二个命令( user modify >uid< account-valid yes ),因为由pdadmin创建或导入的用户默认情况下处于非活动状态。

结论

在本文中,我向您介绍了Python脚本,该脚本可以轻松地将新用户导入IBM Security Access Manager。 尽管该脚本不能提供IBM Tivoli Directory Integrator的所有灵活性,也不能提供IBM Security Identity Manager的功能(请参阅参考资料 ),但是它确实具有免费的优点。

致谢

我要感谢Windayani Achmad Zaenullah确认了本文的必要性,并感谢Lance Clinton对其进行了评论。 剩下的任何错误都是我的错。


翻译自: https://www.ibm.com/developerworks/security/library/se-import/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值