2022年2月9日 星期三

[經驗分享] LDAPSearch 常用 CLI 指令整理 (持續更新)

  

OpenLDAP 是開源界非常重要的目錄服務套件,在許多應用服務與伺服器都會用到它。

儘管有許多套件會經由 LDAP 協定與 OpenLDAP 介接,但是熟悉它的命令列指令仍然是非常重要的測試與除錯方式,尤其是可以用來測試各種 LDAP 伺服器連接查詢的 LDAPSearch。

本文整理我較常使用的指令,連接對象包含 Active Directory、Zimbra、UCS (Univention Corporate Server)。











前置作業

請確認有正確的權限以及預計要存取的 LDAP 伺服器帳號與密碼。









指令列表

以下將分類整理不同對象的指令,請進行以下替換:
  • LDAPSERVER 替換為您的伺服器
  • BINDUSER 替換為您的帳戶
  • BINDPASSWORD 替換為您的密碼
  • OU=OU 替換為您的組織單位
  • DC=DOMAIN,DC=LOCAL 替換為您的 Base DN



帳號相關操作

# 驗證是否有此帳號 (AD)
ldapsearch -x -H "ldap://LDAPSERVER" -b "OU=OU,DC=DOMAIN,DC=LOCAL" -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" "(&(objectclass=user)(sAMAccountName=username))"


# 驗證是否有此帳號 (LDAP)
ldapsearch -x -H "ldap://LDAPSERVER" -b "OU=OU,DC=DOMAIN,DC=LOCAL" -D "uid=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" "(&(objectClass=person)(uid=username))"


# 驗證是否有此帳號 (Zimbra)
ldapsearch -x -h LDAPSERVER:389 -b "ou=people,DC=DOMAIN,DC=LOCAL" -D "uid=zimbra,cn=admins,cn=zimbra" -w "BINDPASSWORD" "(&(objectClass=zimbraAccount)(uid=username))"


# 以完整格式搜尋使用者並取回帳號名稱 (AD)
ldapsearch -x -H "ldap://LDAPSERVER" -b "OU=OU,DC=DOMAIN,DC=LOCAL" -D "uid=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -s sub "(userPrincipalName=username@domain.local)" | grep "sAMAccountName"


# 以完整格式搜尋使用者並取回別名 (AD)
ldapsearch -x -H "ldap://LDAPSERVER" -b "OU=OU,DC=DOMAIN,DC=LOCAL" -D "uid=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -s sub "(userPrincipalName=username@domain.local)" | awk -F ":" -v i="mailNickname" '$1 == "mailNickname" {print $2}'


# 搜尋具有指定屬性及文字的帳號 (LDAP)
ldapsearch -x -H "ldap://LDAPSERVER" -b "CN=Users,DC=DOMAIN,DC=LOCAL" -D "uid=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -s base "(&(objectClass=user)(description=*字串*))"



群組相關操作

# 列出群組資訊 (AD)
ldapsearch -x -h LDAPSERVER:3268 -D "uid=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -b "DC=DOMAIN,DC=LOCAL" "(&(objectclass=Group)(cn=群組名稱))"


# 列出群組資訊 (Univention/UCS)
ldapsearch -x -h LDAPSERVER:7389 -D "uid=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -b "DC=DOMAIN,DC=LOCAL" "(&(objectclass=univentionGroup)(cn=群組名稱))"


# 列出群組資訊 (Zimbra)
ldapsearch -x -h LDAPSERVER:389 -D "uid=zimbra,cn=admins,cn=zimbra" -w "BINDPASSWORD" -b "cn=groups,dc=DOMAIN,dc=LOCAL" "(&(objectClass=zimbraGroup)(cn=群組名稱))"


# 取出某個群組下的成員帳號 (sAMAccountName) 清單 (AD)
ldapsearch -x -h LDAPSERVER:3268 -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -b "OU=OU,DC=DOMAIN,DC=LOCAL" "(&(objectclass=user)(memberOf=CN=群組名稱,OU=組織單位2,OU=組織單位1,DC=DOMAIN,DC=LOCAL))" sAMAccountName


# 取出某個群組下的成員郵件 (mail) 清單 (AD)
ldapsearch -x -h LDAPSERVER:3268 -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -b "OU=OU,DC=DOMAIN,DC=LOCAL" "(&(objectclass=user)(memberOf=CN=群組名稱,OU=組織單位2,OU=組織單位1,DC=DOMAIN,DC=LOCAL))" mail


# 取出某個群組下的成員帳號 (uid,displayName) 清單 (Univention/UCS)
ldapsearch -x -h LDAPSERVER:7389 -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -b "OU=OU,DC=DOMAIN,DC=LOCAL" "(&(objectclass=person)(memberOf=CN=群組名稱,OU=組織單位2,OU=組織單位1,DC=DOMAIN,DC=LOCAL))" uid displayName


# 取出某個群組下的成員主要郵件 (mail) 清單 (Univention/UCS)
ldapsearch -x -h LDAPSERVER:7389 -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" -b "OU=OU,DC=DOMAIN,DC=LOCAL" "(&(objectclass=user)(memberOf=CN=群組名稱,OU=組織單位2,OU=組織單位1,DC=DOMAIN,DC=LOCAL))" mailPrimaryAddress




其它

# 避免資料過長強制斷行 -o ldif-wrap=no
ldapsearch -x -o ldif-wrap=no -H "ldap://LDAPSERVER" -b "OU=OU,DC=DOMAIN,DC=LOCAL" -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" "(uid=username)"


# 採用 LDAP 通用資源格式連接 -H URI
ldapsearch -x -H "ldap://LDAPSERVER" -b "OU=OU,DC=DOMAIN,DC=LOCAL" -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" "(uid=username)"


# 採用主機與埠號格式連接 -h host
ldapsearch -x -h LDAPSERVER:389 -b "OU=OU,DC=DOMAIN,DC=LOCAL" -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" "(uid=username)"


# 回傳多個欄位使用空格分開,例 displayName cn
ldapsearch -x -h LDAPSERVER:389 -b "OU=OU,DC=DOMAIN,DC=LOCAL" -D "CN=BINDUSER,CN=Users,DC=DOMAIN,DC=LOCAL" -w "BINDPASSWORD" "(uid=username)" displayName cn






參考資料