[Apache] .htaccessを有効にしてディレクトリリスティングを回避

binary-1536647_1280
LINEで送る
Share on GREE
Share on LinkedIn

Apacheって、キン肉マンで出てきたジェロニモの必殺技かと思うけど、れっきとしたサーバーモジュールですって言うのはいらない説明?
 
今更ながらApacheサーバーの設定でほんのちょっとだけつまずいたので、備忘録を取っておきます。

Apacheサーバーでファイルが無い階層を見るとディレクトリ一覧が見えてしまう

セキュリティ用語で「ディレクトリリスティング」という事象なのだが、思いっきり脆弱性ポイントであり、ノンセキュアな状態です。
何故この状態がセキュアじゃないのかというと、当たり前ですが、サーバー内の階層が一覧で見えてしまうからです。
上位階層だけならいいんですが、おそらく下層も同じように見れるということは、htmlファイルなど表示系のファイルが無い階層で
かつデータファイルが置いてある場合など、そのデータファイルにダイレクトアクセスできてしまうわけですね。怖いですね。パスワードなんか書いてあったら、もうアウトですね。
 
もっと詳しい説明ここではしません。知りたい人はググるか、こちらのサイトに書いてあります。
ディレクトリ非表示の意味をもう一度見つめ直す

とりあえずApacheの設定を行う

まずは”.htaccess”ファイルを有効にする。

多くのサイトで説明が書いてあるのですが、Apacheの設定は下記がそれにあたります。

次に.htaccessの設置

そして対象のサイトのroot階層に.htaccessを設置します。内容は以下の1行を書くだけ

でも、この作業だけでは、ディレクトリリスティングが解消されませんでした・・・orz
何故???

解決方法

実はそんなに大騒ぎすることではないんですが、2つの必要な要素がありました。

Before

今回の環境は、DebianにインストールされているApacheで複数ドメインが存在しているのでsite-enabledフォルダで管理していました。
なので下記階層のファイルが対象

そして内容は以下の通り

間違いその1「Optionsパラメータが足りない」

どうやら下記のパラメータが挿入されていないといけないようです。
これってデフォルトじゃなかったっけな?いつ抜けたんだろ?もしかしたら最初から無い?でも、この1行を追加すればOK

間違いその2「Directoryタグの階層がrootになってる」

DocumentRootに書いてある階層と、Directoryタグの階層が違っている事に気が付きました。
正しくは下記の通り

修正後

※g不要な「Require all granted」は削除しておきました。

無事修正完了

スクリーンショット 2017-06-01 17.42.02
ディレクトリリスティングから、上記のような画面になれば、.htaccessが有効になっていて、リスト表示をしないようにセットできている証拠です。
でも、実はこの段階でも、「Apacheのバージョンが見えている・・・」というツッコミもあり、さらなるApacheの設定をする必要があるんですが、一番早く回避する方法は、なんにも書いていない「index.html」ファイルを置いておくだけで、自動的に空白画面になってくれるんで、そういう対処方法もありますね。
 
サーバーセットはセキュリティの基本でもあるため、自分でちゃんと対応できるようにしなければいけませんね。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*