Назад | Перейти на главную страницу

Как использовать командлеты GPO PowerShell для настройки безопасности файлов?

Мне нужно автоматизировать создание нескольких групп безопасности, а затем создать и применить объект групповой политики, который включает в себя права доступа к файлам для конкретных подразделений / групп безопасности и аудит.

Я закончил создание подразделения и группы. Я могу выполнять разрешения / аудит как ACL, но мне нужно применять их как GPO. Я могу ссылаться на подразделения / группы и копировать существующие объекты групповой политики, но мне все равно нужно заменить определенные группы безопасности. У меня есть создание ключей реестра для каждой группы безопасности, но я не могу найти никакой документации по созданию разрешений / аудита файлов.

Пример: мы развертываем виртуальные веб-серверы, которые назначаются конкретным клиентам. У нас есть сценарий PS, который создает новые подразделения и группы безопасности для нового сервера. Вместо того, чтобы повторно применять сценарий PS с ACL, если нам нужно повторно развернуть виртуальную машину, мы хотели бы автоматизировать создание GPO, содержащего ACL для папок по умолчанию, чтобы нам не приходилось ничего трогать в повторное развертывание после резервного копирования виртуальной машины.

У меня есть сценарий ACL, и он отлично работает, но в данном случае не подходит для автоматизации.

Таким образом, нет возможности напрямую настроить права доступа к файлам в объекте групповой политики с помощью Powershell. (Компьютер / Политики / Параметры Windows / Параметры безопасности / Файловая система)

Тем не менее, мне удалось обойти это, создав объект групповой политики и вручную создав его резервную копию (разовая проблема). Что касается конкретного ответа, который я искал, есть 3 файла, которые необходимо отредактировать в резервной копии GPO.

  • {SOME_GUID} \ Backup.xml
  • {НЕКОТОРЫЕ_GUID} \ gpreport.xml
  • {НЕКОТОРЫЙ_GUID} \ DomainSysvol \ GPO \ Machine \ microsoft \ windows nt \ SecEdit \ GptTmpl.inf

Вам нужно будет заменить имена групп пользователей и идентификаторы безопасности на заполнители [GROUP_NAME] и [GROUP_SID] (также может быть USER) во всех трех файлах. Вам также потребуется обновить тег {Name} в gpreport.xml и {DisplayName} в backup.XML на новое имя GPO. Я сделал это с другим заполнителем [GPO_NAME].

Это была непростая часть, на то, чтобы разобраться с ней. Вы не можете просто импортировать GPO этот новый объект. На самом деле вам нужно создать новый пустой объект групповой политики, создать его резервную копию и вывести файлы, которые вы обновляете из шаблона, в эту резервную копию.

Вот код, который я использовал. Здесь есть несколько заполнителей. Замените их по мере необходимости для вашей среды. Похоже, что форматирование стека в сценариях Powershell немного не работает. Работает как наклеенный.

#root path for script and files.
$scriptPath = "c:\GPO_Deployment"

# Create new GPO 
write-host "Create new GPO"
new-GPO -Name  [GPO_NAME] 

# Backup New GPO to Named folder
$backup = backup-gpo -Name  [GPO_NAME]   -Path $scriptPath

#

# Files that need to be updated:
#  GPO_TEMPLATE_FILES\Backup.xml
#  GPO_TEMPLATE_FILES\gpreport.xml
#  GPO_TEMPLATE_FILES\DomainSysvol\GPO\Machine\microsoft\windows nt\SecEdit\GptTmpl.inf

# Create Output file strucures

$newXMLpath = New-Item -Path ("{" + $backup.Id + "}") -ItemType Directory -Force
$newGPOinfPath = New-Item -ItemType Directory -Path ("{" + $backup.Id + "}\\DomainSysvol\\GPO\\Machine\\microsoft\\windows nt\\SecEdit") -Force

#get the Group SIDS for the groups we created above
$GROUP_SID =  (New-Object System.Security.Principal.NTAccount("DOMAIN", [GROUP_NAME])).Translate([System.Security.Principal.SecurityIdentifier])

write-host "Applying tranforms to template files"

# read inf_template file, replace sids, and write out
$inf_template = join-path -Path ($scriptPath + "\GPO_TEMPLATE_FILES\DomainSysvol\GPO\Machine\microsoft\windows nt\SecEdit") -ChildPath "GptTmpl.inf"
$inf_outfile = Join-Path -Path $newGPOinfPath -ChildPath "GptTmpl.inf"

(Get-Content $inf_template) | ForEach-Object {
    $_ -replace '\[GROUP_SID\]', $GROUP_SID
} | Set-Content $inf_outfile


# read Backup XML template file, replace sids, and write out
$backup_template = join-path -Path ($scriptPath + "\GPO_TEMPLATE_FILES") -ChildPath "Backup.xml"
$backup_outfile = Join-Path -Path $newXMLpath -ChildPath "Backup.xml"

(Get-Content $backup_template) | ForEach-Object {
    $_ -replace '\[GROUP_SID\]', $GROUP_SID `
        -replace '\[GPO_NAME\]', $hostedclient
} | Set-Content $backup_outfile


# read GPO Report XML template file, replace sids, and write out
$gporeport_template = join-path -Path ($scriptPath + "\GPO_TEMPLATE_FILES") -ChildPath "gpreport.xml"
$gporeport_outfile = Join-Path -Path $newXMLpath -ChildPath "gpreport.xml"

(Get-Content $gporeport_template) | ForEach-Object {
    $_ -replace '\[GROUP_SID\]', $GROUP_SID `
        -replace '\[GPO_NAME\]', $hostedclient
} | Set-Content $gporeport_outfile


Write-Host "Saving updated GPO, linking it to the new OU and moving traget web server to new OU."

# Import GPO
import-gpo -BackupId $backup.Id  -Path $scriptPath -TargetName [GPO_NAME]  -CreateIfNeeded 

$updatedGPO = get-gpo  -Name [GPO_NAME]
# Link GPO to OU 
## NOTE:  If you are updating an existing GPO Link, use Set-GPLink here
New-GPLink -Guid $updatedGPO.Id -Target ("OU=[YOUR_OU],DC=domain,DC=local") -LinkEnabled Yes

# Move web server to OU
get-adcomputer [YOUR_SERVER] | Move-ADObject -TargetPath ("OU=[YOUR_OU],DC=domain,DC=local")


# Add another wait for GPO to settle before forcing update.
Write-Host "Pausing again to allow DC to catch-up again."
start-sleep -seconds 15

write-host "Forcing a GP Update on target webserver."

Invoke-GPUpdate -Computer [YOUR_SERVER] 

Вы должны сделать это в конфигурации компьютера. Перейти к:

Конфигурация компьютера \ Политики \ Параметры Windows \ Параметры безопасности \ Файловая система

Щелкните правой кнопкой мыши пустое место на правой панели и выберите «Добавить файл». Если в какой-либо системе, в которой вы находитесь, нет нужной папки, вы можете создать ее в этом файловом браузере. После выбора папки назначьте разрешения NTFS.