3

На нашем веб-сервере настроена папка «Журнал», для которой определенная группа AD имеет права доступа для чтения (разработчики, которым необходимо просматривать отчеты об ошибках, но у которых нет прав администратора для этого ящика).

Это прекрасно работает для журналов, которые уже существуют, но всякий раз, когда IIS создает новую подпапку (с шаблоном имени "W3SVCx"), разрешения родительской папки не наследуются. Вместо этого эти папки видны только администраторам.

Как мы можем заставить IIS записывать эти журналы с правильными унаследованными разрешениями, не предоставляя администратору доступ пользователям, у которых его не должно быть?

3 ответа3

3

IIS создает папки W3SVCx после первого запроса к вновь созданному сайту, он также устанавливает для него разрешения NTFS независимо от разрешений родительской папки и ее параметров наследования. Права, которые он устанавливает:

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

Я не знаю, как сказать IIS не делать этого. Вы должны помнить, что после настройки нового сайта, нажмите его один раз, а затем установите разрешения для папки журнала.

Если вы настроили много сайтов, используйте вместо этого скрипт. Я использую 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`)"

Сначала я создаю сайт, затем попадаю на домашнюю страницу, жду секунду, а затем устанавливаю разрешения для папки журнала.

Если вы не знаете идентификатор этого сайта, используйте

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

чтобы получить идентификатор после того, как вы создали сайт.

Чтобы использовать это, вам нужно включить сценарии для IIS, в зависимости от вашей ОС.

2

Я использую следующий обходной путь на любой новой установке IIS 7/8:

  1. Установите нужные разрешения для папки C:\inetpub\logs\LogFiles

  2. Изменить существующие папки журналов, чтобы наследовать разрешения

    icacls C:\inetpub\logs\LogFiles\W3SVC* /inheritance:e
    
  3. Предварительно заполните первые 99 папок журнала W3SVC1 ...W3SVC99 чтобы они наследовали разрешения, прежде чем IIS даже попытается создать один из них. IIS не изменяет разрешения, если папка журнала уже существует.

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

Это не красиво, но это делает работу.

0

Я создал свой сайт с помощью Powershell, поэтому добавил следующее, чтобы создать точную папку на основе идентификатора сайта.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .