IIS-Protokollordnerberechtigungen werden nicht vererbt

3

Auf unserem Webserver ist ein Protokollordner eingerichtet, in dem Berechtigungen für eine bestimmte AD-Gruppe festgelegt sind, damit er gelesen werden kann (Entwickler, die Fehlermeldungen anzeigen müssen, aber keine Administratorberechtigungen für die Box haben).

Dies funktioniert problemlos für Protokolle, die bereits vorhanden sind. Wenn IIS jedoch einen neuen Unterordner (mit dem Namensmuster "W3SVCx") erstellt, erben die Berechtigungen aus dem übergeordneten Ordner nicht. Stattdessen sind diese Ordner nur für Administratoren sichtbar.

Wie können wir erreichen, dass IIS diese Protokolle mit den richtigen vererbten Berechtigungen schreibt, ohne Administratoren Zugriff auf Benutzer zu gewähren, die dies nicht haben sollten?

Sean Worle
quelle

Antworten:

3

IIS erstellt die W3SVCx-Ordner nach der ersten Anforderung an eine neu erstellte Site. Außerdem legt IIS die NTFS-Berechtigungen unabhängig von den Berechtigungen des übergeordneten Ordners und seinen Vererbungseinstellungen fest. Es werden folgende Berechtigungen festgelegt:

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

Ich kenne keinen Weg, um IIS zu sagen, dies nicht zu tun. Sie müssen daran denken, dass Sie nach dem Einrichten einer neuen Site einmal darauf klicken und dann die Berechtigungen für den Protokollordner festlegen.

Wenn Sie viele Sites einrichten, verwenden Sie stattdessen ein Skript. Ich benutze 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`)"

Ich erstelle die Site, klicke dann auf die Homepage, warte eine Sekunde und setze dann die Berechtigungen für den Protokollordner.

Wenn Sie die ID der Site nicht kennen, verwenden Sie

$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`)"

um die ID zu erhalten, nachdem Sie die Site erstellt haben.

Um dies zu verwenden, müssen Sie je nach Betriebssystem das Scripting für IIS aktivieren.

Peter Hahndorf
quelle
Das Hauptproblem besteht darin, dass dies nicht ganz korrekt ist. IIS erstellt diese Ordner nach der Erstellung der Site und in regelmäßigen Abständen, sobald sie voll sind. Auf unseren Servern wird ungefähr einmal pro Tag ein neuer Ordner erstellt, sodass jeder Ordner die Protokolle des Tages enthält. Sagen Sie, der einzige Weg, um damit umzugehen, wäre, einen geplanten Job auszuführen, um die Berechtigungen jeden Tag zu ändern.
Sean Worle
@Sean - Welche Version von IIS verwendest du? Zumindest auf 8 wird der Ordner nicht erstellt, wenn Sie eine Site erstellen, sondern nach dem ersten Treffer auf der Site. Die Berechtigungen für diesen Ordner werden dann nicht mehr geändert. Es gibt nur einen Ordner pro Site. Standardmäßig wird jeden Tag eine neue Datei erstellt. Wie können Ordner voll werden? Sie können den 'Log File Rollover' von 'Schedule' in 'Max file size' ändern. Ich habe das nicht getan, aber ich bezweifle, dass es das allgemeine Verhalten der Protokollierung ändern wird.
Peter Hahndorf
Wir verwenden IIS 7.5. Es sieht so aus, als ob ich mich geirrt habe - Sie sagen, dass die Ordner nur beim ersten Besuch der Site erstellt werden. Dies könnte die Ursache für das Missverständnis sein, dass diese Ordner kontinuierlich erstellt wurden. Es ist ein bisschen mehr Arbeit, wenn wir eine Site erstellen, aber solange sie nicht kontinuierlich erstellt werden, kann dies in Ordnung sein. Vielen Dank.
Sean Worle
2

Ich verwende die folgende Problemumgehung bei jeder neuen Installation von IIS 7/8:

  1. Legen Sie die gewünschten Berechtigungen für den Ordner fest C:\inetpub\logs\LogFiles

  2. Ändern Sie vorhandene Protokollordner, um Berechtigungen zu erben

    icacls C:\inetpub\logs\LogFiles\W3SVC* /inheritance:e
    
  3. Füllen Sie die ersten 99 Protokollordner vorab aus W3SVC1... W3SVC99 Damit erben sie Berechtigungen, bevor IIS sogar versucht, eine davon zu erstellen. IIS ändert keine Berechtigungen, wenn bereits ein Protokollordner vorhanden ist.

    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$_ }   
    

Es ist nicht hübsch, aber es erledigt die Arbeit.

oleschri
quelle
0

Ich habe meine Site mit Powershell erstellt. Daher habe ich Folgendes hinzugefügt, um den genauen Ordner basierend auf der Site-ID zu erstellen.

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
Robert Brooker
quelle