Skip to content

AAD / LDAP 查詢工具指南

以 ldapsearch 查詢 Active Directory 使用者資訊,以及透過 Azure AD PowerShell 查詢網域資訊的操作參考。

概述

在維運與開發情境中,有時需要直接查詢 AD(Active Directory)或 Azure AD 的使用者資訊,例如:驗證帳號是否存在、確認 UPN(UserPrincipalName)格式、排查 LDAP 認證失敗問題。

本文記錄兩種查詢途徑:

  1. ldapsearch(Linux CLI):直接透過 LDAP 協定查詢 AD Server,適合從 VM 或 K8s Pod 進行排查
  2. Azure AD PowerShell(Windows):查詢 Azure AD Domain 清單,適合確認租戶的驗證網域設定

核心內容

ldapsearch 查詢 Active Directory

ldapsearch 是 OpenLDAP 的命令列工具,可以向任何 LDAP Server(包括 Windows AD)發送查詢。

關鍵參數說明:

參數說明
-HLDAP Server URI(例如 ldap://server.domain.corp
-x使用 Simple Authentication(非 SASL,最常用)
-DBind DN:登入帳號(格式:user@domain.com
-wBind 密碼
-bSearch 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.corp10.247.1.10
wymyadsrv02.wiwynn.corp10.30.244.40
項目
Bind DNassistant@wiwynn.com
Bind PasswordX2gsegt052z@
Search Base DNDC=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 sAMAccountName
powershell
# 查詢 Azure AD Domain 清單(PowerShell)
Connect-AzureAD
Get-AzureADDomain

相關概念

來源