web-dev-qa-db-ja.com

IISロックされたセクションについて文句を言う-それがロックされている場所を見つけるにはどうすればよいですか?

私のweb.configにこのセクションがあります:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <security>
        <authentication>
            <anonymousAuthentication enabled="true" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

IIS7がクラッシュし、認証セクションについて文句を言う:

モジュールAnonymousAuthenticationModule
通知AuthenticateRequest
ハンドラStaticFile
エラーコード0x80070021
構成エラーこの構成セクションは、このパスでは使用できません。これは、セクションが親レベルでロックされている場合に発生します。ロックは、デフォルト(overrideModeDefault = "Deny")か、overrideMode = "Deny"または従来のallowOverride = "false"が指定された場所タグによって明示的に設定されます。

Config Source  
   69:  <authentication>
   70:    <anonymousAuthentication enabled="true" />

したがって、これを解決する通常の方法は、%windir%\system32\inetsrv\config\applicationHost.configとセクションのロックを解除します。

    <sectionGroup name="system.webServer">
        <sectionGroup name="security">
            <section name="access" overrideModeDefault="Deny" />
            <section name="applicationDependencies" overrideModeDefault="Deny" />
            <sectionGroup name="authentication">
                <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                <section name="basicAuthentication" overrideModeDefault="Allow" />
                <section name="clientCertificateMappingAuthentication" overrideModeDefault="Allow" />
                <section name="digestAuthentication" overrideModeDefault="Allow" />
                <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Allow" />
                <section name="windowsAuthentication" overrideModeDefault="Allow" />
            </sectionGroup>

(または、appcmd unlock config)。

奇妙なこと:私はそれをやったが、それでもまだ不満がある.

私は場所を探しました(MVCは使用しているすべてのサイトのルートである私のWebサイトの名前です):

<location path="MVC" overrideMode="Allow">
    <system.webServer overrideMode="Allow">
        <security overrideMode="Allow">
            <authentication overrideMode="Allow">
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="true" />
            </authentication>
        </security>
    </system.webServer>
</location>

それでも爆破します。なぜこれが起こるのか私は困惑しています。 web.configから削除できません。根本的な問題を見つけたいのですが。

IISから最終的に特定の情報を取得する方法はありますか?

編集: IIS7管理コンソールを使用して、ルート(マイマシン)に移動し、[構成の編集]をクリックしてセクションをロック解除することで、これを修正できました。それでも、実際に変更するファイルが見つからないため、もっと良い方法があるかどうか知りたいのですが。

59
Michael Stum

私のために問題を修正するこれらの手順を実行しました:

  1. オープンIISマネージャー
  2. 左側のツリーでサーバー名をクリックします
  3. 右側のウィンドウの[管理]セクションで、[構成エディター]をダブルクリックします
  4. 上部にあるセクションsystem.webServer/security/authentication/anonymousAuthentication
  5. 右側のペインで、セクションのロック解除をクリックします
  6. 上部にあるセクションsystem.webServer/security/authentication/windowsAuthentication
  7. 右側のペインで、セクションのロック解除をクリックします
90
tomfanning

これにより、Windows Server 2012でのエラーが解決されましたIIS 8.5。他のバージョンでも動作するはずです。

  1. サーバーマネージャーに移動し、[追加]をクリックします役割と機能
  2. 役割セクションで次を選択します。Webサーバー
  3. Securityサブセクションの下ですべてを選択します(私はダイジェスト、IP制限、およびURL承認を使用していないため除外しました)
  4. アプリケーション開発の下で、両方のISAPIエントリである_.NET Extensibility 4.5_と_ASP>NET 4.5_を選択します
  5. Featuresセクションで次を選択します:_NET 3.5_、_.NET 4.5_、_ASP.NET 4.5_
  6. Webサーバーセクションで、Web Server (all)Management Tools (IIS Management Console and Management Service)Windowsを選択します
15

構成のロックは次の場所で発生する可能性があります。

  1. Applicationhost.config(構成文字列:MACHINE/WEBROOT/APPHOST)

  2. サイトのWeb.configファイル(MACHINE/WEBROOT/APPHOST/Webサイト名)

  3. アプリのweb.configファイル(MACHINE/WEBROOT/APPHOST /サイト名/アプリ名)

セクションをロックすると(セクション:IIS構成セクション、たとえば<asp>)、階層の下位レベルにいる誰に対しても、これらの設定を構成する機能を拒否できます。

GUIの機能の委任を使用することは間違いなく、AppCMDが行うことと非常によく似ていますが、対象となる構成のレベルで<location>タグの特定のセクションのOverrideModeを設定します。 。

APPCMDはファイルのロックを解除するために使用できますが、ファイルのロックを解除する場所に注意を払います。これはGUIほどスマートではありません。

-commit:apphostAPPCMD UNLOCKコマンドの最後に追加すると、Applicationhost.configがターゲットになります。これは、IIS操作のキーファイルです(置換以前のバージョンのメタベース。一元化されたすべての設定を保存しますが、(行う場合は)オーバーライドを許可します(web.configファイル)。

-commit:apphostを指定しない場合、APPCMDはweb.configファイルの最も近い論理的な場所をターゲットにします-サイトレベルでもアプリレベルでも、上記のセットのような構成文字列を使用して設定が変更されたことを示します。 (余談ですが、サブWebサイトの設定のみを対象とすることはできますが、apphostにコミットします-それは場所タグを使用して実現します)

つまり、(メモリの言い換え)「MACHINE/WEBROOT/APPHOSTにコミットされた変更」と表示されている場合、これはIIS階層の最上位を意味します。

「MACHINE/WEBROOT/APPHOST/Dodgy Webサイトへのコミット」と表示されている場合、それはDodgy Webサイトの背後にある物理パスを検索し、その場所にweb.configファイルを書き込んだ(または更新した)ことを意味します。

5
TristanK

IISExpressおよびVisual Studio 2015を使用している場合、_applicationHost.config_は$(solutionDir).vs\config\applicationhost.configに格納されます(Nime Cloudの answer に感謝)。

必要に応じて_overrideModeDefault="Allow"_を変更してください。

_<sectionGroup name="security">
    <section name="access" overrideModeDefault="Deny" />
    <section name="applicationDependencies" overrideModeDefault="Deny" />
    <sectionGroup name="authentication">
        <section name="anonymousAuthentication" overrideModeDefault="Allow" />
etc...
_
3
Marcos Dimitrio

アプリケーションプールを試して、32ビットアプリケーションのサポートを無効にするIIS Manager-> Application Pools-> select [Your AppPool]-> Enable Settings-> Enable 32-Bit Applications-it to '誤り」

1
JohnR