CentOS6 を VMware Fusion5 で構築した際の作業まとめ

このエントリーの内容

  • VMware Fusion5 を使用して Mac 上に CentOS6 の開発環境を構築
  • そこに Mac の terminal.app から ssh 接続
  • 開発環境における最低限の設定まわりを行う


1. CentOS 6.3(64bit 版) の取得

まずは、独立行政法人 理化学研究所ミラーサイトから CentOS をダウンロード。
URL: http://ftp.riken.jp/Linux/centos/6.3/isos/x86_64/


2. VMware で新規仮想環境作成

今回は VMware Fusion5 で仮想環境を作成した。
上記でダウンロードした DVD1.iso をディスクイメージとして指定。
※ インストール時に作成するユーザーアカウント名を amaneshi1119 にしたと仮定して話を進める。


3. CentOS 最初期設定

a. 何はともあれソフトウェアを最新に

[amaneshi1119@localhost ~]$ su -
[root@localhost ~]# yum update

b. SELinux 無効化

無効化

[root@localhost ~]# setenforce 0

無効化されたことを確認

[root@localhost ~]# getenfore
Permissive

SELinux 設定ファイルで SELINUX の値を disabled に変更

[root@localhost ~]# vim /etc/sysconfig/selinux

SELINUX=disabled

c. セキュリティ対策

仮想環境上ではあるが通常の VPS でのサーバー構築時の備忘録として下記のセキュリティ対策を行った。

c-1. ssh のポート番号変更(ブルート・フォースアタック対策)
c-2. 公開鍵認証設定(RSA暗号方式)
c-3. 公開鍵認証以外でのログインを無効化
c-4. iptables でファイアウォール設定
c-5. su コマンドが使えるユーザーを限定
c-6. sudo 権限を特定ユーザーにのみ付与

c-1. ssh のポート番号変更(ブルート・フォースアタック対策)

とりあえず 10022 に変更

[root@localhost ~]# vim /etc/ssh/sshd_config

Port 10022

c-2. 公開鍵認証設定(RSA暗号方式)

ホストOS(mac)で ssh-keygen を用いて作成

amaneshi1119-no-MacBook-Pro:~ amaneshi1119$ ssh-keygen -t rsa

生成された公開鍵(~/.ssh/id_rsa.pub)の中身をコピーし、
ゲストOS(CentOS)の /home/amaneshi/.ssh/ の下に authorized_keys というファイル名で公開鍵を保存

[amaneshi1119@localhost ~]# vim ~/.ssh/authorized_keys

chmod でファイルのパーミッションを変更

[amaneshi1119@localhost ~]# chmod 600 ~/.ssh/authorized_keys

c-3. 公開鍵認証以外でのログインを無効化

下記に記した各項目を設定していく

[root@localhost ~]# vim /etc/ssh/sshd_config

# 公開鍵認証設定
PubkeyAuthentication yes  # 公開鍵認証許可
RSAAuthentication yes       # RSA暗号方式での認証許可
AuthorizedKeyFile   .ssh/authorized_keys # 秘密鍵ファイル名指定
# 禁止設定
PermitRootLogin no # root ログイン禁止
RhostsRSAAuthentication no # rhosts 認証禁止
PasswordAuthentication no # パスワード認証禁止
PermitEmptyPasswords no # 空文字列パスワード認証禁止
UsePam no # PAM 禁止
ChallengeResponseAuthentication no # チャレンジレスポンス認証禁止

sshd を再起動して設定反映

[root@localhost ~]# service sshd restart

c-4. iptables でファイアウォール設定

[root@localhost ~]# vim /etc/sysconfig/iptables

 *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 -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
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-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
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306   -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 
COMMIT

iptables を再起動して設定を反映

[root@localhost ~]# service iptables restart

c-5. su コマンドが使えるユーザーの限定化

# 作業ユーザーを wheel グループに属させる
[root@localhost ~]# usermod -G wheel amaneshi1119

# wheel グループユーザーのみ su コマンドを使えるように設定
[root@localhost ~]# vim /etc/pam.d/su
# 下記一行のコメントアウトを外して有効化
auth required pam_wheel.so use_uid

# shadow パスワード機能設定ファイルにも wheel グループユーザーのみ su コマンドを使えるように設定
[root@localhost ~]# vim /etc/login.defs
# 下記一行追加
SU_WHEEL_ONLY yes

c-6. wheel グループのユーザーに sudo 権限付与

[root@localhost ~]# visudo
# 下記一行のコメントアウトを外して有効化
%wheel  ALL=(ALL)       ALL 


4. CentOS タイムゾーン・時刻合わせ

a. タイムゾーンを日本に変更

[root@localhost ~]# cp -p /usr/share/zoneinfo/Japan /etc/localtime

b. ntp サーバーを設定

[root@localhost ~]# vim /etc/ntp.conf
server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp

# ntpd を再起動して設定を反映
[root@localhost ~]# service ntpd restart

# chkconfig で自動起動の設定
[root@localhost ~]# chkconfig ntpd on

# date コマンドで設定変更を確認
[root@localhost ~]# date


5. CentOS 日本語化

a. 日本語関連パッケージグループのグループインストール

[root@localhost ~]# yum -y groupinstall "Japanese Support"

b. システム文字セット変更

[root@localhost ~]# vim /etc/sysconfig/i18n
# 変更
LANG="ja_JP.UTF-8"

c. MacBook が日本語キーボードなのでキーボード設定も変更

[root@localhost ~]# vim /etc/sysconfig/keyboard
KEYTABLE="jp106"
LAYOUT="jp"

d. 再起動して設定反映

[root@localhost ~]# reboot


6. CentOS ネットワーク設定

a. プライベートIPアドレスの固定

ホストOSの VMware の vmnet8(NAT通信用仮想ルータ)の dhcpd.conf 確認

amaneshi1119-no-MacBook-Pro:~ amaneshi1119$ vim /Library/Preferences/VMware Fusion/vmnet8/dhcpd.conf

subnet 192.168.136.0 netmask 255.255.255.0 {
        range 192.168.136.128 192.168.136.254;
        option broadcast-address 192.168.136.255;
        option domain-name-servers 192.168.136.2;
        option domain-name localdomain;
        default-lease-time 1800;                # default is 30 minutes
        max-lease-time 7200;                    # default is 2 hours
        option netbios-name-servers 192.168.136.2;
        option routers 192.168.136.2;
}

仮に上記の場合だと、NAT で DHCP が自動で割り当てるレンジが
192.168.136.128〜192.168.136.254 とされているのでその範囲を避けて固定IPを決めればOK。

※ 下記 PDF の p.179 にある
「ホストオンリーネットワーク または NAT 構成で IP アドレスを指定」に詳細説明あり。
http://www.vmware.com/jp/pdf/server_vm_manual.pdf

今回は下記の設定で行ってみる

固定プライベートIP(末尾を好きなもので) 192.168.136.11
サブネットマスク 255.255.255.0
デフォルトゲートウェイVMware の NAT デバイス) 192.168.136.2
DNS(ルーターのIPアドレス 192.168.11.1

b. ゲストOS(CentOS)のネットワーク設定変更

# ifcfg-eth0 の内容を変更
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
TYPE="Ethernet"
UUID="*******************"
HWADDR="**:**:**:**:**:**"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="192.168.136.11"
NETMASK="255.255.255.0"
GATEWAY="192.168.136.2"
DNS1="192.168.11.1"

※上記の変更点は下記2点
1. BOOTPROTOdhcp から static に変更
2. それに伴い、それ以下 IPADDR, NETMASK, GATEWAY, DNS1 の設定を追加

# network を再起動して変更を反映
[root@localhost ~]# service network restart

以上で、以降ホストOSからゲストOSに ssh接続する際は、192.168.136.11 固定でアクセスできる。
これにて基本的な設定は完了。

7. 開発環境の基本的なパッケージインストールと設定まわり

a. gcc インストール

[root@localhost ~]# yum -y install gcc

b. tmux インストール

tmux が依存している libevent も併せてインストール
※ 最新の libevent を入れるためソースコンパイルで行う

まずは libevent

[root@localhost ~]# cd /usr/local/src/
[root@localhost ~]# wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
[root@localhost ~]# tar xvzf libevent-2.0.21-stable.tar.gz
[root@localhost ~]# cd libevent-2.0.21-stable
[root@localhost ~]# ./configure
[root@localhost ~]# make & make install

次に tmux

[root@localhost ~]# cd /usr/local/src
[root@localhost ~]# wget http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.7/tmux-1.7.tar.gz
[root@localhost ~]# tar xvzf tmux-1.7.tar.gz
[root@localhost ~]# cd tmux-1.7
[root@localhost ~]# ./configure
[root@localhost ~]# make & make install

これで tmux を入れたので tmux を実行してみると下記のエラーが出た。

[root@localhost ~]# tmux 
tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

libevent-2.0.so.5 が無いと言われている。実際に ldd すると確かに not found 。

[root@localhost ~]# ldd /usr/local/bin/tmux 
	linux-vdso.so.1 =>  (0x00007fff680a2000)
	libutil.so.1 => /lib64/libutil.so.1 (0x000000317b600000)
	libncurses.so.5 => /lib64/libncurses.so.5 (0x000000317ba00000)
	libevent-2.0.so.5 => not found
	librt.so.1 => /lib64/librt.so.1 (0x0000003170e00000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003172200000)
	libc.so.6 => /lib64/libc.so.6 (0x000000316fa00000)
	libtinfo.so.5 => /lib64/libtinfo.so.5 (0x000000317a200000)
	libdl.so.2 => /lib64/libdl.so.2 (0x000000316fe00000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003170200000)
	/lib64/ld-linux-x86-64.so.2 (0x000000316f600000)

これを解決するためには、tmux の共有ライブラリパス設定ファイルを作成し、
libevent のライブラリが置かれているディレクトリのパスを明記。

[root@localhost ~]# vim /etc/ld.so.conf.d/tmux-x86_64.conf
# 下記一行をファイル内に記述
/usr/local/lib

# ldconfig して有効化
[root@localhost ~]# ldconfig

# not found が解消されているか確認
[root@localhost ~]# ldd /usr/local/bin/tmux 

あとは、適当にその他いくつか初めに入れたい物たちをインストールしていく作業。
あとで、諸々インストール&初期設定のスクリプトを作成して github 上で用意しておく。