Como conceder permissões de diretório em um script Powershell

Aug 31 2020

Clico com o botão direito do mouse no meu site no gerenciador do IIS e escolho 'Editar permissões' e clico na guia de segurança. Lá eu tenho o usuário IUSR com as seguintes permissões: Ler e executar, Listar o conteúdo da pasta, Ler. Também posso verificar isso no Powershell usando o comando Get-Acl <path> |fl, que exibe:

Acesso: NT AUTHORITY \ IUSR Permitir ReadAndExecute, Sincronizar

Agora eu excluo a entrada ACL para IUSR completamente. Quero defini-lo com um script Powershell, usando as seguintes linhas:


$path=<path to directory> $acl = Get-Acl "$path" $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\IUSR","ReadAndExecute","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl "$path"

Verificando novamente com Get-Acl <path> |fl, I mostra exatamente as mesmas informações, conforme o esperado. Mas, no gerenciador do IIS, os direitos marcados anteriormente não são definidos. Em vez disso, 'Permissões especiais' são marcadas. Quando eu clico em 'Avançado' e seleciono IUSR na lista, ele mostra que as mesmas permissões foram concedidas: Ler e executar, Listar o conteúdo da pasta, Ler

Mas meu site não funciona (o navegador gera erro: HTTP-Errror 401.3 - Unauthorized). Funciona apenas se eu conceder essas permissões manualmente nas janelas de permissões. Como posso definir as permissões necessárias corretamente em um script Powershell?

Respostas

2 Theo Sep 01 2020 at 02:09

Transformando meu comentário em uma resposta, parece que você também precisa especificar os  sinalizadores de Herança e Propagação para a regra de acesso, de forma que os objetos filho da pasta herdam a permissão.

$AccessRule = [System.Security.AccessControl.FileSystemAccessRule]::new("NT AUTHORITY\IUSR", "ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow")