Permissões de pasta de log do IIS não sendo herdadas

3

Temos uma pasta Log configurada em nosso servidor da Web, com permissões definidas para um grupo do AD específico para poder lê-lo (desenvolvedores que precisam ver relatórios de erros, mas que não têm permissões de administrador para a caixa).

Isso funciona bem para logs que já existem, mas sempre que o IIS cria uma nova subpasta (com o padrão de nome "W3SVCx"), as permissões da pasta pai não herdam. Em vez disso, essas pastas são visíveis apenas para administradores.

Como podemos obter o IIS para gravar esses logs com as permissões herdadas corretas, sem dar acesso de administrador aos usuários que não devem ter isso?

    
por Sean Worle 30.07.2013 / 19:20

3 respostas

3

O IIS cria as pastas W3SVCx após a primeira solicitação para um site recém-criado; ele também define as permissões NTFS, independentemente das permissões da pasta pai e de suas configurações de herança. As permissões definidas são:

NT AUTHORITY\SYSTEM:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)

Eu não sei de nenhuma maneira de dizer ao IIS para não fazer isso. Você precisa lembrar que depois de configurar um novo site, clique nele uma vez e defina as permissões na pasta de log.

Se você configurar muitos sites, use um script. Eu uso o PowerShell:

New-WebSite -Name "peter.superuser.com" -port 80 -id 106 -PhysicalPath "C:\inetpub\peter.superuser.com" -HostHeader peter.superuser.com
(New-Object System.Net.WebClient).DownloadString("http://peter.superuser.com")
start-sleep -seconds 1
& icacls.exe "C:\inetpub\logs\LogFiles\W3SVC106" /Q /grant "BUILTIN\Users:'(OI')'(CI')'(RX')"

Primeiro, criei o site, acesse a página inicial, espere um segundo e defina as permissões na pasta de log.

Se você não souber o ID do site em avançado, use

$newId = (get-childitem IIS:\Sites | where{$_.Name -eq "peter.superuser.com"}).Id
& icacls.exe "C:\inetpub\logs\LogFiles\W3SVC$newId" /Q /grant "BUILTIN\Users:'(OI')'(CI')'(RX')"

para obter o ID depois de criar o site.

Para usar isso, você precisa habilitar o script para o IIS, dependendo do seu sistema operacional.

    
por 10.08.2013 / 16:37
2

Eu uso a seguinte solução alternativa em qualquer nova instalação do IIS 7/8:

  1. Defina as permissões desejadas na pasta C:\inetpub\logs\LogFiles

  2. Modifique as pastas de log existentes para herdar as permissões

    icacls C:\inetpub\logs\LogFiles\W3SVC* /inheritance:e
    
  3. Preencha as primeiras 99 pastas de log W3SVC1 ... W3SVC99 para que elas herdem permissões antes mesmo que o IIS tente criar uma delas. O IIS não modifica permissões quando uma pasta de log já existe.

    REM cmd style
    for /l %%G in (1,1,99) do md C:\inetpub\logs\LogFiles\W3SVC%%G
    
    # PowerShell style
    1..3 | % { md C:\inetpub\logs\LogFiles\W3SVC$_ }   
    

Não é bonito, mas faz o trabalho.

    
por 20.02.2014 / 16:50
0

Eu criei meu site usando o Powershell, então adicionei o seguinte para criar a pasta exata com base no ID do site.

Import-Module WebAdministration
$iisAppName = "MySite"
$site = Get-ItemProperty IIS:\Sites\$iisAppName
$folderName = "W3SVC" + $site.id    #Create a folder based on the actual site id
$iisLogPath = "C:\MyLogFolder"
$folderPath = Join-Path $iisLogPath $folderName
New-Item -Path $folderPath -ItemType directory
    
por 03.06.2016 / 07:18