非サーバー エンジニアの Linux 初心者が CentOS でサーバー構築します。初心者すぎて恥ずかしいけど 誰かの役に立つかも知れない。
初心者とは
さすがにパソコン初心者です! だとサーバーの構築は厳しい。レンタルサーバーを借りてウェブサイトを公開できるくらいのリテラシーを想定。サーバーとは何者か、だいたいは知っているけど実際に構築したことはない。そんな感じ。まさに筆者。
使用環境と構築する環境
Windows 7(64 bit)上の vmware player で CentOS を稼動させます。単一のシステムとして複数サーバーを立てるので固定 IP アドレスにします。最終的に目指すシステム構成は以下です。
- Web サーバー Apache 2.2 + PHP 5.6
- フロント リバース プロキシ サーバー nginx 1.8
- DB サーバー MariaDB 10.0
いわゆる LAMP 環境。ウェブサイトをつくりたいと思っています。
本稿では各サーバーのベースとなる部分をセットアップします。ちなみに本番環境へは Tera Term で ssh するので、練習も兼ねて開発環境も同様に設定します。GUI は使いません。
CentOS 6系か CentOS 7系か
初心者だし、頼れるのはグーグル先生しかいないから、インターネット上に知見の多い 6系を選択。ちなみに 7系はコマンド(操作系)が変わっているらしい。良い悪いじゃなくて情報量で決めました。
CentOS のダウンロード
6系と決めたなら、6系の最新バージョンで良いと思う。筆者は CentOS 6.7 です。
64bit だから「x86_64」のリンクをクリック。
必要なファイルは以下の 1つだけです。沢山あるミラーサーバーは、「Actual Country」なら どこでも そこそこの速度だと思います。サイズは 4GBくらいあるので、回線にもよりますが 20~30分で落ちてくれば十分速いと思います。
- CentOS-6.7-x86_64-bin-DVD1.iso
MD5 チェックサム
ダウンロードが完了したら、念のためファイルが正常かチェック。iso ファイルと同じディレクトリに md5sum.txt があります。Windows 7 で MD5 を調べるなら Microsoft 純正の fciv.exe が使えます。
コマンド プロンプトで以下を入力。
> fciv -md5 CentOS-6.7-x86_64-bin-DVD1.iso
vmware で CentOS 6.7 をインストールして起動
簡易インストールを使用します。iso から直接インストールもやってみたけど、初心者には無理でした。
CentOS on vmware 【超】初期設定
簡易インストールが完了すると CentOS が GUI で起動してきます。サーバーをコンソールから GUI 操作することはないので、GUI を無効にして CLI 起動に変更します。いや変更したい。
でも、初心者は たったこれだけのことをするのに、超えなければならないハードルが いくつもあります。
エディタ
Linux 系の OS では、vi または vim が標準のエディタらしい。コマンド ベースなので知らないと へ? てなります。
キーボード設定
簡易インストールの途中で指定した管理用ユーザーでログインしたら、まずはキーボードの設定。
少しだけですが、サーバー上で直接、設定をします。CLI で。ここで GUI を使うようだと戦う前から負けている。だからキーボード設定を英語キーボードから 106 日本語キーボードに変更します。
まず、デスクトップを右クリックして「Open in Terminal」をクリック。
root(ルート: 超管理者)になるコマンド「su -」を実行。パスワードを求められるので入力。その後 設定ファイルをエディタで開きます。
$ su - # vi /etc/sysconfig/keyboard
以下の通り書き換えます。
KEYTABLE="jp106" MODEL="jp106" LAYOUT="jp" KEYBOARDTYPE="pc"
保存して終了するときに罠がある。「:wq」と入力したいけど、コロン(:)が打てない。まだ英語キーボードだから。Shift + ;(セミコロン)でコロンが打てます。これ 10分くらい調べたよね。
念のため変更の結果を確認。ファイルの内容を表示させるのは cat コマンドです。
# cat /etc/sysconfig/keyboard
設定の反映は再起動。source コマンドが利かなかったから仕方ない。
# shutdown -r now
細かいけど重要な予備知識
コマンドの前にある「$」とか「#」の記号。これはコマンド プロンプトと呼ばれますが、実は大事な意味があります。「$」はユーザー権限、「#」は root 権限で実行するコマンドだよ、という暗黙のルール。これ誰も教えてくれない。Linux 界では常識なのかも知れない。でもマジで誰も教えてくれない。まさしく不文律。気付くまでに数時間 掛かったよね。だいぶハマったこともあったよね。
これからご紹介する数多の参考ページの大半にコマンド プロンプトが表記されています。「#」から始まるコマンドは root 権限で実行します。そんなことは一言も書かれていないけど、不文律だから仕方ない。忘れないで。
でも たまに意味を考えず適当にコマンド プロンプト書いている人もいるから気を付けて。それがインターネット クォリティ。
GUI を無効にして CLI で起動するよう変更する
やっとこれができる。
デスクトップを右クリックして「Open in Terminal」をクリック。開いた CLI で以下を実行。
$ su - # vi /etc/inittab
最終行「id:5」の部分を「id:3」に書き換える。再起動すると CLI で起動します。
id:3:initdefault:
# shutdown -r now
管理用ユーザーで sudo できるようにする
まだ「su -」で root になってもいいのだけど、このタイミングで sudo できるようにしておこう。
コマンドの先頭に「sudo」を付けるとユーザーでも root 権限でコマンドを実行できる。
なぜ そんな面倒なことをするのか。一言でいうと安全装置。どんなに root を扱うことに優れたプロのサーバー屋でも、普段は安全装置を掛けておく。root の恐ろしさを誰よりも理解している。それがプロ。そんな感じ。たぶん。
以下 2つのページの内容を順に実施。ただ、新しいアカウントは追加せず、簡易インストールのときに作成された管理用ユーザーでいいと思います。なので、管理用ユーザーを wheel グループに追加する以下のコマンドからスタートです。
# usermod -G wheel 管理用ユーザー
- CentOS で root 権限を持ち、sudo を実行できるユーザーを作成する | Webセキュリティの小部屋
- CentOS で root の リモートログイン(SSH)を禁止する | Webセキュリティの小部屋
ちなみに wheel(ホイール)って車輪のことだと思うけど、運用、という意味なのかしら。
IP アドレスの設定
デフォルトの DHCP から固定 IP アドレスに設定を変更します。手順は以下のページが分かりやすかったです。
参考までに、筆者の設定は以下の通りです。IP アドレスの第 3 オクテットは環境によって異なります。
DEVICE="eth0" BOOTPROTO="none" HWADDR="00:0C:29:4B:3D:69" IPV6INIT="yes" ※削除 NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="a3a0f984-2d2e-4494-b478-d107695e1256" IPADDR=192.168.31.61 ※追加 NETMASK=255.255.255.0 ※追加 GATEWAY=192.168.31.2 ※追加 PEERDNS=no ※追加
各項目の意味は RHEL のマニュアルをどうぞ。
DNS サーバーの設定
$ sudo vi /etc/resolv.conf
筆者の場合は以下を記述。第 3 オクテットは環境によって異なります。
nameserver 192.168.31.2
IP アドレスの設定が終わると晴れて Tera Term で接続できます。何が嬉しいってコマンドをコピペできる。ここから先は Tera Term で操作します。
初心者に限らず、ログ取得の設定はしておいた方がいいです。何をやったか確実に記録できる。CLI の長所の一つ。人間て忘れる生き物だから。
タイムゾーンと時刻の設定
デフォルトは PDT になっているので、日本のタイムゾーンに変更。
$ sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime
時刻の設定は ntpdate コマンド。
$ sudo ntpdate ntp.nict.jp
インターネットにアクセスしますが、ネットワーク設定に問題なければ すんなり行けるはずです。確認は date コマンド。
$ date
時刻同期設定(ntpd)
本番環境では必要だけど vmware なら不要。でも手順はメモ。
IPv6 の無効化
IPv6 を使わないなら無効にします。
SELinux の無効化
SELinux とは…
SELinux(Security-Enhanced Linux : エスイーリナックス)は、アメリカ国家安全保障局がGPL下で提供しているLinuxのカーネルに強制アクセス制御 (MAC) 機能を付加するモジュールの名称。
カーネル レベルで制御が入るので、正しく扱わないとアプリケーションによっては様々な問題を引き起こすみたい。
ちゃんと使えば、サーバーの脆弱性を突かれても悪意ある者の攻撃に利用されてしまうリスクを減らすことができる。無効にするリスクを理解した上で無効にしたい。
$ sudo vi /etc/selinux/config
以下の通り変更。
SELINUX=disabled
サーバーをリブートすると反映されます。
参考にさせていただいたページ
- SELinuxを無効化する | Smart
- サルでも分かるSELinuxトラブルシュート:第1回 トラブル対処の第一歩は「permissiveモード」 – ITmedia エンタ
- 「SELinuxのせいで動かない」撲滅ガイド – Qiita
不要なサービス(デーモン)の停止
初心者には何が不要なのか分からないけど頑張る。以下のコマンドで現在 自動起動に設定されているサービスを一覧できます。
$ chkconfig --list | grep 3:on
以下のページを参考に、停止するサービスをピックアップ。
- 不要なサービスの停止 | CentOSサーバー構築マニュアル
- 不要なデーモンを停止させる (CentOS 6.5) – Qiita
- 不要デーモンの停止(CentOS6) 初心者のためのLinuxサーバー構築講座
筆者は以下の通りとしました。
$ su - # chkconfig acpid off # chkconfig bluetooth off # chkconfig blk-availability off # chkconfig cpuspeed off # chkconfig cups off # chkconfig haldaemon off # chkconfig ip6tables off # chkconfig kdump off # chkconfig lvm2-monitor off # chkconfig mdmonitor off # chkconfig messagebus off # chkconfig postfix off # chkconfig udev-post off # chkconfig vmware-tools-thinprint off
ssh を公開鍵認証方式にする
ローカルに vmware で立てたサーバーには必要ない。でも本番環境には必要。というわけで練習も兼ねてやってみます。
筆者は WinSCP も使いたいので、一通り全部やりました。
【超】初期設定は以上です。
(おまけ)vmware コピー構築メモ
ここまで作業した VM をベースとして他のサーバーを構築するとき、Vierual Machine フォルダをコピーして起動したあと変更する部分のメモです。
VM をコピーすると、新しい NIC が eth1 として認識されます。eth0 の MAC アドレスを eth1 の MAC アドレスに書き換えます。eth1 は使いません。
以下のコマンドで表示される新しい MAC アドレス(eth1)をメモ。
$ ifconfig -a
以下ファイル内の MAC アドレスをメモしたアドレスに書き換え。
$ sudo vi /etc/udev/rules.d/70-persistent-net.rules
以下ファイル内の MAC アドレスをメモしたアドレスに、IP アドレスを新しいアドレスに書き換え。
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
ホスト名の設定。
$ sudo vi /etc/sysconfig/network
リブート。
$ sudo reboot
本稿は以上です。初心者にしては頑張った方だと思う。自画自賛できたところで また次回。
ivh369