尝试在活动目录中定义所有用户。以下是使用的脚本:
#!/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']
答案 0 :(得分:2)
您使用应与所有属性匹配的属性过滤器进行了搜索。大多数LDAP服务器(包括AD)不允许您在没有特殊权限的情况下直接查询密码。换句话说,您的代码是正确的,但很可能服务器没有为您绑定的用户执行的搜索返回密码属性。
来自AD文档:
“LDAP搜索永远不会返回unicodePwd属性”。
答案 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也有很好的指导,甚至是这些东西的向导。