Como conceder permissões de diretório em um script Powershell
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
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")