こんにちは、カヨです。
「ローカル開発環境用のIISセキュリティ設定」
【IIS(Internet Information Services)のセットアップ】
お題にも記載した通り、本番環境での設定ではありません!これはローカル環境専用の設定であり、本番環境では適用しないでください。本番に設定するとセキュリティリスクが発生します。ご自身のPC(開発環境にあたるPC)がネットワーク共有している環境では適用しないことを推奨します。筆者もその前提をもとに設定を記録していますのでIUSR に書き込みや変更を許可する場合は慎重に検討してください。
また、上記にをよく理解していない場合はここでの設定の採用をひかえてください。セキュリティに関しての被害は一切責任を負いかねますことご理解くださいませ。
✔︎ローカル環境でIISのアクセス許可のセキュリティについて設定を検討している人
✔本番環境とは異なり開発環境用の設定を考えている人
✔セキュリティについての知見がありの判断がご自身でできる方
この記事を読み進める前に
✔こちらより以下を読まれる方は以下の条件に了承いただき、設定を採用することにご自身で責任を取ることをご了承いただいたとみなします。
✅ IUSR に書き込みや変更を許可する場合は慎重に検討すること
✅ ネットワーク共有している環境では適用しないこと
前提
・Windows11
・IIS(Internet Information Services)を使用してサイトを見る
・静的サイトの場合です。
・開発環境の設定です。本番環境では書き込み権限を制限するのが基本です。
ローカル開発環境用のIISセキュリティ設定の手順
①IISのセキュリティ設定タブを開く
✔デスクトップのWindowsマーク横の検索でIISを検索して開く
✔IISを開いたら>対象のサイトを選択>アクセス許可の編集…
✔「セキュリティ」タブ>編集>設定画面に到着
②設定を追加
✔編集画面から追加ボタンをクリックして追加する…★
※一つ前と同じような画面ですが違う画面です。
✔「選択するオブジェクト名を入力してください」の欄に入力しOK…★

入力内容は後程まとめたものを載せてます。
✔先ほど入力したものがグループ名またはユーザー名の欄に表示される。それを選択してアクセス許可の欄のチェック項目を設定する。…★
✔…★の作業を必要な設定分繰り返す。( a ~ c )オブジェクト名と許可設定。
※本番には絶対に設定しないでください!本番環境では書き込み権限を制限するのが基本です。
a. Authenticated Users
読み取り:許可
b. IUSR
変更:許可
読み取りと実行:許可
フォルダーの内容の一覧表示:許可
読み取り:許可
書き込み:許可
c. IIS_IUSRS
読み取りと実行:許可
フォルダーの内容の一覧表示:許可
読み取り:許可
✔「適用」クリックして完了
お疲れ様でした!設定完了です✨

各サイトで設定が必要なので、サイトを追加するたびに設定が必要です。また、なんども言いますがこれはローカル設定です。本番ではセキュリティが緩すぎるので行わないようにしてくださいね。あなたが行っている設定の理解が追い付かない・わからない場合も同様です。
次にやること
筆者の流れではありますが、ローカル開発環境用のIISセキュリティ設定が終わったらIISでサイトが動いてるのを確認し、SSIの設定を行うことが多いです。今後また環境構築の流れをまとめた記事も書きたいと思っています。
その他、改めてきになったこと
✔本番はのような設定が必須なのか
サイトを見る人に書き込みや変更、削除の権限を与えてはいけません。IUSR自体を存在させなくしたりします。ここで詳しい設定はしません。本番の設定は設定内容の理解が必要です。
✔各ユーザー(ユーザーグループ)について
【🔍 Authenticated Users とは?】
・「Windowsにログインして認証されたすべてのユーザー」 を指す特殊なグループ。
・「匿名ユーザー(未認証のユーザー)」とは違い、何らかの方法でWindowsにログインした人が含まれる。
<Authenticated Users に含まれるユーザー>
・ローカルPCのユーザー(Windowsにログインしたユーザー)
・ Active Directoryドメインのユーザー(ドメイン認証されたユーザー)
・リモートデスクトップ(RDP)でログインしたユーザー
・IIS で Windows認証を通ったユーザー(Basic認証・NTLM・Kerberos など)
<🚫 含まれないユーザー ❌ 匿名ユーザー(例:IUSR)>
×ログインしていないゲストユーザー
×ネットワーク経由で認証なしにアクセスしているユーザー

Authenticated Users に「書き込み」や「変更」が許可されていると、ローカルPCやサーバーにログインできる人なら誰でもファイルを編集・削除できてしまう!Windowsにログインできるアカウントなら、だれでも操作可能。社内の誰かが誤って重要なファイルを削除するリスクがある。基本的には「変更」「書き込み」を付与しない方が安全。
【🔍 IURS とは?】
・IIS(インターネット インフォメーション サービス)が提供する「匿名ユーザーアカウント」。
・IISで「匿名認証」を有効にすると、このアカウントが使われる。

IUSR は「匿名ユーザー」を代表するアカウント。いわゆるサイトを訪れる一般のユーザー(未認証の訪問者)たちがこのアカウントの権限だね。 特にHTML, CSS, JS, 画像 などの「静的ファイル」を読み取るときに使われる。なので本番環境でここに変更権限はしない。外部の人たちが変更できるのはセキュリティ的に危険。
【🔍 IIS_IURS とは?】
・ IIS(インターネット インフォメーション サービス)が提供する「IIS関連のユーザーグループ」。
・IIS で動作するアプリケーションやプロセスを制御するためのグループ。
つまり、IIS_IUSRSは、「サイトの中で動いているアプリや機能が、どこにアクセスできるかを制御するグループ」 ということ。
<具体的にIIS_IUSRSが制御するもの>
■サイト内で動くプログラムやスクリプト
・例: ASP.NET, PHP, Node.js など
・動的なページ(データベースとやりとりするページなど)が処理をする権限を管理。
■フォーム送信やデータベースのやりとり
・例えば、ユーザーがログインしたり、問い合わせフォームを送信したりするとき、「このデータを書き込んでもいい?」という判断をIIS_IUSRSが管理。
■画像やファイルをアップロードする機能
・もしサイトに「ファイルをアップロードできる機能」がある場合、どのフォルダに書き込めるかをIIS_IUSRSが制御する。
■キャッシュやログの保存
・Webアプリが一時的にデータを保存するとき、「このフォルダに保存してもOK?」を判断するのがIIS_IUSRS の役目。

つまり、「サイトを見ている人(訪問者)」の権限を決めるのがIUSR。「サイトの中で動くプログラムや機能」のアクセス権を決めるのがIIS_IUSRS。IIS_IUSRSの制御が必要な理由はその機能(プログラム)が意図しないアクションを起こせるようになってしまうから!なので「その役割以外の余計なことができないように、権限を絞る」のが安全な設定!
✔ローカルの設定でAuthenticated Usersは緩めずにIURSを緩くするのはなぜ?
Authenticated Usersは「Windowsにログインしたすべてのユーザー」を含むため、セキュリティリスクが高いから!ではIUSRはどんな人が当てはまるかというと「PCを触っている人」ではなく、「IISがWebリクエストを処理しているとき」に影響する。ローカル開発環境でIISを使ってWebページを開いたときhttp://localhost/にアクセスしたときなどIIS経由でサイトにアクセスした際にIUSRの権限が適応される。
<IUSRの書き込みをなくすとどうなる?>
サイトにリクエストを送っている人が変更できなくなるのだけど、正直「手動でHTMLやCSSを編集するだけ」ならIUSRに書き込み不要のようです。「IIS経由でファイルを変更する機能(CMS、アップロード、自動更新)」がある場合は書き込みが必要になるらしい。

上記から考えると静的サイトでサイトからなにか変更する機能などなければサーバーが側でデータを変更することがないのでIUSRもIIS_IUSRSの読み取りだけでも十分かもしれない。SSIはIIS側の処理だけど「サーバーがHTMLを読み込んで合成する」だけなので、書き込み権限は不要!IISのログ保存を必要としてるならIIS_IUSRSの権限書き込みOK(IISがログを記録する場合)にするといい。これらを知るとWEBサイト静的なものであればもう少し権限を絞るのを検討してもよさそうですね。
💡ローカルなので問題なさそうですが再検討の余地あり!ですね✨↑
✔一部動的で完全に静的サイトではない場合(メール送信機能がある)
📌 ローカル環境でメールを送る方法には主に2種類ある:
1️⃣ SMTPサーバーを使う場合(例: smtp.gmail.com や localhost のSMTP)
⇒IIS経由でメールを送信するが、ファイルには書き込まないので IUSR の権限は不要!
⇒IIS_IUSRS や NETWORK SERVICE には、ネットワークアクセス権が必要。
2️⃣ ローカルにメール送信ログを保存する場合
⇒送信履歴やエラーログをlogs/ フォルダに保存するなら、そこだけ IIS_IUSRSに「書き込み」を許可。
⇒添付ファイルをサーバーに一時保存する場合は、特定のフォルダに「書き込み」権限が必要。
ひとこと
まだまだ知識不足だなと感じるセキュリティ部分。今回のおかげで今の設定の改善が見つけられたり理解できたので早速設定検討をしようと思う。ローカルで他からのアクセスがないから緊張感は弱めだが本番がどうなっているかなどさらに詳しく知っていきたいと思う。
また、最近自分がやってることの範囲がわからなくなってきたので、ついでに調べることにハマっている。ChatGTPに聞くと今回の範囲は

「コーダーの範囲を超えている(本来はインフラ・サーバー管理者の領域)」
らしい。さわることもある。くらいのようです。範囲外の触ること増えてく今日この頃。。。みなさま頑張りましょう~
関連ページ