Windows では、ファイル・システム上のファイルやフォルダに対して、ユーザーやユーザーグループにアクセス許可を行ってアクセスを制御しています。Windows + IIS に、Wordpress、Umbraco、自分で作成した ASP.NET のアプリケーション等をインストールし公開する場合には、一般のユーザーからアクセスができるように匿名認証(認証という名前はついていますが認証なしで誰でもアクセスできます)を使用します。この場合に、ブラウザーでウェブサイトにアクセスした場合、IIS に URL 等の情報が伝えられて、html や画像ファイルの場合であれば IIS が必要なファイルにアクセスすることになります。その時のユーザーは、匿名ユーザーアカウント(既定では IUSR)です。
Windows の場合、アクセス許可が複雑になるのは、ASP.NET のプログラムは、アプリケーションプールで実行され、そこからファイルにアクセスする場合には、アプリケーションプールのワーカープロセスアカウント(既定では各アプリケーション プール ID)でアクセスします。そういうことで、Web サイトやアプリケーションのアクセス許可を構成する場合は、匿名ユーザーアカウントとワーカープロセスアカウントの双方に許可を与える必要があります。
1.IIS の既定の匿名ユーザーID等の歴史
IIS の既定の匿名ユーザーアカウント、アプリケーションプールのワーカープロセスのアカウントは、セキュリティの強化のため以下の表のように変化してきています。Windows Vista 以降、IUSR ユーザーアカウントをビルトインアカウントとして用意し、これを匿名認証のときに用いるようになりました。また、アプリケーションプールの規定のワーカープロセスについては、Windows Vista sp2 以降 NETWORK SERVISE を使用せず、アプリケーションプール毎にアカウントが生成されるようになっています。各ワーカープロセスのアカウントは、自動的に IIS_IUSRS グループのメンバーになります。ここで注意をしないといけないのは IUSR は名前を見ると IIS_IUSRS のグループに属するようにみえるのですが、実際は属しません。したがって、匿名ユーザーIDのIUSR とワーカープロセス ID 又はワーカープロセスグループのIIS_IUSRS の双方にアクセス許可をする必要があります。
|
Windows Server 2003 | Windows Vista Windows Server 2008 |
Windows 7/Vista sp2 Windows Server 2008 R2 |
既定の匿名ユーザーID | IUSR_<マシン名> | IUSR | IUSR |
既定のワーカープロセスID | NETWORK SERVICE | NETWORK SERVICE | アプリケーション プール ID |
ワーカープロセスグループ | IIS_WPG | IIS_IUSRS | IIS_IUSRS |
なお、IUSER 及び ワーカープロセスIDは、Users 及び Authenticated Users のグループに属するので、Users 又はAuthenticated Users に権限を与えることでアクセス許可をすることも可能です。
※注意!Vista の場合の既定のワーカープロセスアカウントは、sp2 適用以降に新しく作成したアプリケーションプールのみがアプリケーションプール IDで、それ以前に作成したアプリケーションプールは、NETWORK SERVICE のままです。ワーカープロセスアカウントの確認及び変更は、IIS マネージャーで、アプリケーションプールを選択後、右パネルの「アプリケーションプールの編集」の「詳細設定」で、「プロセスモデル」の「ID」で設定を行います(下図)。
2.アクセス権の設定について
インストールの説明では、Users 又はAuthenticated Users に権限を設定するように説明していますが、フォルダーやファイルのアクセス許可をどう設定すべきかについて、実は悩ましいところがあります。現時点での個人的な結論をいうと次のようになります。
(1) 管理を1人でする場合
通常 Users 及び Authenticated Users に「読み取りと実行」の権限が設定されている場合が多いので、そのような場合はアクセス権の設定をしなくてもアプリケーションが動作します。Users 又は Authenticated Users に「読み取りと実行」の権限が許可されていないのであればその許可をします。また、書き込みが必要なフォルダーやファイルに対しては Users 又は Authenticated Users に「変更」の権限を与えることでアクセス許可の設定を行うのが簡便な方法です。
教科書的に設定方法では、IUSR と IIS_IUSRS に「読み取りと実行」の権限を与え、アプリケーションで書き込みが必要なフォルダーやファイルには、IUSR と IIS_IUSRS に「変更」の権限を与えるようにします。イントラネットで使用する場合のように、Webサーバーで使用しているファイルを、他の一般ユーザーから直接見られたり変更されたりしたら困る場合は、 Users 及び Authenticated Users のアクセス許可は削除するようにします。なお、PHP のアプリケーションの場合は、CGI で実行されるので IUSR のみに「変更」の権限を与えれば書き込み可能になり、ASP.NET のアプリケーションの場合は、ワーカープロセスで実行されるので、IIS_IUSRS のみに「変更」の権限を与えれば、書き込み可能になります。
(2) (1)以外の場合。
Winodws Vista sp2 以降、セキュリティの向上のため、デフォルトでアプリケーションプール固有(Application Pool Identity)のアカウントが使用されるようになったという趣旨を踏まえて、アプリケーションプール IDを使用するようにします。アプリケーションプール IDは、IIS AppPool\(アプリケーションプール名)です。エクスプローラーでアクセス許可の設定をするときには、例えば、DefaultAppPool であれば、IIS AppPool\DefaultAppPool と直接入力すれば設定することができます。また、IIS マネージャーを使って、「IIS」の「認証」の「匿名認証」の編集で、匿名ユーザー ID をアプリケーションプール ID に設定すれば既定のIUSR を使用せずに、アプリケーションプール ID のみでアクセス許可の設定ができるようになります。
3.アプリケーションプール ID のアクセス許可の編集
以下は、ファイルやディレクトリにアプリケーションプール ID のアクセス許可を追加する手順のメモです。 アプリケーションプールが「DefaultAppPool」の場合を説明します。
4.アプリケーション ディレクトリ以外にもアクセスできることに注意
既定では、ASP.NET や PHP のプログラムから、フォルダーやファイルに、Users、Authenticated Users、IUSR、IIS_IUSRS 等にアクセス権の許可が与えられていた場合は、アプリケーション ディレクトリ以外にあるファイルへのアクセスができることに注意してください。アクセスされたら困るファイルがある場合の対応方法としては、以下の2通りの方法があります。
.NET 信頼レベルを Medium にする方法は、簡単で確実な方法ですが、アプリケーションによっては動作しなくなるという欠点があります。
なお、ファイルのアップロードの機能を公開すると、任意のプログラムをアップロードされて外部から実行されてしまう恐れがあるので、要注意です。できれば公開しない方がいいのですが、どうしても必要な機能だという場合はアップロードできるファイルの種類をできるだけ限定し、.php、.aspx、.cgi 等の拡張子の場合はアップロードできないようにします。また、不要なサービスやプログラムをインストールしないということもセキュリティ的には重要です。
5.参考リンク
このメモを書くのに参考にした資料です。特に、 Application Pool Identities が参考になりました。
ファイルシステム ACL を介した IIS のコンテンツのセキュリティ保護
IIS 7.0 での組み込みユーザーとグループ アカウントとは
IIS 7.0: アプリケーション プールの ID を指定する
Microsoft ASP.NET 2.0 ホスティング展開ガイド