it-swarm-ja.com

IISログフォルダーのアクセス許可が継承されていません

WebサーバーにLogフォルダーが設定されており、特定のADグループが読み取ることができるようにアクセス許可が設定されています(エラーレポートを表示する必要があるが、ボックスに対する管理者アクセス許可がない開発者)。

これは既存のログでは問題なく機能しますが、IISが新しいサブフォルダー(名前パターン "W3SVCx")を作成するたびに、親フォルダーからのアクセス許可は継承されません。代わりに、これらのフォルダは管理者にのみ表示されます。

IISを取得して、適切な継承されたアクセス許可でこれらのログを書き込むには、管理者にログを持たないはずのユーザーにアクセスを許可しないでください。

4
Sean Worle

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

最初にサイトを作成し、次にホームページにアクセスし、少し待ってから、ログフォルダーにアクセス許可を設定します。

事前にサイトのIDがわからない場合は、

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

サイトを作成した後にIDを取得します。

これを使用するには、OSに応じて、IISのスクリプトを有効にする必要があります。

3
Peter Hahndorf

新しいIIS 7/8インストールでは、次の回避策を使用します。

  1. フォルダに必要な権限を設定しますC:\inetpub\logs\LogFiles

  2. 権限を継承するように既存のログフォルダを変更する

    icacls C:\inetpub\logs\LogFiles\W3SVC* /inheritance:e
    
  3. 最初の99個のログフォルダを事前入力しますW3SVC1...W3SVC99 IISがそれらの1つを作成しようとする前に、アクセス許可を継承するようにします。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$_ }   
    

それはきれいではありませんが、それは仕事を成し遂げます。

3
oleschri

Powershellを使用してサイトを作成したので、以下を追加して、サイトIDに基づいて正確なフォルダーを作成しました。

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