Windows Server для самых маленьких. Часть 4: первый контроллер домена

В прошлой части мы разобрали, что такое лес, домен, разделы каталога и глобальный каталог. Сегодня всё это появится на диске сервера dc1, который мы подготовили в части 1. Повышение сервера до контроллера — операция на десять минут и одну команду, но за эти десять минут меняется почти всё: исчезает локальная база учётных записей, появляются база каталога, DNS-зоны, общие папки и шесть новых служб. Пройдём по шагам и посмотрим на каждый.


Имя домена

Единственное решение, которое потом не изменить без боли, — имя домена. Переименование домена технически возможно (rendom), но на практике его не делает никто. Правила такие.

Домен должен быть поддоменом имени, которым вы владеете. corp.example.com, ad.example.com, internal.example.com — хорошо, если example.com зарегистрирован на организацию. Тогда имена серверов dc1.corp.example.com глобально уникальны, для них можно получить публично доверенные сертификаты, и ни с чьей чужой зоной они не пересекутся.

Не используйте .local и другие несуществующие TLD. Так советовали в 2000-х, и до сих пор встречаются домены company.local. Проблем две: .local зарезервирован под mDNS (протокол разрешения имён без сервера, которым пользуются macOS и Linux в локальной сети, и у них .local разрешается не через ваш DNS), а публичные удостоверяющие центры с 2015 года не выдают сертификаты на имена в несуществующих зонах. Домены .lan, .internal, .corp формально не заняты, но лишены первого преимущества: однажды ICANN может делегировать такой TLD, как случилось с .dev.

Не делайте имя домена равным публичному сайту. Домен example.com при www.example.com в интернете приводит к тому, что внутри сети имя example.com разрешается в контроллеры (они регистрируют A-запись самого имени домена, и убрать её нельзя), а сайт по короткому имени перестаёт открываться. Это называется split-brain DNS, и жить с ним можно, но незачем.

NetBIOS-имя — до 15 символов, по умолчанию первая метка DNS-имени в верхнем регистре: CORP. Оно видно пользователям в формате CORP\alice и на экране входа, и его тоже потом не поменять.

Итого: лес и домен corp.example.com, NetBIOS CORP.


Установка роли

Роль ставится без перезагрузки, как любая другая:

PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    No             Success        {Active Directory Domain Services, Group Policy Management, Remote Server Administration Tools, ...}

Это только двоичные файлы: службы каталога ещё не настроены и не запущены. -IncludeManagementTools добавляет модули PowerShell ActiveDirectory, ADDSDeployment, GroupPolicy и, на Desktop Experience, оснастки. Роль DNS Server мы отдельно не ставим: команда повышения установит её сама.

Что появилось:

PS C:\> Get-Command -Module ADDSDeployment

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Add-ADDSReadOnlyDomainControllerAccount            1.0.0.0    ADDSDeployment
Cmdlet          Install-ADDSDomain                                 1.0.0.0    ADDSDeployment
Cmdlet          Install-ADDSDomainController                       1.0.0.0    ADDSDeployment
Cmdlet          Install-ADDSForest                                 1.0.0.0    ADDSDeployment
Cmdlet          Test-ADDSDomainControllerInstallation              1.0.0.0    ADDSDeployment
Cmdlet          Test-ADDSDomainControllerUninstallation            1.0.0.0    ADDSDeployment
Cmdlet          Test-ADDSDomainInstallation                        1.0.0.0    ADDSDeployment
Cmdlet          Test-ADDSForestInstallation                        1.0.0.0    ADDSDeployment
Cmdlet          Test-ADDSReadOnlyDomainControllerAccountCreation   1.0.0.0    ADDSDeployment
Cmdlet          Uninstall-ADDSDomainController                     1.0.0.0    ADDSDeployment

Модуль из десяти командлетов, по одному на каждый сценарий: новый лес, новый домен в существующем лесу, дополнительный контроллер, контроллер только для чтения, понижение. В этой серии мы воспользуемся всеми, кроме Install-ADDSDomain. До Windows Server 2012 то же самое делала утилита dcpromo с файлом ответов, и слово «dcpromo» до сих пор означает «повысить до контроллера».


Параметры повышения

Install-ADDSForest принимает два десятка параметров. Важные:

Параметр Что задаёт Наш выбор
-DomainName DNS-имя корневого домена леса corp.example.com
-DomainNetbiosName NetBIOS-имя; без параметра — первая метка CORP
-ForestMode, -DomainMode функциональные уровни леса и домена WinThreshold (2016)
-InstallDns поставить роль DNS и создать зоны да
-CreateDnsDelegation создать делегирование в родительской зоне нет: родительская зона не у нас
-DatabasePath, -LogPath, -SysvolPath где лежать NTDS и SYSVOL по умолчанию, C:\Windows\NTDS и C:\Windows\SYSVOL
-SafeModeAdministratorPassword пароль режима восстановления служб каталогов задаём
-NoRebootOnCompletion не перезагружаться автоматически нет, пусть перезагрузится
-Force не задавать вопросов да, в скрипте

Функциональный уровень определяет, какие возможности каталога включены, и ограничивает, какие версии Windows Server могут быть контроллерами: при уровне 2016 контроллером не станет Windows Server 2012 R2. Уровни бывают Win2008, Win2008R2, Win2012, Win2012R2, WinThreshold (так в коде называется 2016; отдельных уровней для 2019 и 2022 нет) и, начиная с Windows Server 2025, Win2025. Уровень 2025 требует, чтобы все контроллеры были 2025, и нужен только для новых возможностей этой версии — страниц базы по 32 КБ вместо 8 и некоторых улучшений Kerberos. Для лабораторного леса из одних 2025 его можно выбрать сразу; для организации, где через год может понадобиться контроллер на 2022, лучше 2016. Поднять уровень можно всегда, опустить — нет.

Пароль DSRM (Directory Services Restore Mode) — отдельный пароль, не связанный ни с одной учётной записью домена. Контроллер можно загрузить в особый безопасный режим, где служба каталога не запущена, а база доступна как файл: так восстанавливают каталог из резервной копии или чинят повреждённую базу. Войти в этот режим можно только локальным Administrator с паролем DSRM, потому что доменные учётные записи в нём не работают: каталог не запущен. Пароль нужно записать туда же, куда вы записываете пароли от гипервизора: он понадобится в самый плохой день, и сменить его без работающего каталога нельзя. Пока каталог работает, сменить можно: ntdsutil "set dsrm password" "reset password on server null" q q.

Пути. В продуктивной среде базу и журналы кладут на отдельный диск по тем же причинам, что у любой базы данных: место и производительность. Для лаборатории хватит системного диска.


Проверка и повышение

У каждого Install-* в модуле есть парный Test-*, который делает все проверки, но ничего не меняет:

PS C:\> $dsrm = Read-Host -AsSecureString 'DSRM password'
PS C:\> Test-ADDSForestInstallation -DomainName corp.example.com -DomainNetbiosName CORP -ForestMode WinThreshold -DomainMode WinThreshold -InstallDns -SafeModeAdministratorPassword $dsrm

WARNING: Windows Server 2025 domain controllers have a default for the security setting named "Allow cryptography algorithms compatible with Windows NT 4.0" that prevents weaker cryptography algorithms when establishing security channel sessions.
For more information about this setting, see Knowledge Base article 942564 (http://go.microsoft.com/fwlink/?LinkId=104751).
WARNING: A delegation for this DNS server cannot be created because the authoritative parent zone cannot be found or it does not run Windows DNS server. If you are integrating with an existing DNS infrastructure, you should manually create a delegation to this DNS server in the parent zone to ensure reliable name resolution from outside the domain "corp.example.com". Otherwise, no action is required.

Message                                                                              Context                                   RebootRequired  Status
-------                                                                              -------                                   --------------  ------
Operation completed successfully                                                     Test.VerifyDcPromoCore.DCPromo.General.80          False  Success

Оба предупреждения ожидаемы. Первое говорит, что контроллер откажет в защищённом канале клиентам с алгоритмами уровня NT 4.0, и это правильно. Второе — что он не смог создать делегирование corp в зоне example.com: зона example.com живёт у регистратора или хостера, а не на этом сервере. Делегирование нужно, если имена corp.example.com должны разрешаться из интернета; обычно не нужно.

Если Test- прошёл, выполняем то же самое без Test-:

PS C:\> Install-ADDSForest -DomainName corp.example.com -DomainNetbiosName CORP -ForestMode WinThreshold -DomainMode WinThreshold -InstallDns -CreateDnsDelegation:$false -SafeModeAdministratorPassword $dsrm -Force

WARNING: Windows Server 2025 domain controllers have a default for the security setting ...
WARNING: A delegation for this DNS server cannot be created ...

Message                                                     Context                 RebootRequired  Status
-------                                                     -------                 --------------  ------
You must restart this computer to complete the operation.   DCPromo.General.4                 True  Success

Между предупреждениями и итоговой таблицей на экране несколько минут бегут строки прогресса: «Validating environment and user input», «Creating the NTDS settings object», «Configuring the DNS Server service», «Replicating the schema directory partition», «Creating the SYSVOL directory». После итоговой таблицы сервер перезагружается сам.


Что произошло за эти минуты

Разберём журнал, который оставляет повышение: C:\Windows\debug\DCPROMO.LOG — построчный протокол всего, что сделал мастер, и журнал событий Directory Service. Вот последовательность.

1. База. Из шаблона C:\Windows\System32\schema.ini создана C:\Windows\NTDS\ntds.dit с пятью разделами: схема (около 1500 классов и атрибутов базовой схемы), конфигурация леса, домен corp.example.com, DomainDnsZones и ForestDnsZones. У леса есть и один домен — он корневой, а значит, в нём созданы группы Enterprise Admins и Schema Admins.

2. Объекты домена. Контейнеры Users, Computers, Builtin, System, ForeignSecurityPrincipals, Managed Service Accounts, Program Data, OU Domain Controllers. Встроенные пользователи Administrator, Guest, krbtgt и группы — Domain Admins, Domain Users, Domain Computers, Domain Controllers, DnsAdmins и ещё три десятка. Два объекта групповой политики: Default Domain Policy и Default Domain Controllers Policy.

3. Учётные записи. Локальная база SAM на контроллере перестаёт использоваться. Локальный Administrator с его паролем, который вы задали при установке Windows, становится доменным CORP\Administrator: пароль тот же, SID — новый, с RID 500 в домене. Локальных пользователей и групп на контроллере с этого момента нет: Get-LocalUser вернёт ошибку. Сам сервер получает учётную запись компьютера DC1$ в OU Domain Controllers.

4. Kerberos. Создана учётная запись krbtgt со случайным паролем — это ключ, которым KDC шифрует все выдаваемые билеты TGT. Создан объект настроек NTDS для контроллера в разделе конфигурации (CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,…): этот объект и делает сервер контроллером с точки зрения остальных.

5. Роли. Все пять ролей FSMO — Schema Master, Domain Naming Master, PDC Emulator, RID Master, Infrastructure Master — назначены первому контроллеру, потому что других нет. Он же глобальный каталог. Что это за роли и почему их пять, разберём в части 17.

6. SYSVOL. Создана папка C:\Windows\SYSVOL, в ней папка домена с двумя политиками по умолчанию, настроена репликация DFS-R (пока в одиночестве) и опубликованы общие папки SYSVOL и NETLOGON.

7. DNS. Установлена роль DNS Server. Созданы зоны corp.example.com (в разделе DomainDnsZones) и _msdcs.corp.example.com (в ForestDnsZones), обе интегрированные в каталог, с безопасными динамическими обновлениями. Клиент DNS сервера переключён на 127.0.0.1. После перезагрузки Netlogon зарегистрирует в зонах SRV-записи и A-запись контроллера.

8. Сайт. Создан первый сайт Default-First-Site-Name, и контроллер помещён в него. Подсетей у сайта нет; мы переименуем его в Office и привяжем 192.168.1.0/24 в части про репликацию.

9. Службы. Включены и настроены на автозапуск: NTDS (Active Directory Domain Services, работает внутри lsass.exe), Kdc (Kerberos Key Distribution Center), Netlogon, DNS, DFSR, IsmServ (межсайтовый обмен сообщениями), ADWS (Active Directory Web Services). Служба времени W32Time переконфигурирована: контроллер с ролью PDC становится источником времени для домена.


После перезагрузки

Входим как CORP\Administrator с тем паролем, что был у локального администратора. На экране входа Server Core покажет домен в приглашении, Desktop Experience — в поле имени.

Первая проверка — что всё запустилось:

PS C:\> Get-Service NTDS, Kdc, Netlogon, DNS, DFSR, ADWS, W32Time | Format-Table Name, Status, StartType -AutoSize

Name     Status StartType
----     ------ ---------
NTDS    Running Automatic
Kdc     Running Automatic
Netlogon Running Automatic
DNS     Running Automatic
DFSR    Running Automatic
ADWS    Running Automatic
W32Time Running Automatic

Что знает о себе домен:

PS C:\> Get-ADDomain | Select-Object Name, DNSRoot, NetBIOSName, DomainMode, DomainSID, PDCEmulator, RIDMaster, InfrastructureMaster, ReplicaDirectoryServers

Name                    : corp
DNSRoot                 : corp.example.com
NetBIOSName             : CORP
DomainMode              : Windows2016Domain
DomainSID               : S-1-5-21-3623811015-3361044348-30300820
PDCEmulator             : dc1.corp.example.com
RIDMaster               : dc1.corp.example.com
InfrastructureMaster    : dc1.corp.example.com
ReplicaDirectoryServers : {dc1.corp.example.com}

PS C:\> Get-ADForest | Select-Object Name, ForestMode, RootDomain, SchemaMaster, DomainNamingMaster, GlobalCatalogs, Sites

Name               : corp.example.com
ForestMode         : Windows2016Forest
RootDomain         : corp.example.com
SchemaMaster       : dc1.corp.example.com
DomainNamingMaster : dc1.corp.example.com
GlobalCatalogs     : {dc1.corp.example.com}
Sites              : {Default-First-Site-Name}

Пять ролей на одном сервере, один глобальный каталог, один сайт. DomainSID — тот префикс, с которого начинаются SID всех пользователей и групп этого домена, из прошлой части.

Сам контроллер:

PS C:\> Get-ADDomainController | Select-Object HostName, IPv4Address, Site, IsGlobalCatalog, IsReadOnly, OperatingSystem, OperationMasterRoles

HostName             : dc1.corp.example.com
IPv4Address          : 192.168.1.10
Site                 : Default-First-Site-Name
IsGlobalCatalog      : True
IsReadOnly           : False
OperatingSystem      : Windows Server 2025 Standard Evaluation
OperationMasterRoles : {SchemaMaster, DomainNamingMaster, PDCEmulator, RIDMaster, InfrastructureMaster}

Файлы на диске, как обещано в прошлой части:

PS C:\> Get-ChildItem C:\Windows\NTDS | Select-Object Name, Length

Name        Length
----        ------
edb.chk       8192
edb.log   10485760
edb00001.log 10485760
ntds.dit  25165824
temp.edb   2162688

PS C:\> Get-SmbShare | Where-Object Name -in 'SYSVOL','NETLOGON' | Select-Object Name, Path

Name     Path
----     ----
NETLOGON C:\Windows\SYSVOL\sysvol\corp.example.com\SCRIPTS
SYSVOL   C:\Windows\SYSVOL\sysvol

База в 25 МБ — это пустой домен: схема, конфигурация и сотня объектов. С тысячей пользователей она вырастет до сотен мегабайт, с Exchange в схеме — ещё в несколько раз.

DNS:

PS C:\> Get-DnsServerZone | Format-Table ZoneName, ZoneType, IsDsIntegrated, ReplicationScope, DynamicUpdate -AutoSize

ZoneName                   ZoneType IsDsIntegrated ReplicationScope DynamicUpdate
--------                   -------- -------------- ---------------- -------------
_msdcs.corp.example.com    Primary            True Forest           Secure
corp.example.com           Primary            True Domain           Secure
TrustAnchors               Primary            True Forest           None

PS C:\> Get-DnsServerResourceRecord -ZoneName _msdcs.corp.example.com -RRType Srv | Format-Table HostName, @{n='Target'; e={$_.RecordData.DomainName}}, @{n='Port'; e={$_.RecordData.Port}} -AutoSize

HostName                                   Target                 Port
--------                                   ------                 ----
_ldap._tcp.dc                              dc1.corp.example.com.   389
_ldap._tcp.Default-First-Site-Name._sites.dc dc1.corp.example.com. 389
_kerberos._tcp.dc                          dc1.corp.example.com.    88
_kerberos._tcp.Default-First-Site-Name._sites.dc dc1.corp.example.com. 88
_ldap._tcp.gc                              dc1.corp.example.com.  3268
_ldap._tcp.Default-First-Site-Name._sites.gc dc1.corp.example.com. 3268
_ldap._tcp.pdc                             dc1.corp.example.com.   389
_ldap._tcp.7a1b2c3d-4e5f-6071-8293-a4b5c6d7e8f9.domains dc1.corp.example.com. 389

Две зоны домена и служебная TrustAnchors для DNSSEC. Записи _msdcs — те самые из прошлой части; их зарегистрировал Netlogon при старте, и он будет перерегистрировать их каждый час. Если какая-то запись пропадёт, nltest /dsregdns заставит его сделать это сейчас.


dcdiag

Главный инструмент проверки контроллера — dcdiag, набор из тридцати тестов, которые проверяют всё от подключения до репликации и DNS. На свежем контроллере он должен быть зелёным целиком:

PS C:\> dcdiag

Directory Server Diagnosis

Performing initial setup:
   Trying to find home server...
   Home Server = dc1
   * Identified AD Forest.
   Done gathering initial info.

Doing initial required tests

   Testing server: Default-First-Site-Name\DC1
      Starting test: Connectivity
         ......................... DC1 passed test Connectivity

Doing primary tests

   Testing server: Default-First-Site-Name\DC1
      Starting test: Advertising
         ......................... DC1 passed test Advertising
      Starting test: FrsEvent
         ......................... DC1 passed test FrsEvent
      Starting test: DFSREvent
         ......................... DC1 passed test DFSREvent
      Starting test: SysVolCheck
         ......................... DC1 passed test SysVolCheck
      Starting test: KccEvent
         ......................... DC1 passed test KccEvent
      Starting test: KnowsOfRoleHolders
         ......................... DC1 passed test KnowsOfRoleHolders
      Starting test: MachineAccount
         ......................... DC1 passed test MachineAccount
      Starting test: NCSecDesc
         ......................... DC1 passed test NCSecDesc
      Starting test: NetLogons
         ......................... DC1 passed test NetLogons
      Starting test: ObjectsReplicated
         ......................... DC1 passed test ObjectsReplicated
      Starting test: Replications
         ......................... DC1 passed test Replications
      Starting test: RidManager
         ......................... DC1 passed test RidManager
      Starting test: Services
         ......................... DC1 passed test Services
      Starting test: SystemLog
         ......................... DC1 passed test SystemLog
      Starting test: VerifyReferences
         ......................... DC1 passed test VerifyReferences

   Running partition tests on : ForestDnsZones
      ...
   Running partition tests on : Schema
      ...
   Running enterprise tests on : corp.example.com
      Starting test: LocatorCheck
         ......................... corp.example.com passed test LocatorCheck
      Starting test: Intersite
         ......................... corp.example.com passed test Intersite

Что проверяет каждый важный тест, и что означает его падение:

Тест Что проверяет
Connectivity контроллер находится по DNS и отвечает по LDAP и RPC
Advertising контроллер объявляет себя как DC, GC, KDC, источник времени (флаги из nltest /dsgetdc)
SysVolCheck, NetLogons общие папки SYSVOL и NETLOGON опубликованы и доступны
KccEvent, Replications, ObjectsReplicated топология репликации построена, партнёры отвечают, объекты реплицированы
KnowsOfRoleHolders, RidManager контроллер знает владельцев FSMO; у него есть пул RID для новых объектов
MachineAccount учётная запись DC1$ на месте, с правильными флагами и SPN
Services все службы из списка выше запущены
SystemLog, DFSREvent, FrsEvent в системном журнале и журнале DFSR нет ошибок за последний час
LocatorCheck в лесу находятся владельцы PDC, GC, KDC, источник времени

Один тест по умолчанию не запускается — DNS, потому что долгий. Он отдельно и обязателен после установки:

PS C:\> dcdiag /test:dns /v

   Testing server: Default-First-Site-Name\DC1
      Starting test: DNS
         DNS Tests are running and not hung. Please wait a few minutes...
         ...
         Summary of DNS test results:

                                            Auth Basc Forw Del  Dyn  RReg Ext
            _________________________________________________________________
            Domain: corp.example.com
               dc1                          PASS PASS WARN PASS PASS PASS n/a
         ......................... corp.example.com passed test DNS

Семь подтестов: авторитетность зоны, базовая настройка, форвардеры, делегирование, динамическая регистрация, регистрация записей, внешнее имя. WARN у форвардеров — мы их ещё не настроили, и сервер ходит в интернет через корневые серверы (root hints); это работает, но в части 7 поставим форвардеры явно. Запомните этот вывод: когда через год кто-то пожалуется, что «домен медленно работает», dcdiag /test:dns будет первым, что вы запустите.

Два менее формальных признака здорового контроллера — в журнале Directory Service событие 1000 («Microsoft Active Directory Domain Services startup complete») и 1394 («All problems preventing updates to the Active Directory Domain Services database have been cleared»), а в журнале DFS Replication событие 4602 («The DFS Replication service successfully initialized the SYSVOL replicated folder»):

PS C:\> Get-WinEvent -LogName 'Directory Service' -MaxEvents 200 | Where-Object Id -in 1000, 1394 | Format-Table TimeCreated, Id, Message -Wrap
PS C:\> Get-WinEvent -LogName 'DFS Replication' | Where-Object Id -eq 4602 | Select-Object TimeCreated, Id

Пока 4602 не появилось, папки SYSVOL и NETLOGON не публикуются, и контроллер не объявляет себя клиентам. На первом контроллере это занимает секунды, на дополнительном зависит от репликации.


Клиент DNS контроллера

Повышение переключило DNS-клиент сервера на 127.0.0.1. Это работает, но нам нужнее явный адрес: в части про второй контроллер мы поставим первым DNS-сервером партнёра, а себя — вторым, и объясним, почему. Пока ставим себя:

PS C:\> Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 192.168.1.10
PS C:\> Register-DnsClient
PS C:\> Resolve-DnsName dc1.corp.example.com

Name                           Type   TTL   Section    IPAddress
----                           ----   ---   -------    ---------
dc1.corp.example.com           A      1200  Answer     192.168.1.10

И форвардер на роутер или DNS провайдера, чтобы имена из интернета разрешались через него, а не через корневые серверы напрямую:

PS C:\> Add-DnsServerForwarder -IPAddress 192.168.1.1
PS C:\> Resolve-DnsName www.vitaliy.org -Server 192.168.1.10 | Select-Object Name, IPAddress

Подробно про зоны, форвардеры и всё остальное — в части 7, но без этой строки клиенты домена, которые мы сейчас подключим, останутся без интернета по именам.


Первые члены домена

Контроллер без клиентов бесполезен. Вводим в домен рядовой сервер srv1 и рабочую станцию ws1. На каждом из них два шага, и первый важнее второго.

Шаг 1: DNS. Машина должна спрашивать имена у контроллера. С DNS от роутера она домен не найдёт, как бы правильно всё остальное ни было настроено — вспомните DC Locator из прошлой части.

PS C:\> Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 192.168.1.10
PS C:\> Resolve-DnsName _ldap._tcp.dc._msdcs.corp.example.com -Type SRV | Select-Object NameTarget, Port

NameTarget           Port
----------           ----
dc1.corp.example.com  389

Если SRV-запись нашлась, домен найдётся. В сети с DHCP это делает опция 6 в области, и в части 8 мы её настроим, чтобы не ходить по машинам руками.

Шаг 2: вступление.

PS C:\> Add-Computer -DomainName corp.example.com -Credential CORP\Administrator -Restart

Команда спросит пароль, создаст в каталоге учётную запись SRV1$ в контейнере Computers (или в OU из параметра -OUPath), установит для машины защищённый канал с контроллером, запишет на машину секрет учётной записи компьютера и перезагрузит. При вступлении машина сама регистрирует свою A-запись в зоне corp.example.com, получает DNS-суффикс corp.example.com и переводит сетевой профиль интерфейса в Domain.

На контроллере новые объекты видны сразу:

PS C:\> Get-ADComputer -Filter * | Select-Object Name, DNSHostName, Enabled, DistinguishedName

Name DNSHostName          Enabled DistinguishedName
---- -----------          ------- -----------------
DC1  dc1.corp.example.com    True CN=DC1,OU=Domain Controllers,DC=corp,DC=example,DC=com
SRV1 srv1.corp.example.com   True CN=SRV1,CN=Computers,DC=corp,DC=example,DC=com
WS1  ws1.corp.example.com    True CN=WS1,CN=Computers,DC=corp,DC=example,DC=com

Проверка защищённого канала с члена домена, если что-то пошло не так: Test-ComputerSecureChannel -Verbose, а восстановление без вывода из домена — Test-ComputerSecureChannel -Repair -Credential CORP\Administrator. Эта команда чинит ошибку «The trust relationship between this workstation and the primary domain failed», которую рано или поздно видит каждый, кто откатывал виртуальную машину к старому снимку: машина меняет пароль своей учётной записи раз в 30 дней, и после отката старый пароль контроллеру уже не известен.


Первая учётная запись

Работать под CORP\Administrator не нужно: это учётная запись с RID 500, которую не блокирует политика блокировок, которую видно в каждом журнале как «Administrator» без имени человека и которую нельзя удалить. Правило простое: у каждого администратора своя именная учётная запись в Domain Admins, а встроенная получает длинный пароль и лежит в сейфе.

PS C:\> New-ADUser -Name 'Alice Admin' -SamAccountName alice.admin -UserPrincipalName alice.admin@corp.example.com -AccountPassword (Read-Host -AsSecureString 'Password') -Enabled $true
PS C:\> Add-ADGroupMember -Identity 'Domain Admins' -Members alice.admin
PS C:\> Get-ADGroupMember 'Domain Admins' | Select-Object Name, SamAccountName

Name          SamAccountName
----          --------------
Administrator Administrator
Alice Admin   alice.admin

Отдельная учётная запись для повседневной работы без прав администратора появится у Alice в части про PowerShell для AD, где мы разберём модуль ActiveDirectory целиком. А пока — выйти из Administrator, войти как CORP\alice.admin и убедиться, что домен принимает:

PS C:\> whoami /groups | Select-String 'Domain Admins'
CORP\Domain Admins   Group   S-1-5-21-3623811015-3361044348-30300820-512   Mandatory group, Enabled by default, Enabled group

Почему первый контроллер — самый важный сервер

На этом сервере сейчас сходится всё: он единственный хранит каталог, единственный выдаёт билеты Kerberos, единственный отвечает на DNS-запросы домена, он источник времени для всех членов домена, и он владеет всеми пятью ролями FSMO. Если он выключится, ни один пользователь не войдёт ни на одну машину домена (кешированные учётные данные позволят войти локально на рабочую станцию, но ни одного сетевого ресурса она не откроет).

Такое положение терпимо ровно до части 10, где появится второй контроллер. До этого момента стоит сделать две вещи: не экспериментировать на dc1 с тем, что можно сделать на srv1, и записать пароль DSRM. Ещё одна привычка, которую стоит завести сейчас: контроллер домена — это контроллер домена, и ничего больше. На нём не ставят SQL Server, не поднимают веб-приложения, не держат файловые шары с документами. Исключения — DNS и DHCP, которые с контроллером традиционно живут вместе и о которых следующие после LDAP и Kerberos части.


Каталог есть, и в нём уже сотня объектов, созданных без нашего участия. Самое время заглянуть внутрь и посмотреть, как они устроены на самом деле — не глазами оснастки, а глазами протокола, по которому с ними работает любая программа.

Дальше — Часть 5: LDAP изнутри. Как устроено имя объекта и из чего состоит атрибут, что такое RootDSE и зачем он отвечает всем без пароля, как писать LDAP-фильтры, как читать каталог через ldp.exe и ADSI Edit, что лежит в CN=System и в схеме, и какие правки там ломают домен без возможности отката.


Серия «Windows Server для самых маленьких»

  1. Windows Server с нуля — редакции, Server Core, установка, первые команды PowerShell, имя, сеть, время, обновления, роли.
  2. Диски и сеть: diskpart, netsh и их PowerShell-замены — разметка дисков и сетевой стек через старые утилиты и модули Storage, NetTCPIP, NetSecurity, и что умеют только утилиты.
  3. Как устроен Active Directory — лес, домен, OU, объекты, разделы каталога, глобальный каталог, SYSVOL, DC Locator и протоколы домена.
  4. Первый контроллер домена (эта статья) — имя домена, роль AD DS, Install-ADDSForest и что происходит при повышении, dcdiag, первые члены домена и первая учётная запись администратора.
  5. LDAP изнутри — операции протокола, имена и атрибуты, схема, RootDSE, фильтры, ldp.exe и ADSI Edit, и что в каталоге нельзя трогать.

Оставить комментарий могут только зарегистрированные пользователи.

Войдите на сайт или зарегистрируйтесь, чтобы оставить комментарий.