CentOSにApacheをインストール
思ったよりPhusion Passengerで話が長くなりそうだったので、Apacheだけで投下します。
WEBサーバソフトウェアにあたるApacheのインストール作業です。
記事を書くにあたって、参考にしたのは、
http://dotinstall.com/lessons/basic_sakura_vps/8011
http://dotinstall.com/lessons/basic_sakura_vps/8012
サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)
- 作者: 鶴長鎮一
- 出版社/メーカー: 技術評論社
- 発売日: 2012/03/23
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 109回
- この商品を含むブログ (13件) を見る
ときどき
http://httpd.apache.org/docs/current/ja/
などです。他は適宜書きます。
内容
- インストールコマンド
- 設定ファイル
- 設定の変更内容について
- ServerTokens OS => Prod
- ServerSignature On => Off
- <Directory "/var/www/html">ディレクティブ内の...
- Options Indexes FollowSymLinks => Options -Indexes FollowSymLinks
- 設定の文法の確認・反映
インストールコマンド
http://dotinstall.com/lessons/basic_sakura_vps/8011
を参考にApacheをCentOSにインストールします。コマンドは、
sudo yum -y install httpd
終わったら、chkconfigコマンドで自動起動をONにしておきます。
chkconfig httpd on
設定ファイル
設定ファイルは /etc/httpd/conf/httpd.confです。
この段階でhttpd.confに加えておく修正事項は、
ServerTokens OS => Prod
ServerSignature On => Off
<Directory "/var/www/html">ディレクティブ内の
Options Indexes FollowSymLinks => Options -Indexes FollowSymLinks
です。
これに、Phusion Passengerを入れた際にPassengerを使うための設定とVirtualHostを使うための設定を追加しますが、それはPhusion Passengerのインストールのとき書きます。
設定の変更内容について
設定の変更内容についてそれぞれ説明しておきます。
ServerTokens OS => Prod
たとえば、サーバからJSONなどの形でリクエストが返ってきたとき、
Javascriptの開発者用コンソールのNetworkのところをクリックすると、返ってきたファイルのパス等が並んでいます。
そのうちの1つをクリックすると、ResponseHeaderという項目があって、その中のServerというところにapacheとかnginxとかWEBrickとか出てます。
ここの表示設定がServerTokensです。
このディレクティブに与えることが出来る値は
- ProductOnly(Prod)
- Major
- Minor
- Minimal
- OS
- Full
で下に行くほどたくさんの情報をこの項目に載せますので、セキュリティ的には
一番上のProdにしましょう、という話になります。
ServerSignature On => Off
エラーメッセージ等のフッタにサーバの情報を表示させない
これをOffにしていないと、Not Foundなどのエラー表示のフッターとして
Apache/2.2.20 (Ubuntu) Server at localhost Port 80
という具合にホスト名、ポート番号、OS、Apacheのバージョン等が表示されます。
<Directory "/var/www/html">ディレクティブ内の...
もう少し上の方で、
DocumentRoot "/var/www/html"
と設定されています。
DocumentRootというのは、サーバに設定されているIPアドレスやポート番号によって指定されたホストに対し、クライアントからリクエストが来たときに公開するドキュメントがはいっているディレクトリのルートの位置です。
説明がくどくどして少し分かりにくくなってしまいましたので、例を。
たとえば、上の設定では/var/www/htmlと指定されていますが、
サーバ内の/var/www/html内にindex.htmlを置いておいて、
サーバのドメイン/index.htmlにブラウザでアクセスすると、
/var/www/html/index.htmlの内容が返されることになります。
なお、ブラウザのurl欄にサーバのドメイン名を打ち込んだ時にサーバへアクセスが出来るようになるには、別途、サーバのドメイン名をDNSか/etc/hostsに登録が必要です。
Options Indexes FollowSymLinks => Options -Indexes FollowSymLinks
Indexesはindex.htmlなどがなく、
ドメイン名/ or ドメイン名
のurlに対してリクエストが飛んできたとき、ディレクトリ一覧を表示するかどうかの設定です。
(たまに大学の研究室のホームページでindex.htmlなどを取ると出てくる画面を出さないということですね)
-がついているので、他のディレクティブの設定でオンだったとしてもそこから減算するようにOffにします。
FollowSymlinkはシンボリックリンクをオンにするという意味です。
http://park12.wakwak.com/~eslab/pcmemo/linux/apache/apache6.html
どっとインストールに従っているのと、capistranoでアップロードするとアプリケーションが動くディレクトリを
シンボリックリンクで指定しているのでオフにしていないのですが、
シンボリックリンク攻撃をふせぐため、オフにすることが多いそうです。
[訂正 2015/01/01/3:30]
シンボリックリンク攻撃
シンボリックリンク攻撃について、主に自分のために説明。
スーパユーザしか触って欲しくないファイル(例えば.htaccess,.htpasswdなどですね)にたいして、
スーパユーザ権限で実行されているプログラムを通していじることができるんですね。
で、たとえば、一般ユーザとしてあらかじめ、
% ln -s /etc/passwd /tmp/my_tmpfile
みたいに、tmpファイルの名前で、パスワードがはいったファイルへのシンボリックリンクを作成します。
(スーパユーザ以外にアクセス権減が無いファイルにたいして、シンボリックリンクの作成なら一般ユーザでもできます)
それで、スーパユーザ権限で動いているプログラムに/tmp/my_tmpfileに変更を加えさせると、
プログラムは/tmp/my_tmpfileというテンポラリファイルをいじっているつもりで
シンボリックリンクの先の大事なパスワードファイルを壊してる、というようなことが出来ます。
参考:https://www.ipa.go.jp/security/awareness/vendor/programmingv1/b07_01.html
設定の文法の確認・反映
設定ファイルの文法が正しいかどうかの確認は
service httpd configtest
で行えます。
設定の反映はapahceの起動(一度起動していたら再起動)で行えます。
service httpd start
今回の内容が正しく設定できているかは、
- 自分のパソコンの/etc/hostsにCentOSのサーバのipアドレスを登録
- サーバの/var/www/html以下に好きな内容を書いたindex.htmlを作成
- サーバのipアドレス/index.htmlとブラウザのURLに入力
- 画面に2で書いた内容が表示されているか
で確認すればいいと思います。Apacheが起動できない場合は、sudoつけてやってみてください。