Настройка репликации SYSVOL с помощью утилиты Robocopy
В данном разделе приводится пример настройки односторонней репликации SYSVOL с контроллера домена под управлением ОС Windows Server на контроллеры домена Эллес с помощью утилиты Robocopy:
Рекомендуемая версия пакета inno-samba — 1.4.4 и выше.
Предварительные условия
Перед началом настройки:
-
Убедитесь, что в конфигурационном файле /app/inno-samba/etc/smb.conf на контроллерах Эллес присутствуют следующие разделы с указанными настройками:
[sysvol] path = /app/inno-samba/var/locks/sysvol read only = No [netlogon] path = /app/inno-samba/var/locks/sysvol/domain.name/scripts read only = No
-
Убедитесь, что указанные в конфигурации Эллес каталоги sysvol и netlogon доступны по сети на Windows AD DC. Для этого откройте их в проводнике:
\\SAMBA_DC_FQDN\sysvol \\SAMBA_DC_FQDN\netlogon
Настройка вручную
В данном варианте настройки все действия выполняются администратором на контроллерах домена.
Создание управляемой учетной записи (MSA)
Репликация содержимого SYSVOL должна осуществляться от имени учетной записи, входящей в группу Domain Admins.
В описываемом варианте настройке репликация будет выполняться:
-
от имени администратора домена (в данном примере — Administrator);
-
от имени управляемой учетной записи Managed Service Account (MSA, в примере используется имя msa_sysvol) или Group Managed Service Accounts (gMSA).
Для создания учетной записи MSA на контроллере Windows AD DC:
-
Выполните следующую команду в командной строке Windows PowerShell:
New-ADServiceAccount -SamAccountName "msa_sysvol" -Name "msa_sysvol" -RestrictToSingleCompute -Enabled $trueДлина значения SamAccountNameне должна превышать 14 символов. -
Для проверки корректности создания учетной записи:
-
откройте оснастку «Active Directory — пользователи и компьютеры» (Active Directory Users and Computers) любым доступным способом — например, нажмите сочетание клавиш Windows+R, введите "dsa.msc" и нажмите OK;
-
раскройте в доменном дереве контейнер Managed Service Accounts и убедитесь, что в списке присутствует запись msa_sysvol типа
msDS-ManagedServiceAccount.По умолчанию контейнер Managed Service Accounts не отображается. Чтобы отобразить его, в строке меню оснастки нажмите View и выберите Advanced Features.
-
-
Привяжите созданную учетную запись MSA к контроллеру Windows AD DC. Для этого выполните в командной строке Windows PowerShell:
$Server = Get-ADComputer -identity "WIN AD DC HOSTNAME" echo $Server $Msa = Get-ADServiceAccount -Filter "Name -eq 'msa_sysvol'" -Properties * echo $Msa Add-ADComputerServiceAccount -Identity $Server -ServiceAccount $Msa.sAMAccountName -
Добавьте созданную учетную запись MSA на контроллер Windows AD DC:
$Msa = Get-ADServiceAccount -Filter "Name -eq 'msa_sysvol'" -Properties * Install-ADServiceAccount -Identity $Msa.sAMAccountName -
Проверьте, что контроллер может использовать созданную и настроенную учетную запись MSA:
Test-ADServiceAccount -Identity $Msa.sAMAccountNameЕсли команда возвращает
True, учетная запись добавлена на контроллер успешно.
Настройка репликации
Для настройки репликации между контроллерами Windows AD DC и Эллес:
-
На контроллере Windows AD DC создайте скрипт репликации sysvol_repl.cmd следующего вида, указав вместо
SAMBA_DC_FQDNполное доменное имя контроллера Эллес, а вместоFULL_DOMAIN_NAME— полное имя домена:REM cd C:\Scripts\sysvol_repl\ set DateStart=%DATE:~4,2%-%DATE:~7,2%-%DATE:~10,4% set LogName=sysvol_repl_%USERNAME%_%DateStart%.log echo ============== NEW RUN ============== echo %USERNAME% >> %LogName% robocopy C:\Windows\SYSVOL\domain\ \\SAMBA_DC_FQDN\SYSVOL\FULL_DOMAIN_NAME\ /COPY:DATSO /DCOPY:DAT /UNILOG+:%LogName% robocopy C:\Windows\SYSVOL\domain\Policies\ \\SAMBA_DC_FQDN\SYSVOL\FULL_DOMAIN_NAME\Policies\ /MIR /COPY:DATSO /DCOPY:DAT /UNILOG+:%LogName% robocopy C:\Windows\SYSVOL\domain\scripts\ \\SAMBA_DC_FQDN\SYSVOL\FULL_DOMAIN_NAME\scripts\ /MIR /COPY:DATSO /DCOPY:DAT /UNILOG+:%LogName% -
Поместите скрипт в каталог:
C:\Scripts\sysvol_repl\
-
Откройте планировщик заданий любым доступным способом. Например, нажмите сочетание клавиш Windows+R, введите "taskschd.msc" и нажмите OK.
-
В левой панели щелкните правой кнопкой Task Scheduler Library и выберите Create Task.
-
На вкладке General:
-
в поле Name укажите имя задачи (в данном примере — sysvol_repl);
-
в блоке Security options:
-
выберите Run whether user is logged on or not;
-
установите флажок Run with highest privileges.
-
Рис. 1. Вкладка General -
-
На вкладке Triggers создайте новый триггер:
-
нажмите New;
-
задайте расписания запуска задачи;
-
нажмите OK.
Рис. 2. Окно создания триггера -
-
На вкладке Actions настройте действие для задачи:
-
нажмите New;
-
в поле Action выберите Start a program;
-
в поле Program/script укажите полный путь к скрипту репликации; в данном примере:
C:\Scripts\sysvol_repl\sysvol_repl.cmd
-
в поле Start in укажите путь к каталогу, в котором размещается скрипт репликации; в данном примере:
C:\Scripts\sysvol_repl\
-
нажмите OK.
Рис. 3. Окно создания действия -
-
Нажмите OK, чтобы сохранить настроенную задачу, и убедитесь, что она отображается в списке.
Созданная задача репликации SYSVOL обеспечивает запуск репликации от имени администратора домена.
Чтобы протестировать работу скрипта, выберите задачу в списке и нажмите Run. В результате относящееся к домену содержимое каталога /app/inno-samba/var/locks/sysvol на контроллере домена Эллес должно синхронизироваться с соответствующей частью каталога C:\Windows\SYSVOL на контроллере домена Windows AD DC.
Чтобы запускать задачу репликации от имени ранее созданной учетной записи MSA, на контроллере домена Windows AD DC выполните в Windows PowerShell следующую команду, указав вместо DOMAIN_NAME имя домена:
Set-ScheduledTask -TaskName sysvol_repl -Principal (New-ScheduledTaskPrincipal -UserID DOMAIN_NAME\msa_sysvol$ -LogonType Password -RunLevel Highest)
Для проверки успешности смены пользователя в планировщике заданий выберите задачу sysvol_rep и нажмите Properties.
После изменения пользователя задача репликации SYSVOL будет запускаться от имени учетной записи sysvol_repl.
Настройка с использованием скрипта
Следующий скрипт на PowerShell позволяет выполнить описанные выше шаги (кроме шага сброса прав) в автоматическом режиме:
Скрипт для автоматизации синхронизации SYSVOL
param (
[string]$action,
[string[]]$hosts,
[string]$runInterval = "00:30:00",
[string]$accName = "msa_sysvol"
)
$workFolder = "C:\sysvol_repl"
$taskName = "sysvol_repl"
$workTimeout = "00:10:00"
function msaAccountCreate {
param (
[string]$msaName
)
try {
$Msa = Get-ADServiceAccount -Identity $msaName
echo "Using existing account '$msaName'"
} catch {}
if (!$Msa) {
echo "Creating account '$msaName'"
New-ADServiceAccount -SamAccountName $msaName -Name $msaName -RestrictToSingleComputer -Enabled $True
$Server = Get-ADComputer -identity $env:ComputerName
$Msa = Get-ADServiceAccount -Identity $msaName
Add-ADGroupMember -Identity "Domain Admins" -Members $Msa
Add-ADComputerServiceAccount -Identity $Server -ServiceAccount $Msa.SamAccountName
Install-ADServiceAccount -Identity $Msa.SamAccountName
}
Test-ADServiceAccount -Identity $Msa.SamAccountName | Out-Null
}
function scheduleTask {
param (
[string]$user
)
$task = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
if ($task) {
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
}
$action = New-ScheduledTaskAction -Execute "PowerShell" -Argument "$workFolder\sysvol_repl.ps1 replicate $hosts"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval ([Timespan]::Parse($runInterval))
$principal = New-ScheduledTaskPrincipal -UserId "$($env:UserDomain)\$($user)$" -LogonType Password -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable -WakeToRun -ExecutionTimeLimit ([Timespan]::Parse($workTimeout))
$task = New-ScheduledTask -Action $action -Principal $principal -Trigger $trigger -Settings $settings
Register-ScheduledTask -TaskName $taskName -InputObject $task
}
function install {
param (
[string]$accName
)
if (!(Test-Path $workFolder -PathType Container)) {
New-Item -ItemType Directory -Force -Path $workFolder
}
if ($PSScriptRoot -ne $workFolder) {
cp "$PSCommandPath" "$workFolder\sysvol_repl.ps1"
}
msaAccountCreate $accName
echo "Scheduling SYSVOL replication task '$taskName' to run every $runInterval"
scheduleTask $accName | Out-Null
}
function runCopy {
param (
[string]$path,
[string]$logFile,
[string]$opts
)
robocopy $env:SYSTEMROOT\SYSVOL\sysvol\$path \\$hst\SYSVOL\$path $opts /R:0 /MT /COPY:DATSO /DCOPY:DAT /FP /NDL /NJH /NJS /UNILOG+:$logFile | Out-Null
}
function sysvolReplicate {
$dateStart = Get-Date -Format "yyyy-MM-dd"
$logFile = "$workFolder\sysvol_repl_$($env:UserName)_$($dateStart).log"
foreach ($hst in $hosts) {
$dateTimeStart=Get-Date -Format "yyyy-MM-dd HH:mm:ss"
echo "$dateTimeStart | $($env:UserName) | running SYSVOL replication for $hst" >> $logFile
runCopy $env:UserDNSDomain\ $logFile
runCopy $env:UserDNSDomain\Policies\ $logFile /MIR
runCopy $env:UserDNSDomain\scripts\ $logFile /MIR
}
}
if ($action -eq "install") {
$res = Get-WindowsFeature "AD-Domain-Services"
if (!$res) {
echo "ERROR: AD-Domain-Services is not installed on the host"
exit 1
}
install $accName
} else {
sysvolReplicate
}
Для настройки репликации скопируйте скрипт на доменный контроллер Windows AD DC и установите его в Windows PowerShell, указав список имен целевых контроллеров домена Эллес через запятую и при необходимости — интервал репликации в формате HH:MM:SS (по умолчанию — 00:30:00, что соответствует 30 минутам):
sysvol_repl.ps1 install <dc-list> [<run-interval>]