Už jsem kdysi psal o DNSku ve vztahu k Active Directory. Jak ale zjistíte, které DC (Domain Controller, řadič domény) se právě používá ze stanice nebo serveru? Windows totiž nepoužívají trvale všechna dostupná DC, ale vždycky se delší dobu (zjednodušeně řečeno) připojují stále na jedno a to stejné. Jsou ale dvě věci základní komponenty, které možná používají různá DC. Jedním je přístup na LDAP, Kerberos a NTLM a druhým přístup na SYSVOL.
DC pro LDAP, Kerberos a NTLM přístup
Do LDAPu počítač chodí zjišťovat údaje z Active Directory. Jsou to věci jako zobrazované jméno uživatele (displayName), které vidíte v nabídce start, jména uživatelských účtů, když se díváte na NTFS zabezpečení, nebo třeba když přidáváte uživatele do lokální skupiny. Outlook 2007 si z ADčka pomocí LDAPu čte seznam svých Client Access Serverů (CAS) a když už je připojen, tak by si z něho stahoval Global Address List (GAL) - tedy pokud byste měli vypnutý takový ten Cached Mode, jako je třeba na Terminal Serverech. Ostatní servery to používají pro všechny služby, které mají s Active Directory co do činění. Prakticky všechny služby něco v ADčku hledají - jen co mě teď hned napadne:
- NPS (dříve IAS) a TMG (dříve ISA), RD Gateway (dříve TS Gateway) - parametry účtu uživatele, speciálně záložka Dial-In a členství ve skupinách
- Remote Desktop Server (dříve Terminal Server) - vyhledává licenční server a čte si parametry účtu jako je Remote Control apod.
- DHCP server - si kontroluje autorizaci
- DNS server - no dobrá, ten to dělá, jen když běží sám na DC a tak žádné vzdálené nepotřebuje
- IIS server - pokud se přihlašujete SSL certifikátem, tak zjišťuje seznam skupin ve který ten uživatel je
- WDS server - hledá si u účtů počítačů jejich MAC adresy (nebo GUIDy)
Samozřejmě se o DC ověřujete pomocí protokolů jako je Kerberos a NTLM. Takže na nějaké DC musí mít přístup i klient, ale obvykle i server, na který zrovna přistupujete. Jen pro zajímavost, členství ve skupinách se, s výjimkou speciálních případů, nezjišťuje přes LDAP, ale je to součástí již zmíněných autentizací jako je Kerberos nebo NTLM.
Další klientské služby, o kterých nejspíš ani nevíte, které potřebují LDAP jsou například:
- Group Policy klient - vám stahuje politiky
- Certificate Autoenrollment client - vám vydává certifikáty z doménové certifikační autority
- DFS klient - v doméně používate DFS (asi lépe řečeno DFS Namespaces) i když ho nemáte nakonfigurováno, protože na Group Policy se přistupuje přes DFS cestu
- Secure Channel - služba Netlogon ho používá na změnu hesla počítače, změny hesla uživatele pokud zmáčkete CTRL-ALT-DEL a taky na tzv. PAC validation, pokud přistupujete na službu, která běží pod účtem uživatele (a přitom nepoužívá Kernel Mode Authentication ani Managed Service Account).
No takže se už konečně pojďme podívat, jak zjistíte, ke kterému DC se všechny tyto přístupy vztahují. Výchozí Domain Controller (DC) zjišťuje služba Netlogon. Má takovou součástku zvanou DC Locator, která to celé provádí.
Na průzkum potřebujete NLTEST, který je buď součástí Support Tools (pro Windows Server 2003 a Windows XP a starší), nebo Remote Server Administration Tools (RSAT, je součástí nástrojů pro Active Directory Domain Services) pro Windows Server 2008 a Windows Vista a novější (ve Windows Server 2008 R2 a Windows 7 je to naštěstí už built-in):
NLTEST /SC_QUERY:<jmeno-domeny>
Předchozí příkaz vám zjistí (vůbec bez doteku sítě), jaký byl stav posledního pokusu o přístup na DC. Pokud chcete ověřít, že to pořád ještě funguje, použijte:
NLTEST /SC_VERIFY:<jmeno-domeny>
A pokud byste si chtěli přepnout stroj, aby používal jiné DC, tak použijte
NLTEST /SC_RESET:<jmeno-domeny>
Ještě bych upozornil, že příkaz SET vám může vypsat proměnnou LOGONSERVER, ve které je také napsáno jméno DC pomocí kterého jste se původně přihlásili. Jenže to je možná stará informace. Netlogon se klidně v průběhu života přepne někam jinam, ale proměnnou LOGONSERVER to už změnit nemůže. Zkuste se třeba přihlásit bez možnosti přístupu do sítě (z keše). Stejně uvidíte, že LOGONSERVER je obsahuje jméno posledního DCčka, když jste se přihlašovali naposledy on-line (takhle se to chová od Windows XP, ve dvoutisícovkách to ještě bylo prázdné).
Vyhledávání DC pomocí DNS
Předchozí příkazy používaly DNS dotazy k tomu, aby vůbec nějaká DCčka našly. Pokud si to chcete vyzkoušet sami, můžete klidně podobný dotaz udělat pomocí NSLOOKUP a ověřit si, že to skutečně funguje. Pokud máte špatně DNS, tak ani Netlogon a ani NLTEST fungovat nebudou. V následujícím příkazu si musíte opravit jméno domény.
NSLOOKUP
SET Q=SRV
_ldap._tcp.dc._msdcs.<vase-domena.local>
Předchozí příkaz vyhledá všechna DC, která jsou vůbec v AD viditelná. Pokud chcete jenom DCčka z vaší sítě (site), tak musíte dotaz trošku upravit.
NSLOOKUP
SET Q=SRV
_ldap._tcp.<vase-sajta>._sites.dc._msdcs.<vase-domena.local>
No dobrá, vaši sajtu zjistíte pomocí
NLTEST /DSGETSITE
Nebo se můžete podívat do registrů do klíče
HKLM\System\CurrentControlSet\Services\Netlogon\Parameters\DynamicSiteName
Přístup na SYSVOL
Stanice stahuje z DC ještě jednu věc. Zásady skupin (Group Policy). To se ale dělá pomocí DFS a sdílených souborů (sdílené soubory jsou Server Message Block (SMB) neboli Common Internet File System (CIFS) protokol a používají buď TCP 445, nebo prehistorický TCP 139). Nejprve si pomocí předchozího LDAP přístupu zjistí, jaké ty objekty vlastně potřebuje. To je tedy pořád ten předchozí případ. Potom si pomocí DFS zjistí, ze kterého DC to vlastně bude stahovat. DFS klient to také zjišťuje stejným způsobem pomocí LDAP dotazu do výchozího DC.
Jenže tady to končí. Potom se už DFS klient zeptá nějakého libovolného DC (ptá se přesněji řečeno DFS Root serveru, což je v případě SYSVOL zase nějaké DCčko) pomocí SMB protokolu, kde si má stáhnout obsah SYSVOL. Výsledkem může být úplně jiný řadič domény (DC).
Jak to omrknete? Tak to se liší podle verze systému. Nástroj DFSUTIL se dostane stejným způsobem jako byl případ NLTESTu. Prostě si buď stáhněte Support Tools, nebo si doinstalujte Remote Server Administration Tools (RSAT, tady je to součástí nástrojů pro File Server).
Pro Windows Server 2003 a Windows XP se použije:
DFSUTIL /PKTINFO
Zatímco pro Windows Server 2008 a Windows 7 a novější musíte zadat:
DFSUTIL CACHE REFERRAL
Informaci, kterou hledáte najdete v odkazu na SYSVOL adresář. U aktuálního serveru bude napsáno ACTIVE.
No a máte kompletní přehled. A přijďte na GOPAS Teched. Bute to paráda!