python3 ldap 查询用户,使用管理重置用户密码
Server = "ldap://127.0.0.1:389" # 明文访问
MServer = "ldaps://127.0.0.1:636" # 密文访问
baseDN = "OU=xx,DC=xx,DC=xx" # 访问起始目录
username = "xxx" # ldap中用户名
password = "xxx" # ldap中密码
import ldap
class LdapModel():
def login_ldap(self,userId):
try:
print("开始执行")
searchScope = ldap.SCOPE_SUBTREE
# 设置过滤属性,这里只显示cn=test的信息
searchFilter = "sAMAccountName=" + userId
# 为用户名加上域名
#username = 'domainname\\' + userId
# None表示搜索所有属性,['cn']表示只搜索cn属性
retrieveAttributes = None
conn = ldap.initialize(Server)
# 非常重要
conn.set_option(ldap.OPT_REFERRALS, 0)
conn.protocol_version = ldap.VERSION3
# 这里用户名是域账号的全名例如domain/name
conn.simple_bind_s(username, password)
print('ldap connect successfully')
# 调用search方法返回结果id
ldap_result_id = conn.search(baseDN, searchScope, searchFilter, retrieveAttributes)
result_set = []
print(ldap_result_id)
print("****************")
while 1:
result_type, result_data = conn.result(ldap_result_id, 0)
if (result_data == []):
break
else:
if result_type == ldap.RES_SEARCH_ENTRY:
result_set.append(result_data)
# print result_set
Name, Attrs = result_set[0][0]
#print(Name)
#print(Attrs)
#if hasattr(Attrs, 'has_key') and 'name' in Attrs:
if 'name' in Attrs:
needKeyList=['sn','sAMAccountName','mobile','description']
resultMap={}
for key in Attrs.keys():
values=Attrs[key]
if isinstance(values,list):
#print("======",key)
valueList=[]
for item in values:
try:
#print(str(item,'utf-8'))
valueList.append(str(item,'utf-8'))
except Exception as e:
print(values)
print(e)
if key in needKeyList:
resultMap[key]=valueList
else:
pass
#print(key,Attrs[key])
return resultMap
else:
print("in error")
return None
except Exception as ex:
print(ex)
return None
def checkValue(self,name,userid,mobile):
rbool=False
rMsg=""
resultMap=None
try:
resultMap=self.login_ldap(userid)
if resultMap and len(resultMap) > 0:
# check data {'sn': ['刘政'], 'description': ['liuzheng2'], 'sAMAccountName': ['06308'], 'mobile': ['18128879095']}
if name in resultMap["sn"]:
if mobile in resultMap["mobile"]:
rbool=True
else:
rMsg="用户名不一致"
else:
rMsg="手机号码不一致"
else:
rMsg="query ldap no data!"
except Exception as ex:
print("ldap login_ldap")
print(ex)
return rbool,rMsg,resultMap
# 修改LDAP密码
# userId: LDAP uid
# newpwd: 新密码
def change_password(self,userId,newpwd):
try:
# 如果是self-signed cert, 加上这行
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
# 初始化LDAP连接
print("url",MServer)
conn = ldap.initialize(MServer)
#conn.protocol_version = ldap.VERSION3
# ---------
conn.set_option( ldap.OPT_X_TLS_DEMAND, True )
conn.set_option( ldap.OPT_DEBUG_LEVEL, 255 )
# 使用管理员
conn.simple_bind_s(username,password)
print("connecting successfully............")
searchScope = ldap.SCOPE_SUBTREE
# 设置过滤属性,这里只显示cn=test的信息
searchFilter = "sAMAccountName=" + userId
# None表示搜索所有属性,['cn']表示只搜索cn属性
retrieveAttributes = None
# 调用search方法返回结果id
ldap_result = conn.search_s(baseDN, searchScope, searchFilter, retrieveAttributes) # 返回该用户的所有信息,类型列表
print("query successfully ..............")
# 修改密码
if ldap_result:
user_dn = ldap_result[0][0] # 获取用户的cn,ou,dc
try:
unicode_pass = str('\"' + newpwd + '\"')
print (unicode_pass)
new_password = unicode_pass.encode('utf-16-le')
mod_attrs = [( ldap.MOD_REPLACE, 'unicodePwd', new_password)]
print(user_dn,mod_attrs)
conn.modify_s(user_dn, mod_attrs)
conn.unbind_s()
print("update password successfully............")
except Exception as e:
print(e)
else:
print("查询失败..........")
#conn.extend.microsoft.modify_password(dn, newpwd)
return True,"Password changed!"
except Exception as ex:
return False,"Oops! Something wrong: %s" % ex
python3 ldap 查询用户,使用管理重置用户密码相关推荐
- 二十、MySQL之用户权限管理(用户管理、权限管理、忘记root密码的解决方案)
用户权限管理:在不同的项目中给不同的角色(开发者)不同的操作权限,为了保证数据库数据的安全. 通常,一个用户的密码不会长期不变,所以需要经常性的变更数据库用户密码来确保用户本身安全(mysql客户端用 ...
- chmod 777命令_Linux用户权限管理及用户权限管理命令操作
Ubuntu 是一个多用户系统,我们可以给不同的使用者创建不同的用户账号,每个用户使用各自的账号登陆,使用用户账号的目的一是方便系统管理员管理,控制不同用户对系统的访问权限,另一方面是为用户提供安全性 ...
- kali修改文件权限不够_Linux用户权限管理及用户权限管理命令操作
Ubuntu 是一个多用户系统,我们可以给不同的使用者创建不同的用户账号,每个用户使用各自的账号登陆,使用用户账号的目的一是方便系统管理员管理,控制不同用户对系统的访问权限,另一方面是为用户提供安全性 ...
- centos 7 单用户模式无法重置root密码 解决方法
CentOS 7&RHEL 7与之前的5,6不同的是,当忘记root密码,并采用GRUB2为启动器时,将无法通过单用户模式重置root密码.下面将介绍如何重置CentOS7的root密码. 1 ...
- linux用户及用户权限管理,Linux用户用户组及权限管理
Linux安全上下文: 运行中的程序:进程 进程所能够访问资源的权限取决于进程的运行者身份 涉及的配置文件 /etc/passwd:保存用户信息 whatis passwd sslpasswd (1s ...
- 【 linux系统入门管理篇-第二章文件和用户的管理】
linux系统入门管理篇-第二章文件和用户的管理 本章介绍 一.文件管理 (一).Linux目录结构 (二).文件管理 1.文件管理命令 2.文件类型 二.用户管理 (一).用户/组基本概念 (二). ...
- 目录即服务如何帮助安全、高效地管理WiFi用户?
大多数企业已经从传统有线网络转向使用 WiFi 无线网络.与有线网络相比,无线网络更易于管理,且性价比更高.灵活性更强. WiFi 无线网络深受广大用户喜爱.用户随时随地通过无线网络即可办公.沟通,不 ...
- mariadb用户群体mysql_MySQL/MariaDB用户账户管理
'Username'@'Hostname' Username:任意的字符串组合,只能包含基本意义的字符:可以包含"_"."."."-": H ...
- 使用LDAP查询快速提升域权限
DM_ · 2014/05/31 15:54 from:https://www.netspi.com/blog/entryid/214/faster-domain-escalation-using-l ...
最新文章
- 人工神经网络控制下的智能车
- python pip安装模块失败的原因
- java 流 复制文件_【Java】使用字节流复制文件
- 数据湖架构,为什么需要“湖加速”?
- mysql 压缩版安装
- 面试官不讲武德,居然让我讲讲蠕虫和金丝雀!
- 小米净水器压力传感器_净水器中RO的完整形式是什么?
- PHP 常用代码大全
- 你还在纠结要不要学 Go 吗?
- 8.0系统机器激活XPOSED框架失败The Xposed framework is not installed
- 【iOS】TouchDown、TouchDownRepeat 和 TouchCancel 的区别
- imagemagick, imagick和magickwand的安装
- a*算法的优缺点_垃圾回收的常见算法
- Kettle使用教程(一)—— 在MacOS系统中安装 Kettle
- 【美股】美股基本面的一些指标详解
- 数据可视化—随机漫步
- 上海车展:比亚迪宋L概念车全球首发,这是要硬扛特斯拉?
- 使用虚拟机备份软件备份Microsoft Hyper-V 虚拟机
- windows定时运行exe文件
- OpenCV-4.3.0 Windows版本下载
热门文章
- 105K Star的GitHub项目再陷风波,其托管商惨遭三大唱片公司起诉
- 用Python打造你的专属情人节贺卡,赶快发给TA浪漫一下吧
- docker network create: conflicts with network
- 全志JAVA_ubuntu14.04+安卓7.1(全志源码)+openjdk-8编译
- 软件测试工程师的岗位职责
- 软件开发团队在苹果iPhone上日进千金
- Unwriter:BCH和BTC之争可以参考法国大革命
- 传参时 const string 相对 const string 有哪些优势?
- day09_类,对象,封装(学习自用)
- 心态很容易受别人影响_很容易被别人说的话影响心情,应该怎么办?