Appearance
AAD / LDAP 查詢工具指南
以 ldapsearch 查詢 Active Directory 使用者資訊,以及透過 Azure AD PowerShell 查詢網域資訊的操作參考。
概述
在維運與開發情境中,有時需要直接查詢 AD(Active Directory)或 Azure AD 的使用者資訊,例如:驗證帳號是否存在、確認 UPN(UserPrincipalName)格式、排查 LDAP 認證失敗問題。
本文記錄兩種查詢途徑:
- ldapsearch(Linux CLI):直接透過 LDAP 協定查詢 AD Server,適合從 VM 或 K8s Pod 進行排查
- Azure AD PowerShell(Windows):查詢 Azure AD Domain 清單,適合確認租戶的驗證網域設定
核心內容
ldapsearch 查詢 Active Directory
ldapsearch 是 OpenLDAP 的命令列工具,可以向任何 LDAP Server(包括 Windows AD)發送查詢。
關鍵參數說明:
| 參數 | 說明 |
|---|---|
-H | LDAP Server URI(例如 ldap://server.domain.corp) |
-x | 使用 Simple Authentication(非 SASL,最常用) |
-D | Bind DN:登入帳號(格式:user@domain.com) |
-w | Bind 密碼 |
-b | Search Base DN:從哪個節點開始搜尋(例如 DC=wiwynn,DC=corp) |
"(&(...))" | LDAP Filter:查詢條件,支援 AND &、OR |、NOT ! 運算 |
常用 LDAP Filter:
| 目的 | Filter |
|---|---|
| 查詢特定 UPN | (&(objectclass=user)(userPrincipalName=user@domain.com)) |
| 查詢特定帳號 | (&(objectclass=user)(sAMAccountName=username)) |
| 查詢特定群組成員 | (&(objectclass=user)(memberOf=CN=GroupName,DC=...)) |
Azure AD Domain 查詢
使用 AzureAD PowerShell 模組查詢租戶下所有已驗證的網域清單,可確認哪些網域可作為 UPN 後綴。
前置需求: 執行前需先安裝 AzureAD PowerShell 模組,並具備 Azure AD 讀取權限。
關鍵要點
- ldapsearch 使用 Simple Authentication(
-x)時,密碼以明文傳輸至 LDAP Server,應確保在安全網段內操作 - AD 的 Search Base DN 格式為
DC=domain,DC=corp(將網域名稱按.切分,每段加DC=前綴) userPrincipalName對應使用者的登入 Email 格式(例如user@wiwynn.com)- 若 ldapsearch 無回應,優先確認網路連通性(port 389 是否開放)與 Bind DN 格式
實際應用
- 排查 GitLab LDAP 認證失敗:先用 ldapsearch 確認帳號存在,再排查 GitLab 設定(詳見 GitLab LDAP 設定更新)
- 驗證 PostgreSQL LDAP 認證設定的帳號格式是否正確
- 年度帳密更新前,先確認 LDAP bind 帳號仍有效(詳見 維運 SOP:憑證與帳密更新)
部署設定參考
以下為實際部署時使用的完整設定,供日後查詢與複製使用。
環境參數
| 主機名稱 | IP |
|---|---|
| wyhqadsrv01.wiwynn.corp | 10.247.1.10 |
| wymyadsrv02.wiwynn.corp | 10.30.244.40 |
| 項目 | 值 |
|---|---|
| Bind DN | assistant@wiwynn.com |
| Bind Password | X2gsegt052z@ |
| Search Base DN | DC=wiwynn,DC=corp |
操作指令
bash
# 查詢特定使用者(依 userPrincipalName)
ldapsearch \
-H ldap://wyhqadsrv01.wiwynn.corp \
-x \
-D 'assistant@wiwynn.com' \
-w 'X2gsegt052z@' \
-b 'DC=wiwynn,DC=corp' \
"(&(objectclass=user)(userPrincipalName=jeremy_lai@wiwynn.com))"
# 列出回傳的主要屬性(一般不需全部屬性)
ldapsearch \
-H ldap://wyhqadsrv01.wiwynn.corp \
-x \
-D 'assistant@wiwynn.com' \
-w 'X2gsegt052z@' \
-b 'DC=wiwynn,DC=corp' \
"(&(objectclass=user)(userPrincipalName=jeremy_lai@wiwynn.com))" \
cn mail displayName userPrincipalName sAMAccountNamepowershell
# 查詢 Azure AD Domain 清單(PowerShell)
Connect-AzureAD
Get-AzureADDomain相關概念
- GitLab LDAP 設定更新 — GitLab 更新 LDAP 認證設定的三步驟 SOP
- 維運 SOP:憑證與帳密更新 — 多系統年度維運,含 LDAP 帳密同步更新
- Azure App Registration — M365 MCP Server SOP — Azure AD App Registration 與權限設定
來源
- ldapsearch 官方文件 — ldapsearch 參數完整說明
- Search Active Directory with ldapsearch — ldapsearch 查詢 AD 實務教學
- Get-AzureADDomain 官方文件 — PowerShell 查詢 Azure AD Domain
- 原始素材:AAD & LDAP 查詢筆記
- 原始素材:LDAP & Active Directory 查詢指南