今回さくらのVPSを使用してVPS (仮想専用サーバー)を何台か立ち上げることになったので、備忘録ついでに設定方法を書いておきます。
この記事の内容
- はじめに
- OSの再インストール
- ユーザーの作成
- 特権アクセスの制限
- SSHで接続
- ファイヤーウォールの設定
- SSHの公開鍵認証
- アップデート
- 必要なサーバーソフトウェアの導入
- クリーンアップ
はじめに
環境
この記事では「さくらのVPS」を使用し典型的なサーバー環境、LAMP(Linux, Apache, MySQL, Perl/Python/PHP)を構築するにあたって必要な作業・設定を取り上げています。
今回はさくらのVPSに標準でインストールされている「CentOS 5.5 x86_64」(※2011年9月時点)を使用しています。
Note: 標準インストールではいくらかの設定(不要サービスの停止など)がすでに行われていますので、今回はその前提で書いています。他のOSをインストールした場合やカスタムOSインストールからCentOSをインストールした場合はこの限りではありません。
Yum
CentOSでは、パッケージ管理システムとしてYum(ヤム)が利用できます。
Yumを利用すると簡単にソフトのインストールや削除、アップデートを行えます。OSのアップデートもこのYumで行います。
vi/vimの使い方
この記事ではテキストエディタとしてviとその高機能版であるvimを使用しています。このエディタの主な使い方を以下に記します。
モード
viには「コマンドモード」と「編集モード」があります。起動時にはコマンドモードです。
コマンドモードでは一行削除や保存など様々なコマンドが実行でき、編集モードではキーボードでタイプした文字がそのまま入力されます。
編集モードに入るには「i
」キー(挿入モード)などを押し、コマンドモードに戻るには「ESC
」キーを使用します。
カーソル移動
さくらVPSのリモートコンソールなどでは、矢印キーによるカーソル移動が行えません。代わりにh
,j
,k
,l
キーが対応します。
Note: 矢印キー以外は、コマンドモードのみで利用できます。
h ← j ↓ k ↑ l → 0 行頭 $ 行末 ctrl+b 前の画面 ctrl+f 次の画面
編集方法
i 編集モードに入る(ESCで抜ける) x カーソル位置の文字を削除する dd 一行削除(カット) u 操作の取り消し(Undo) . 直前の編集操作を繰り返す :w 上書き保存 :wq 保存して終了 :q! 変更を破棄して終了
基本的には、希望の位置までカーソルを移動し、「i
」を押して編集し「ESC
」「:wq
」で保存して終了するという流れになります。
上記以外にもviには多数のコマンドが用意されています。「viエディタの使い方」などをご参照ください。
ディスク構成
さくらのVPS 1.5G以上のプランでは、そのHDD容量が仮想ドライブ2台に分割され割り当てられています(詳細)。
標準インストールでは全容量-20GBが/home
に割り当てられているので、肥大化しそうなディレクトリは/home下に置くことをお勧めします。/varに膨大なデータが溜まって気づいたら/dev/hda2が一杯になっていた、というケースも起こり得ます。
OSの再インストール
rootパスワードの決定
rootは全て権限を持つ管理者アカウント(スーパーユーザー)です。このアカウントは不正使用されると大変なことになるので、複雑なパスワードにしましょう。通常時は使用することがない(すべきではない)ので、24桁くらいの長い英数字混合のパスワードにすることをお勧めします。
Note: ただしrootパスワードを忘れると緊急時にどうしようもなくなるので、漏洩・紛失しないよう厳重に保管しておいてください。
再インストール
まずさくらの「VPSコントロールパネル」にログインし、おもむろに「OS再インストール」をクリックします。先ほど決めたrootパスワードを入力し、再インストールを開始しましょう。
Tips: より万全を期す場合はここで仮のパスワードを設定しておき、インストール直後にSSHで接続してpasswd
コマンドでパスワードを変更します。
インストールを開始したら、VPSホームに戻りステータスを確認します。数十秒ごとに更新し、ステータスが「稼働中」になればインストール完了です。
サーバーにログイン
インストールが終わったら、VPSコントロールパネルの「リモートコンソール」を開きます。
www******.sakura.ne.jp Login:
と出たら、root
と入力してログインします。パスワードは先程設定したものを入力します。
Note: リモートコンソールはしばらく応答しないことがあります。コンソールを開いたあとLogin
が出ないときはEnterキーを押してみたり、それでも動かないときは5分程度放置するといいようです。
vimのインストール
設定作業ではテキストエディタを多用するので、viより高機能なvimをインストールしておきます。Yumでインストールできます。
# yum -y install vim-enhanced
ユーザーの作成
普段rootを使用するのは危険なため、管理用のユーザーを作成しましょう。
今回はユーザー名をstaff
とします。適宜読み替えてください。passwd
の後には2回パスワードが聞かれます。
# useradd staff # passwd staff
作ったユーザーをwheel
グループ(管理者の特殊グループ)に参加させます。
# usermod -G wheel staff
特権アクセスの制限
特権アクセス(重要な変更)が必要なときに、いちいちrootにログインするのは面倒です。
そこで一時的にroot権限を得られる幾つかの方法が用意されているのですが、その機能を実行できるユーザーを制限します。
suの制限
シェルのユーザーを切り替えてroot権限を得られるsu
を実行可能なユーザーを制限します。
wheelグループに所属するユーザーのみsuを実行できるようにしましょう。
まず /etc/login.defs
を編集します。
# vim /etc/login.defs
以下の内容を追加します。
SU_WHEEL_ONLY yes
次に /etc/pam.d/su
を編集します。
# vim /etc/pam.d/su
以下の行のコメントを外します。なければ追加します。
auth required pam_wheel.so use_uid
suを使うべきか
できるかぎりsuではなく後述するsudoを使用すべきです。従ってここではsuの使い方の説明は省きます。
sudoの設定
sudo
は、コマンドの実行ごとにroot権限を与えられる機能です。wheelグループのユーザーにsudoの実行を許可します。
sudoを実行可能なユーザーを設定するにはsudoers
ファイルを編集します。構文チェック機能を備えた専用のエディタ「visudo
」が用意されていますので、それを使用します。
# /usr/sbin/visudo
次の行のコメントを外します。
Note: 誤ってNOPASSWORD:ALL
の行を有効にしないように気をつけてください。これはパスワードなしでのsudoを許可してしまいます。
%wheel ALL=(ALL) ALL
sudoの使い方
sudoを使うには、特権アクセスが必要なコマンドの前に「sudo
」を入力します。初回はパスワードが聞かれますので、当該ユーザーのパスワードを入力します。短い時間パスワードが保存され、その間はパスワードなしでsudoを実行できます。
SSHでのrootログイン禁止
標準ではSSHでrootにログインできます。危険なので潰しておきましょう。
# vim /etc/ssh/sshd_config
PermitRootLogin
のコメントを外しno
にします。
PermitRootLogin no
保存して閉じたら、これまでの設定を反映させるために一旦再起動します。
# reboot
SSHで接続
再起動したら、SSHでサーバーに接続します。
接続
Unixや、Macであればターミナル(Macなら/Applications/Utilities/Terminal.app)から以下のコマンドを実行します。staff
は先程作成したユーザー名、***
はサーバーのIPアドレスに読み替えてください。
$ ssh staff@***.***.***.***
Windowsであれば、PuTTYなどを使って接続します(使い方)。
初回接続警告
なお、ホストに初めて接続したときは下記の警告が出ます。yes
と答えましょう。
The authenticity of host 'www.example.com (***.***.***.***)' can't be established. RSA key fingerprint is **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**. Are you sure you want to continue connecting (yes/no)?
ログイン
接続できたら、先ほど作成したユーザー・パスワードでログインします。
ちなみに今後はもうrootを使用しません。特権アクセスはsudoで行います。
環境設定
vim
今後の設定でvimを多用するので、その前に取り急ぎvimの設定を済ませておきましょう。
# vi ~/.vimrc
文字コードを設定します。
set encoding=utf-8 set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis
パスを通す
新規作成したユーザーは/sbin
等にパスが通ってないので、この中のプログラムを実行する際にはフルパスで指定しなければなりません。面倒な場合は予めパスを通しておきましょう。
Note: 一応今後の説明もフルパスで書いていますが、パスを通してしまえば/sbin抜きでも実行できます。
# vim ~/.bash_profile
以下を追加します。
PATH=$PATH:/sbin PATH=$PATH:/usr/sbin PATH=$PATH:/usr/local/sbin
変更を適用します。
# source ~/.bash_profile
ファイヤーウォールの設定
使わないポートはさっさと塞いでしまいましょう。iptables
(パケットフィルタ)の設定ファイルを編集します。
# sudo vim /etc/sysconfig/iptables
以下のように設定します。この設定では内向きのHTTP
,SSH
が許可されています。他にもサービスが必要なときはコメントを外してください。
Note: ここで設定しているのはすべて内向き接続であることに注意してください。外部へのアクセスや名前解決には影響しません。
Tips: 設定の詳細はこちらのサイトをご覧ください。
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ################################################## # SSH -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # HTTP -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT # HTTPS #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT # FTP #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT # MySQL #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT # SMTP #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT # POP3 #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT # IMAP #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT # DNS #-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT #-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p tcp --dport 53 -j ACCEPT ################################################## -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
設定できたらiptablesを再起動します。
# sudo /etc/init.d/iptables restart
SSHの公開鍵認証
現在の設定ではSSHにはユーザー名とパスワードで接続できますが、「公開鍵認証」を導入するとよりセキュリティーを強化できます。パスワードの代わりに予めサーバーに公開鍵を登録しておき、対応する秘密鍵を持っていなければ接続できないようにするのです。
引き続きパスワードで認証する場合はこの節を読み飛ばしてください。
鍵ペアの生成
サーバー
下準備として、サーバーに.ssh
ディレクトリを作成しておきます。パーミッションは700にします。
# mkdir ~/.ssh # chmod 700 ~/.ssh
ローカル
Unixや、Macであればターミナルから以下のコマンドを実行します。
$ mkdir ~/.ssh $ ssh-keygen -t rsa $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/id_rsa $ scp ~/.ssh/id_rsa.pub staff@***.***.***.***:~/.ssh/authorized_keys
ssh-keygen
では鍵のファイル名の確認・パスフレーズが2回聞かれます。ファイル名はyesと答えましょう。パスフレーズは秘密鍵を暗号化するもので、万が一鍵が盗まれても容易には鍵を使用できないようにするためのものです(ログイン時にパスフレーズを聞かれます)。
できあがった秘密鍵はパーミッションを変更してオーナー(自分)以外はアクセスできないようにしておきます。なおこれ以外のパーミッションだと認証を通りません。
scp
では公開鍵をサーバーに転送しています。***
にはIPアドレスを、staff
にはユーザー名を入力してください。
Note: すでにサーバーにauthorized_keys
が存在する場合、上記のscpコマンドは上書きしてしまいます。複数の公開鍵を登録する場合は別ファイル名で転送しておき、サーバー上でauthorized_keysに結合してください。
Windowsであれば、PuTTYgenを利用して鍵ペアを生成できるようです(詳細)。
サーバー
公開鍵のパーミッションを変更しておきます。
# chmod 600 ~/.ssh/authorized_keys
これで公開鍵認証が可能になりました。
パスワード認証の禁止
さて、現状では公開鍵とパスワードの「どちらかを」パスすれば認証するようになっています。それでは本末転倒なので公開鍵でのみ認証を行うようにします。
# sudo vim /etc/ssh/sshd_config
以下の項目をそれぞれnoにします。
PasswordAuthentication no ChallengeResponseAuthentication no
設定が完了したらSSHサービスを再起動します。
# sudo /etc/init.d/sshd restart
これで公開鍵認証の設定は完了です。以後は秘密鍵がなければSSHで接続できません。
アップデート
さて、OSインストール後となればOS/ソフトのアップデートがいくらか溜まっています。まとめて更新しておきましょう。
Note: ここでは初期段階なのでupgrade
していますが、運用開始後の定期的な更新はupdate
で行うほうが安心です(両者の違い)。
# sudo yum -y upgrade
自動アップデート
さくらのVPSでは、標準インストール環境では規定でほとんどの不要サービスが停止されているのですが、その中にはyum-updatesd
(Yum自動更新ツール)も含まれています。もっともyum-updatesdは常駐してメモリを食うので止めたままでいいのですが、それでも自動更新を有効にしたい場合はcronで定期的に起動するyum-cron
を代わりに使いましょう。
Note: バージョン依存のものを動かすなど、自動更新されると困る場合は気をつけてください。あるいはYumの設定で特定のソフトを更新対象外にすることも可能です。
# sudo yum -y install yum-cron
再起動
さて、ここらで一旦再起動しておきます。一旦SSHが切断されるので、数分後にもう一度接続しましょう。
# sudo reboot
必要なサーバーソフトウェアの導入
お疲れ様です。やっと下準備が整いました。いよいよ各種サーバーソフトの導入作業に入ります。
Apache
Yumでインストールします。
# sudo yum -y install httpd
Apacheの設定ファイル(httpd.conf
)を編集します。
# sudo vim /etc/httpd/conf/httpd.conf
この設定に関しては使用目的により大きく異なってきますので、ここでは示しません。分からない場合は、有用なリソースは多数ありますのでそちらをご参照ください。
なお、パフォーマンスに関わる設定は別記事にまとめています。特にさくらのVPS 512などではメモリ容量も限られていますので、最適な設定を行うようにしましょう。
さくらのVPS 1.5G以上のプランでは、冒頭で述べた理由によりDocumentRoot
を/home
下に移動することをお勧めします。
設定が終わったらサービスを起動します。
# sudo /sbin/chkconfig httpd on # sudo /etc/init.d/httpd start
MySQL
MySQLサーバーをインストールします。
# sudo yum -y install mysql-server
設定ファイルを編集します。
# sudo vim /etc/my.cnf
old_passwords=1
の後に以下を追加します。
Tips: old_passwords設定はパスワードに対し旧式のハッシュ化を行うことを意味します。これを0
にするとより長いハッシュが記録されますが、古い仕様のアプリケーションで問題を起こす可能性があります。
default-character-set = utf8
ファイルの最後に以下を追加します。
[mysql] default-character-set = utf8
MySQLサーバーを起動しましょう。
# sudo /sbin/chkconfig mysqld on # sudo /etc/init.d/mysqld start
MySQLのrootパスワードを設定するため、一度rootにログインします。
Note: ここでいうrootとはMySQLにおけるrootアカウントであり、サーバーのrootとは別物です。
# mysql -u root
パスワードを設定します。NEW_PASSWORD
およびwww******c
は適宜書き換えてください。
mysql> SELECT host, user, password FROM mysql.user; mysql> SET PASSWORD FOR root@localhost=PASSWORD('NEW_PASSWORD'); mysql> SET PASSWORD FOR root@www******c.sakura.ne.jp=PASSWORD('NEW_PASSWORD'); mysql> SELECT host, user, password FROM mysql.user; mysql> exit;
これでMySQLサーバーが使用可能になりました。
PHP
PHPもyumでインストールしましょう。ただしphp
でインストールされるのは5.1系です(2010年10月時点)。5.3系はphp53
という名前になっています。
まずphp53関連のパッケージ一覧を取得します。
# yum list | grep php53
リストアップされた中から必要なパッケージを選んでインストールしましょう。
# sudo yum -y install php53 php53-gd php53-mbstring php53-pdo php53-xml
Perl/Python
PerlやPythonは標準インストール済みです。ただしバージョンが古いので、新しいバージョンを走らせたいときはソースからインストールする必要があります。方法の説明は省きます。
Perlモジュールのインストールは?
PerlモジュールのインストールはCPANを使うのが一般的ですが、実はYumからもインストールできます。依存関係も解消してくれる上簡単なのでオススメです。
# sudo yum -y install ImageMagick-perl
もっとも、標準リポジトリに掲載されているモジュールはあまり多くありません。必要なモジュールがないときはrpmforge
リポジトリを追加しましょう(初回のみ)。
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm # sudo rpm -Uvh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm # rm -f rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm # sudo sed -i 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo
利用可能なPerlモジュールの一覧・インストールは以下のように行います。--enablerepo=rpmforge
を指定することでrpmforgeリポジトリが有効になります。
# yum --enablerepo=rpmforge list | grep perl
# yum --enablerepo=rpmforge -y install perl-File-Temp
クリーンアップ
セットアップがすべて終わったら、一応Yumのキャッシュを削除しておきましょう。
# sudo yum clean all
参考サイト
- [WEBLE] はじめてのさくら VPS + CentOS の初期設定からチューニングなどの作業まとめ
- [Yuyak.com] さくらのVPSサーバー構築メモ – 基本設定編, vim, zsh, gitをインストール
No comments:
Post a Comment