Apacheって、キン肉マンで出てきたジェロニモの必殺技かと思うけど、れっきとしたサーバーモジュールですって言うのはいらない説明?
今更ながらApacheサーバーの設定でほんのちょっとだけつまずいたので、備忘録を取っておきます。
Apacheサーバーでファイルが無い階層を見るとディレクトリ一覧が見えてしまう
セキュリティ用語で「ディレクトリリスティング」という事象なのだが、思いっきり脆弱性ポイントであり、ノンセキュアな状態です。
何故この状態がセキュアじゃないのかというと、当たり前ですが、サーバー内の階層が一覧で見えてしまうからです。
上位階層だけならいいんですが、おそらく下層も同じように見れるということは、htmlファイルなど表示系のファイルが無い階層で、
かつデータファイルが置いてある場合など、そのデータファイルにダイレクトアクセスできてしまうわけですね。
怖いですね。パスワードなんか書いてあったら、もうアウトですね。
もっと詳しい説明ここではしません。知りたい人はググるか、こちらのサイトに書いてあります。
ディレクトリ非表示の意味をもう一度見つめ直す
とりあえずApacheの設定を行う
まずは".htaccess"ファイルを有効にする。
多くのサイトで説明が書いてあるのですが、Apacheの設定は下記がそれにあたります。
AllowOverride None
# 下記に変更(None -> All)
AllowOverride All
次に.htaccessの設置
そして対象のサイトのroot階層に.htaccessを設置します。内容は以下の1行を書くだけ
Options -Indexes
でも、この作業だけでは、ディレクトリリスティングが解消されませんでした・・・orz
何故???
解決方法
実はそんなに大騒ぎすることではないんですが、2つの必要な要素がありました。
Before
今回の環境は、DebianにインストールされているApacheで複数ドメインが存在しているのでsite-enabledフォルダで管理していました。
なので下記階層のファイルが対象
/etc/apache2/site-enabled/apache.conf
そして内容は以下の通り
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html/
<Directory />
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
間違いその1「Optionsパラメータが足りない」
どうやら下記のパラメータが挿入されていないといけないようです。
これってデフォルトじゃなかったっけな?いつ抜けたんだろ?もしかしたら最初から無い?でも、この1行を追加すればOK
Options Includes
間違いその2「Directoryタグの階層がrootになってる」
DocumentRootに書いてある階層と、Directoryタグの階層が違っている事に気が付きました。
正しくは下記の通り
<Directory /var/www/html/tech-memo.com/>
修正後
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html/
<Directory /var/www/html/tech-memo.com/>
AllowOverride All
Options Includes
</Directory>
</VirtualHost>
※g不要な「Require all granted」は削除しておきました。
無事修正完了
ディレクトリリスティングから、上記のような画面になれば、.htaccessが有効になっていて、リスト表示をしないようにセットできている証拠です。
でも、実はこの段階でも、「Apacheのバージョンが見えている・・・」というツッコミもあり、さらなるApacheの設定をする必要があるんですが、一番早く回避する方法は、なんにも書いていない「index.html」ファイルを置いておくだけで、自動的に空白画面になってくれるんで、そういう対処方法もありますね。
サーバーセットはセキュリティの基本でもあるため、自分でちゃんと対応できるようにしなければいけませんね。
0 件のコメント:
コメントを投稿