Como eu uso os cmdlets GPO do PowerShell para configurar a segurança de arquivos?

3

Eu preciso automatizar a criação de vários grupos de segurança e, em seguida, criar e aplicar um GPO que inclua permissões e auditoria de arquivos específicos do grupo de UO / Segurança.

Eu tenho a OU e a criação do grupo concluída. Eu posso fazer a permissão / auditoria como ACLs, mas preciso aplicá-las como um GPO. Posso vincular-me às UOs / Grupos e copiar os GPOs existentes, mas ainda preciso substituir determinados grupos de segurança. Eu tenho a criação de chaves de registro por grupo de segurança, mas não consigo encontrar nenhuma documentação sobre a criação de permissão / auditoria de arquivos.

Caso Ex: Nós implementamos servidores da Web virtuais atribuídos a clientes específicos. Temos um script PS que cria as novas unidades organizacionais e grupos de segurança para o novo servidor. Em vez de ter que reaplicar um script PS com ACLs se precisarmos implantar novamente a VM, gostaríamos de automatizar a criação de GPO que contém as ACLs para as pastas padrão, para que não precisemos tocar em nada. reimplantar quando a VM estiver em backup.

Eu tenho o script ACL, e isso funciona bem, mas não é bom para automação nesse caso.

    
por Zac M. 25.03.2015 / 21:13

2 respostas

2

Portanto, não há como configurar diretamente as permissões de arquivo em um GPO usando o Powershell. (Computador / Políticas / Configurações do Windows / Configurações de segurança / Sistema de arquivos)

No entanto, consegui contornar isso criando um GPO e fazendo backup manualmente (uma vez por vez). Em relação à resposta específica que eu estava procurando, há três arquivos que precisam ser editados no backup do GPO.

  • {SOME_GUID} \ Backup.xml
  • {SOME_GUID} \ gpreport.xml
  • {SOME_GUID} \ DomainSysvol \ GPO \ Máquina \ microsoft \ windows nt \ SecEdit \ GptTmpl.inf

Você precisará substituir o (s) nome (s) e SIDs do grupo de usuários pelos placeholders [GROUP_NAME] e [GROUP_SID] (também pode ser USER) nos três arquivos. Você também precisará atualizar a marca {Name} em gpreport.xml e o {DisplayName} em backup.XML para o novo nome do GPO. Fiz isso com outro titular de espaço [GPO_NAME].

Agora, essa foi a parte complicada que demorou um pouco para descobrir. Você não pode simplesmente importar o GPO para esse novo objeto. Na verdade, você precisa criar um novo GPO em branco, fazer backup dele e exibir os arquivos atualizados do modelo neste backup.

Aqui está o código que usei. Existem alguns espaços reservados aqui. Substitua estes conforme necessário para o seu ambiente. Parece que a formatação de pilha nos scripts do Powershell está um pouco errada. Funciona como colado.

#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] 
    
por 27.03.2015 / 14:36
1

Você tem que fazer na configuração do computador. Vá para:

Computer Configuration\Policies\Windows Settings\Security Settings\File System

Clique com o botão direito do mouse no espaço vazio no painel direito e escolha "Adicionar arquivo". Se o sistema em que você estiver não tiver a pasta desejada, você poderá criá-lo nesse navegador de arquivos. Depois de selecionar a pasta, atribua as permissões NTFS.

    
por 25.03.2015 / 21:42