判断AD帐号是否在嵌套组中

用户和组的关系: zhangsan隶属于组groupA,组groupB隶属于组groupA

1.判断用户

判断用户是否在某个组中(支持嵌套关系的组),想要判断zhangsan是否在组groupB

samAccountName = 'zhangsan'
groupDn= 'CN=groupB,OU=Dennis,DC=dennis,DC=com'
# samAccountName:要判断的用户
# groupDn:组的完整DN
search_filter = f'(&(objectClass=user)(objectCategory=person)(sAMAccountName={samAccountName})(memberof:1.2.840.113556.1.4.1941:={groupDn}))'

2.判断组

判断组中是否存某个用户,想要判断组groupB中是否存在用户zhangsan

groupName= 'groupB'
userDn= 'CN=zhangsan,OU=Dennis,DC=dennis,DC=com'
# groupName:要判断的组
# userDn:用户的完整DN
search_filter = f'(&(objectClass=group)(objectCategory=group)(sAMAccountName={groupName})(member:1.2.840.113556.1.4.1941:={userDn}))'

3.查找一个组下的所有用户

该查询条件在AD管理工具中可以直接查出来,只是速度有点慢,用第三方工具包(只在pythonldap3中测试过)在代码中查询可能会提示操作超时,其他工具自行测试

groupDn= 'CN=groupB,OU=Dennis,DC=dennis,DC=com'
# groupDn:组的完整DN
search_filter = f'(&(objectClass=user)(objectCategory=person)(memberof:1.2.840.113556.1.4.1941:={groupDn}))'

4.查找一个用户下隶属的所有组

该查询条件在AD管理工具中可以直接查出来,只是速度有点慢,用第三方工具包(只在pythonldap3中测试过)在代码中查询可能会提示操作超时,其他工具自行测试

userDn= 'CN=zhangsan,OU=Dennis,DC=dennis,DC=com'
# userDn:组的完整DN
search_filter = f'(&(objectClass=group)(objectCategory=group)(member:1.2.840.113556.1.4.1941:={userDn}))'

5.参考来源

https://learn.microsoft.com/zh-cn/windows/win32/adsi/search-filter-syntax?redirectedfrom=MSDN
https://github.com/cannatag/ldap3/issues/327
https://stackoverflow.com/questions/6195812/ldap-nested-group-membership

posted @ 2023-03-01 15:00  DennisDong  阅读(73)  评论(0编辑  收藏  举报