获取活动目录用户密码(unicodePwd)

时间:2014-02-28 01:48:06

标签: python ldap

尝试在活动目录中定义所有用户。以下是使用的脚本:

#!/usr/bin/python

import ldap
import sys

# Connection information
host = 'ldap://' + server + ':' + str(port)
user = 'user'
pw = 'password'

# Init
conn = ldap.initialize( host )


try:
    # Try and make a synchronous bind
    conn.simple_bind_s( user, pw )

    # Search information
    basedn = "DC=example,DC=com"
    scope = ldap.SCOPE_SUBTREE
    filter = "(&(objectClass=user)(sAMAccountName=ssheth))"
    attributes = ['*']

    # Search!
    result = conn.search_s( basedn, scope, filter, attributes )

    for v in result[0]:
        if type(v) == dict:
            for k,v in v.items():
                print k,v
        else:
            print(v)

except ldap.LDAPError as e:
    raise

我得到以下输出,但我没有看到用户的密码信息。无论如何我可以检索unicodePwd属性吗?

CN=ssheth,CN=Users,DC=example,DC=com
primaryGroupID ['513']
logonCount ['0']
cn ['ssheth']
countryCode ['0']
dSCorePropagationData ['16010101000000.0Z']
objectClass ['top', 'person', 'organizationalPerson', 'user']
instanceType ['4']
distinguishedName ['CN=ssheth,CN=Users,DC=example,DC=com']
sAMAccountType ['805306368']
objectSid ['\x01\x05\x00\x00\x00\x00\x00\x05\x15\x00\x00\x00\x9bR\xb2U\xef\xdac\x0c\xc9 \xe8*/\x05\x00\x00']
whenCreated ['20140226205355.0Z']
uSNCreated ['13506']
lockoutTime ['0']
badPasswordTime ['130380073014920000']
pwdLastSet ['130380192482330000']
sAMAccountName ['ssheth']
objectCategory ['CN=Person,CN=Schema,CN=Configuration,DC=example,DC=com']
objectGUID ['\xd5\xb6\x94\x85f\x12\xb2E\xb5\xe9$\xd7\x0f\x85\xcf]']
whenChanged ['20140228000048.0Z']
badPwdCount ['0']
accountExpires ['9223372036854775807']
name ['ssheth']
codePage ['0']
userAccountControl ['544']
lastLogon ['0']
uSNChanged ['14365']
givenName ['ssheth']
lastLogoff ['0']

3 个答案:

答案 0 :(得分:2)

您使用应与所有属性匹配的属性过滤器进行了搜索。大多数LDAP服务器(包括AD)不允许您在没有特殊权限的情况下直接查询密码。换句话说,您的代码是正确的,但很可能服务器没有为您绑定的用户执行的搜索返回密码属性。

来自AD文档:

“LDAP搜索永远不会返回unicodePwd属性”。

来源:http://msdn.microsoft.com/en-us/library/cc223248.aspx

答案 1 :(得分:1)

您不能(也不应该)从AD(或任何其他LDAP服务器)检索密码。

如果要对用户进行身份验证,请使用绑定操作。

如果要同步密码,对于AD,您需要在DC上使用密码过滤器。

答案 2 :(得分:1)

Linux有一个名为PAM的可插拔身份验证基础架构。

根据您的评论,解决方案是使用pam_ldap允许AD用户使用其AD用户名和密码登录Linux。有关文档,请参阅http://www.padl.com/OSS/pam_ldap.html,这是大多数发行版的标准功能。

下一步将是SSO。如果您希望使用AD进行单点登录,可以使用Kerberos和pam_krb5模块进行排列。这可能很难设置,但有大量的文档。

这完全取决于你的Linux发行版,但这是Ubuntu的一个例子:https://help.ubuntu.com/community/ActiveDirectoryHowto

像RHEL和SLES这样的大型专业Linux也有很好的指导,甚至是这些东西的向导。