読者です 読者をやめる 読者になる 読者になる

woshidan's blog

そんなことよりコードにダイブ。

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)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

 

ときどき

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
を参考にApacheCentOSにインストールします。コマンドは、

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

 

今回の内容が正しく設定できているかは、

  1. 自分のパソコンの/etc/hostsにCentOSのサーバのipアドレスを登録
  2. サーバの/var/www/html以下に好きな内容を書いたindex.htmlを作成
  3. サーバのipアドレス/index.htmlとブラウザのURLに入力
  4. 画面に2で書いた内容が表示されているか

で確認すればいいと思います。Apacheが起動できない場合は、sudoつけてやってみてください。