CentOS 6 のLAMP 環境を構築する私的メモです。
検証用途で基礎環境を構築したのですが、久しぶりということもあり結構忘れているし、昔つけたメモも肝心な所が書いてなかったりで役立たずだったのでしっかり残しておこうと思います。
CentOS 6.4 64bit を使って WordPress 用の LAMP 環境を構築するのが目的ですが、今回は OS インストール直後の基礎構築部分についてです。
基本何も入っていない状態を前提に以下を構築します。
- ユーザー作成とセキュリティ周りの設定
- LAMP環境で利用する各種パッケージのインストール
- その他、微調整
言葉にしたので長く感じますが、やる内容的には 1 時間もあればできるはず。
目次
スポンサーリンク
作業用ユーザアカウントの作成と最低限のセキュリティ設定
ここではこんな感じの作業をします。
- resolv.confの確認とntpの設定
- 作業用ユーザアカウントの作成とセキュリティの設定
resolv.confの確認とntpの設定
まず始めは resolv.conf の確認。名前が引けない事には作業が進みません。
OS のインストール時に指定していなければ、ここに利用するネームサーバを ip アドレスで 2 – 3 書いておきます。以下は Google の公開キャッシュ DNS を使う場合の例です。
# vi /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4
SELinux の確認。本来はセキュリティを高めてくれる機能ではありますが、構築に支障が出たりするので切っておきます。
# getenforce Disabled * Disabled 以外の場合は以下で設定 # setenforce 0 # vi /etc/sysconfig/selinux SELINUX=disabled
ntpdate コマンドで初回の強制同期。OS のインストール直後はサーバの時間がズレている事が多いので、同期させて ntpd デーモンを立ちあげておきます。時刻のズレが大きいと ntpd デーモンが起動に失敗したはず。
* 強制時刻同期 # ntpdate -b ntp.nict.jp * ntp.conf の設定 # vi /etc/ntp.conf ----- server ntp.nict.jp * 不要なコメントアウトの行は消して、server を ntp.nict.jp にセット。 * ntpd 起動 & 自動起動の設定 # /etc/init.d/ntpd start # chkconfig ntpd on
作業用ユーザアカウントの作成とセキュリティの設定
作業用ユーザアカウントを作成。この後の設定で root への昇格、sudo 利用の制限をかけるため、管理用に使うアカウントは wheel グループにも所属させておきます。
# groupadd -g 1000 hoge # useradd -u 1000 -g 1000 -G wheel hoge # id hoge uid=1000(hoge) gid=1000(hoge) groups=1000(hoge),10(wheel) # passwd hoge <hoge ユーザで利用するパスワードを入力>
uid, gid にこだわりがなければこれでも OK。
# useradd -G wheel hoge # passwd hoge <hoge ユーザで利用するパスワードを入力>
ls, vi コマンド利用時のカラー設定
個人的には、ls, vi のカラフルな 色 が不要なので以下のように無効化しています。ここはお好みで。
# vi /etc/vimrc * on → off へ変更 syntax off # vi /etc/DIR_COLORS * tty → none へ変更 COLOR none
sudo の設定。wheel グループに所属するユーザアカウントに sudo の利用権限を付けます。
* なければインストール # yum -y install sudo # visudo ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL * %wheel 行頭のコメントアウトを外す
root 権限昇格ユーザの制限。ここでも wheel グループに絞り制限します。
# vi /etc/pam.d/su auth required pam_wheel.so use_uid * 行頭のコメントアウトを外す
ssh の設定。CentOS はデフォルトで root ログインを許可しているのでこれを無効にします。できればパスワードログインも禁止して、公開鍵認証のログインのみに絞れればベターです。
# vi /etc/ssh/sshd_config PermitRootLogin no * 行頭のコメントアウトを外して yes → no へ * パスワードログインを禁止する場合は以下のように * 先に鍵認証のログインテストを済ませて置くこと PasswordAuthentication no # /etc/init.d/sshd restart * sshd を再起動して設定を有効化。
OS のファイアウォール機能を使う場合は以下のように。
iptables で ICMP, TCP 22, 25, 80, 443 (と確立済みの接続) を ANY で開ける。
# vi /etc/sysconfig/iptables ----- ここから ----- *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp --dport 22 -j ACCEPT -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT -A INPUT -p tcp --dport 25 -j ACCEPT COMMIT ----- ここまで -----
限られた人のみ SSH 接続をする場合には、送信元 ip を絞ればなお良いです。
-A INPUT -p tcp -s 192.168.0.1 –dport 22 -j ACCEPT
その他、必要なポートを開けたりして「よく確認して」 iptables を有効化。設定ミスで SSH 接続が切れると多くの場合は面倒な事になると思います。
/etc/init.d/iptables start chkconfig iptables on
最後に全パッケージのアップデートを行い OS を再起動。kernel のアップデートが含まれていない場合はやらなくても OK。
# yum -y update # reboot
yum update について
新しいシステムを構築する場合は、穴を塞いだり、既知のバグを修正する意味でアップデートを推奨します。その後も定期的にアップデートしながらの運用が望ましいですが、動作検証に手間がかかるのと、まれに不具合も起きるのでここは慎重に。
また、kernel バージョンに依存するようなアプリケーションを使う場合は特に注意。その場合は、yum.conf で kernel パッケージを exclude しておくと良いと思います。
これでユーザの作成と最低限のセキュリティ設定は完了です。
LAMP環境で利用する各種パッケージのインストール
次に LAMP 環境を整えるためのパッケージ類をインストールしていきます。サクッと構築したいし、後々の管理が楽なので今回は全て rpm パッケージを使いました。
MySQL → Apache → PHP の順にインストールしていきます。
CentOS の MySQL は未だに 5.1 だったので、5.6 にするため ORACLE 提供のパッケージを使います。
本当は PHP も 5.4 とかがいいなと思ったのですが面倒だったので 5.3 でインストール。後から知りましたけどサードパーティの remi レポジトリを使えば 5.4 がインストールできるみたいです。
MySQL はこんな具合にインストールと初回の設定を行いました。
# wget -q http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.13-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ \ http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.13-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ \ http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.13-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ \ http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.13-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ \ http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-5.6.13-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ # yum -y install MySQL-{client,devel,server,shared-compat}-5.6.13-1.el6.x86_64.rpm * MySQL-shared は依存関係から最後にインストール # yum -y install MySQL-shared-5.6.13-1.el6.x86_64.rpm # rm -f *.rpm
インストールが終わったら MySQL を起動して root パスワードを変更します。root の初期パスワードは /root/.mysql_secret に書いてあります。
# /etc/init.d/mysql start # /sbin/chkconfig mysql on # cat /root/.mysql_secret The random password set for the root user at Sun Aug 25 15:41:36 2013 (local time): 'ここ初期パスワードが記載' # mysql -u root -p > SET PASSWORD FOR root@localhost=PASSWORD('ルートパスワード'); > quit * 初期パスワードのファイルは不要なので削除 # rm /root/.mysql_secret
今回始めて知ったのですが mysql_secure_installation なる簡易のセキュリティ設定ができるツールがあるそうのなので合わせて使ってみました。
以下のような感じで質問に答えていきます。
# mysql_secure_installation * root ユーザーのパスワードを変更、さっきしたので no Change the root password? [Y/n] n * 匿名ユーザーの削除 → yes Remove anonymous users? [Y/n] Y * リモートからの root ログイン禁止 → yes Disallow root login remotely? [Y/n] Y * test データベースの削除 → yes Remove test database and access to it? [Y/n] Y * 権限テーブルをリロード → yes Reload privilege tables now? [Y/n] Y
次は Apache と PHP をインストールします。
# yum -y install httpd php php-mbstring php-mysql
インストールされた各バージョンはこんな具合です。
# httpd -v Server version: Apache/2.2.15 (Unix) Server built: Aug 13 2013 17:29:28 # php -v PHP 5.3.3 (cli) (built: Jul 12 2013 20:35:47) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies # mysql --version mysql Ver 14.14 Distrib 5.6.13, for Linux (x86_64) using EditLine wrapper
設定まで書くと長くなるので、各アプリケーションの設定は後日記載する予定です。
その他、微調整
最後に、今後使うパッケージとか、運用に役立つツールをインストールします。
まずは、サードパーティの rpm レポジトリの追加と、開発パッケージのインストールが済んでいない場合は入れておきます。
* Rpmforge を追加 * 以下 URL より環境にあったパッケージを選ぶ * http://pkgs.repoforge.org/rpmforge-release/ # rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm * インストールしてない場合は開発環境も * ソースをコンパイルしたりするのに使う # yum -y groupinstall "Development Tools"
次に stat 系のツールをインストールしておきます。iostat, ifstat, sar コマンドが利用できるようになるので、トラブルが起きた時の切り分けにきっと役立つはずです。
# yum -y install sysstat # yum -y install --enablerepo=rpmforge ifstat
また今回、nslookup とか dig とかの DNS 系のツールが入っていなかったのでこれも合わせてインストールしました。
個人的には cd, ls, ps と同じ位良く使うコマンドなので必須だと思ってます。
# yum -y install bind-utils
これで最後です。
chkconfig コマンドで書くアプリケーションの自動起動設定を確認しておきます。Apache はまだ未設定なので除外して、設定漏れがないかを確認すると同時に、不要なものがないかを見ておきます。
# chkconfig --list | grep on
長くなりましたが、私的 LAMP 環境構築の基礎編はこんな感じです。