アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

さくらのVPS を使いはじめる 4 - Apache のインストールと初期設定

さくらのVPS への作業メモ 4。今回は Apache のインストールと初期設定をおこなう。

Apache のインストール

まずは Apache がインストールされていることを確認。

$ rpm -qa httpd
$

ない。なにも表示されず。Apache が存在しないことが判明したのでインストールをおこなう。ただし方法は 2 種類ある。

ひとつはソースから自分でコンパイルする方法。最新版を入れたいとかインストール場所を細かく制御したい人むけ。ただし依存関係のあるライブラリを自前で揃える必要があって面倒。最新版は脆弱性なども解決されているので外部公開するサーバーはこちらを選択したほうがよいとされている。

ふたつ目は yum でパッケージからインストールする方法。バージョンが古いのと初期設定が制御できないのがデメリットだがコマンド一発で済むし依存関係は自動的に解決してくれる。アンインストールも当然コマンド一発。

ちなみにインストールで実行するコマンドはこれだけ。

$ sudo yum -y install httpd

アンインストールは以下。

$ sudo yum remove httpd

簡単なのでこちらにする。インストールしたらバージョン確認する。

$ rpm -qa httpd
httpd-2.2.3-43.el5.centos.3
$ httpd -v
Server version: Apache/2.2.3
Server built:   Aug 30 2010 12:28:40

ばっちりインストールされてる。ちなみに 2010/09/15 時点の Apache バージョンをまとめると以下のようになっていた。

バージョン 詳細
2.2.3 さくらのVPS 上の CentOS から yum install httpd で入手できるパッケージ
1.3.42 このブログを置いてるサーバー ( さくらインターネットのスタンダード ) のもの
2.3.8 ( Alpha ) 最新版
2.2.16 最新の安定版

初期設定

よく Apache の初期設定として、稼働専用のユーザーを作成する手順が紹介されているが、yum でインストールした場合は自動的に apache というユーザーが作成されていた。ユーザーについては以下のコマンドで確認できる。

$ cat /etc/passwd | grep apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

シェルに /sbin/nologin (存在しないもの) が指定されておりログイン不可。つまり稼働専用となっているので、これをそのまま使用する。

次は Apache の設定ファイルとなる httpd.conf を編集してゆく。インストール直後で 992 行もあるので vi に不慣れならユーザー ホームにコピーした後に WinSCP で編集してから書き戻すのもよいだろう。今回は vi でサーバー上のものを編集するつもりだが、やはりバックアップは取っておきたいのでユーザー ホームにコピーしてから vi で開く。

$ sudo cp /etc/httpd/conf/httpd.conf $HOME
$ sudo vi /etc/httpd/conf/httpd.conf

User apache まで移動して ユーザーとグループの設定を確認する。

#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.  
#
# User/Group: The name (or #number) of the user/group to run httpd as.
#  . On SCO (ODT 3) use "User nouser" and "Group nogroup".
#  . On HPUX you may not be able to use shared memory as nobody, and the
#    suggested workaround is to create a user www and use that user.
#  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
#  when the value of (unsigned)Group is above 60000;
#  don't use Group #-1 on these systems!
#
User apache
Group apache

どちらも apache になっている。これはそのままでよい。

次は ServerAdmin。これは管理者のメールアドレスまたは URL。サーバー障害時の連絡先としてエラー ページなどに表示される。今のところサーバーを公開する予定はないからデフォルトのままにしておく。公開時はブログの URL にするつもり。メアドはなんとなく怖いので。

#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.  This address appears on some server-generated pages, such
# as error documents.  e.g. admin@your-domain.com
#
ServerAdmin root@localhost

次は ServerName にゆきサーバー名を見る。

#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If this is not set to valid DNS name for your host, server-generated
# redirections will not work.  See also the UseCanonicalName directive.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
# You will have to access it by its address anyway, and this will make
# redirections work in a sensible way.
#
#ServerName www.example.com:80

コメント アウトを解除してサーバーのホスト名を書く。DNS に登録していないなら IP アドレスを指定。私は借りた VPS のドメイン登録などはおこなっていないので IP アドレスをそのまま記述した。こんな感じで。

ServerName XXX.XXX.XXX.XXX

次は DocumentRootWeb サーバーのルート ディレクトリ設定となる。とりあえずデフォルトで。

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"

次は <Directory "/var/www/html"> に属する Optionsオプション設定をおこなう。

#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks

Indexes が設定されているのでアクセスされたディレクトリ内に DirectoryIndex で設定されたファイル (初期状態では index.html index.html) が見つからない場合、ファイル一覧ページが自動生成される。これはセキュリティ的によろしくないので無効化する。

FollowSymLinks はシンボリックリンク用の設定。利用するかもしれないので残しておく。

    Options -Indexes FollowSymLinks

次は ServerTokens まで戻って Web サーバーにアクセスしたクライアントに返す情報を変更する。

#
# Don't give away too much information about all the subcomponents
# we are running.  Comment out this line if you don't mind remote sites
# finding out what major optional modules you are running
ServerTokens OS

初期状態では OS 名が返される。この情報が詳細であるほど攻撃者にサーバー構成のヒントを与えることになるので最小にしておく。Prod を指定するとレスポンス ヘッダーには Server: Apache という名前しか返されない。

ServerTokens Prod

次は ServerSignature。これはエラー ページなどに出力されるサーバー情報の設定となる。

#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of:  On | Off | EMail
#
ServerSignature On

先ほどの ServerTokens と同様に危険なので Off にしておく。

ServerSignature Off

とりあえずここまで編集したら Esc でコマンドモードに戻り :wq で設定を保存。以下のコマンドでて設定に問題がないことを確認する。

$ sudo apachectl configtest
Syntax OK

問題なし。ということで起動してみよう。

起動とサービス登録

Apache の起動は apachectl コマンドに start を指定することでおこなえる。

$ sudo service httpd start
httpd を起動中:                                            [  OK  ]

起動できたら ServerName に指定したアドレスにアクセスしてみる。今回は IP にしたので http://XXX.XXX.XXX.XXX/ というようなアドレスをブラウザのアドレスバーに入力して開く。すると...

Apache テストページ

テストページが表示された。成功のようだ。

最後に OS 起動時に Apache が自動的に起動されるように設定しておく。まず、以下のコマンドを実行して自動起動が有効かを調べる。

$ chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

残念。yum でインストールしてもさすがに自動起動までは設定されないようだ。よって chkconfig コマンドで httpd (Apache) を登録する。

$ sudo chkconfig httpd on
$ chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

ばっちり。ちなみに chkconfig --list で表示される数値はランレベルと呼ばれるシステムの動作モードである。数値の表す内容は以下のようになる。

状態
0 シャットダウン (システム停止中)
1 シングル ユーザー モード (root のみ)
2 マルチ ユーザー モード (ネットワークなし)
3 マルチ ユーザー モード (テキスト)
4 未使用
5 マルチ ユーザー モード (グラフィカル)
6 システム再起動

さくらのVPS 上の CentOS なら 3 以上が起動状態。現在のランレベルは runlevel コマンドで確認可能。実行してみると 3 になっていることがわかる。

$ runlevel
N 3

先ほど設定した Apache の場合、2 ~ 5 が on になっているのでマルチ ユーザー モード以上のランレベルで起動される。つまり OS を再起動すれば Apache もいっしょに起動される。

...今回はここまで。次回は MySQL や Ruby のインストールをおこなう予定。

Comments from WordPress

  • hatihati 2010-09-18T00:01:16Z

    「さくらのVPS を使いはじめる」を隅から隅まで読んでいます。ちょうどさくらのVPSを使い始めたので、タイムリーでした。充実した内容、本当にありがとうございます。資料がないので大変重宝しています。

    MySQLやPHP、phpMyAdminなど、続編が出るのを楽しみにしています。今後ともよろしくお願いいたします。

  • akabeko akabeko 2010-09-18T01:01:34Z

    こんにちは。

    前回の記事へのコメント、ありがとうございました。 もしコマンドや諸設定を試してうまくいかなかった場合や、わかりにくい表現などがあった場合は、どしどしご指摘ください。

    次は MySQL と Ruby ( Enterprise Edition にしようか迷っています ) について書く予定なのですが、WordPress などを動かすことを考えると PHP を取り上げるのも面白そうですね。

  • kakicg kakicg 2010-10-04T12:19:10Z

    起動とサービス登録で

    「$ sudo apachectl start 」は

    「$ sudo service apachectl start」が正解ですね?

  • akabeko akabeko 2010-10-04T13:53:49Z

    この記事で前者の方法にしているのは sudo apachectl configtest などがコマンドの実行履歴で残っていることが多く、補完で前のコマンドを出して引数を書き換える癖がついているだけなので、特に深い意味はなかったりします。

    後者は sudo service httpd start だと思うのですが、こちらのほうがコマンドの実行状態を表示してくれるので、より望ましい方法ですね。記事もこちらに直しておきます。

  • graus 2010-12-02T16:07:33Z

    「さくらのVPS を使いはじめる」を参考にさせて頂きました。

    かじる程度の知識しかないのに興味本位でさくらのVPSを申し込んだのですが、

    いざ利用できる状態になった時に、まず何からすればよいか全くわからず困っていたので、

    とても参考になっております。充実した内容、本当にありがとうございます。

    とりあえず、「Apache のインストールと初期設定」まで作業してみましたが、

    文章も手順もとてもわかりやすく参考になりました。

    明日は、「MySQL のインストールと初期設定」から頑張りたいと思います。笑

    PHP、WORDPRESSなどの続編が出るのを楽しみにしています。今後ともよろしくお願いいたします。

  • なかちょん なかちょん 2011-01-08T07:28:55Z

    はじめまして!

    新しいサーバーを探していたのですが、VPSは知識がなければ人に迷惑をかけたり手間がかかるという話をきいて、迷っていました。

    そんな中、こちらのサイトを拝見し、手順が丁寧に書かれていたので、まずはやってみようと思う勇気!?が出ました。

    感謝です。ありがとうございます。

    今のところなんとかApacheのインストールまでは来ましたので、引き続き取り組んでいきます。

    これからもよろしくお願いします。

  • kakyoin 2011-07-26T19:41:41Z

    httpd -v

    と入力したところ command not found と帰ってきました。

    そこで

    /usr/sbin/httpd -v

    とパス付きで入力したところ

    Server version: Apache/2.2.3

    Server built: May 4 2011 06:51:15

    とApacheの情報がきちんと帰ってきました。

    原因がお判りでしたら教えていただけると幸いです。

  • akabeko akabeko 2011-07-26T23:04:26Z

    @kakyoin
    考えられる原因としては、Apache のパスが通っていないことですね。

    .bashprofile で /usr/sbin にパスを通し、再ログインするか source ~/.bashprofile を実行すれば大丈夫だと思うのですが、それでもダメなら .bash_profile の設定が反映されていないことになります。

  • 感謝 2011-11-08T05:12:48Z

    わかりやすく、勉強になりました。

  • 咲本 敬 咲本 敬 2012-01-25T14:32:35Z

    はじめまして。咲本と申します。さくらVPSでサーバー設定をしようと思っていますが、困っておりまして、経験のあるakabekoさんに仕事としてお願いできないかと思い、コメントさせて頂きました。もし、よろしければメール頂ければと思います。

  • akabeko akabeko 2012-01-25T23:12:16Z

    おはようございます。アカベコです。

    サーバー設定についてですが、現在の勤務先では副業が禁止されております。よって申し訳ないのですが、仕事としては請け負えません。ただしブログはプライベートなので、こちらであれば質問にお答えします。

    ここで質問する場合、サーバーで秘匿したい設定 ( user/pass など ) に直接言及できないもどかしさはありますが、かわりに内容が自然と汎用化されます。もし同じ問題へ遭遇された方がいれば、それは有用な情報となるでしょう。

    というわけで、ブログであれば可能な範囲で質問にお答えしたいと思います。

  • テツヤン テツヤン 2012-04-19T00:08:33Z

    参考にさせていただきました。

    特にセキュリティに関する事は、初心者には大変有益だと思います。

    ありがとうございました。