我是 LDAP 新手,正在学习 ldapsearch 和 ldap 的基础知识。我想编写一个 shell 脚本,枚举(已经存在的)LDAP 组“VPN 用户”,然后获取所有用户“samaccountname”(例如 joe.smith)。有人可以帮忙吗?我试过这样做,但似乎我的 ldapsearch 有错误:
ldapsearch -h 127.0.0.1 -x -b (&(objectCategory=group)(cn=VPN Users))
编辑 - 对此深表抱歉。我取得了一些进展,现在至少 cat 可以通过运行如下命令从 LDAP 服务器获取一些数据:
echo -n 'password' |
ldapsearch -y pass.txt -h [IP here] -b "ou=x,dc=x,dc=x,dc=x" -x `
-D "cn=user,ou=test,ou=x,ou=x,dc=x,dc=x,dc=xx" `
-W "(&(objectClass=person)(objectClass=user)(sAMAccountName=*) (memberOf=cn=VPN Users,ou=test,ou=x,ou=x,dc=x,dc=x,dc=xx))" `
-y /dev/fd/0
但我希望它:
- 枚举(已经存在的)LDAP 组“VPN 用户”
- 获取所有用户“samaccountname”(例如 joe.smith 等)
谢谢
答案1
查询中使用的表达式如下:
(&(objectClass=user)(memberOf="VPN Users")) attrs=sAMAccountName
最后:
ldapsearch -y pass.txt -h [IP here] -b "ou=x,dc=x,dc=x,dc=x"
-D "cn=user,ou=test,ou=x,ou=x,dc=x,dc=x,dc=xx" `
-W "(&(objectClass=user)(memberOf="VPN Users")) attrs=sAMAccountName -y /dev/fd/0
答案2
如果有某些东西维护该memberOf
属性(例如 slapd-memberOf):
ldapsearch -h ldap.example.com -b ou=groups,dc=example,dc=com \
-D cn=user,ou=accounts,dc=example,dc=com -W -y password.txt \
"(&(memberOf=cn=VPN Users,ou=groups,dc=example,dc=com)(sAMAccountName=*))" \
sAMAccountName
sed
如果你只对值感兴趣, 你可以通过管道传输输出,例如
| sed -n 's/^sAMAccountName: //p'
-y
需要密码准确。大多数文本编辑器(包括)vim
会插入尾随换行符 ( \n
)。必须将其删除,例如truncate -s -1 password.txt
。