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
參考資料