タイトル: Options -Indexes
SEOタイトル: Apache Options -Indexes 完全ガイド(ディレクトリ一覧の無効化 / .htaccess / セキュリティ)
| この記事の要点 |
|
Options -Indexes とは
Apache HTTP Server には autoindex という機能があり、ディレクトリにアクセスしたとき index ファイル(index.html 等)が無い場合、ディレクトリ内のファイル一覧を HTML として返します。便利な機能ですが、公開サーバでは意図しない情報漏洩の元になります。
Options -Indexes は autoindex を無効化するディレクティブで、セキュリティ上ほぼ必須の設定です。
なぜリスクなのか
autoindex が有効だと、次のようなものが意図せず公開される可能性があります。
- バックアップファイル(
config.php.bak、.sql) - ログファイル(
error.log) - 設定ファイル(
.envのうっかり配置) - 開発中のページ(リンク非公開で URL 直打ちでなければ見えないつもりのもの)
- ディレクトリ構造そのもの(攻撃の手がかり)
設定方法
.htaccess での設定
多くの共有レンタルサーバでは .htaccess をディレクトリに置くだけで設定できます。
# /var/www/html/.htaccess
Options -Indexes
httpd.conf(または conf.d)での設定
自前で Apache を運用する場合は、メイン設定ファイルに書きます。
Options -Indexes
AllowOverride All
Require all granted
全サイトに一括適用
# httpd.conf のトップで
Options -Indexes
AllowOverride None
Require all denied
# その上で公開ディレクトリだけ別途許可
Options -Indexes
Require all granted
Options ディレクティブの記法
| 記法 | 意味 |
|---|---|
Options Indexes | 有効化(上書き設定) |
Options -Indexes | 無効化(差分で打ち消し) |
Options +Indexes | 有効化(差分で追加) |
Options All -Indexes | All - Indexes |
Options None | 全てのオプションを無効化 |
+ / - は前の設定との差分で適用、付けないとフル上書きになる点に注意。継承の挙動が変わるので、+ / - を付ける運用が推奨です。
設定後の挙動
autoindex を無効化した状態で index.html 等が無いディレクトリにアクセスすると、Apache は403 Forbidden を返します。
$ curl -I http://example.com/somedir/
HTTP/1.1 403 Forbidden
Server: Apache/2.4.x
404 を返したい場合
403 だと「ディレクトリは存在するがアクセス禁止」と示してしまうため、404 Not Found を返したい場合は ErrorDocument で差し替えるか、RewriteRule で 404 にします。
# 403 を 404 ページ表示に差し替え
ErrorDocument 403 /404.html
# 完全に 404 として返したい場合
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [R=404,L]
一覧表示を残したい特定ディレクトリ
ファイル共有用などであえて一覧表示したいディレクトリがある場合、サイト全体で -Indexes としつつ、そのディレクトリだけ +Indexes を設定できます。
Options -Indexes
Options +Indexes
その他のセキュリティオプション
| 設定 | 効果 |
|---|---|
ServerSignature Off | エラー画面の Apache バージョン非表示 |
ServerTokens Prod | レスポンスヘッダの Apache バージョン詳細を隠す |
TraceEnable Off | TRACE メソッド無効化 |
Options -ExecCGI | CGI 実行禁止 |
Options -FollowSymLinks | シンボリックリンクの追跡禁止 |
設定の確認方法
# .htaccess を有効にする AllowOverride の確認
sudo apachectl -t # 構文チェック
sudo apachectl -S # VirtualHost 一覧
sudo apachectl -M | head # ロード中モジュール
# 設定変更後はリロード
sudo systemctl reload httpd # RHEL 系
sudo systemctl reload apache2 # Debian / Ubuntu
autoindex 自体のカスタマイズ
あえて autoindex を使う場合、見た目をカスタマイズできます。
Options +Indexes
# ファイル名 / サイズ / 日付 等の表示制御
IndexOptions FancyIndexing FoldersFirst NameWidth=* HTMLTable
# 一覧から除外するファイル
IndexIgnore .htaccess .htpasswd *.bak
# ヘッダ / フッタの HTML
HeaderName /header.html
ReadmeName /footer.html
FAQ
Q: 設定したのに一覧が出るのはなぜ?
A: AllowOverride が None だと .htaccess の Options が無視されます。AllowOverride All または Options を含む値を指定する必要があります。
Q: nginx で同じことは?
A: nginx はデフォルトで autoindex 無効。明示的に有効化したいなら autoindex on;。
関連
- httpd.conf のファイルの場所 — メイン設定ファイル
- AllowOverride — .htaccess の有効範囲
- .htaccess — ディレクトリ単位設定
- mod_autoindex — Apache のディレクトリ一覧モジュール