インストール
インストール情報はたくさんありますのでここでは割愛します。
ここでは、VMWare Fusion上にCentOS6.5をMinimalインストールしたことを前提に進めます。
VMWare Fusionの問題1
特に注意点はないが、VMWare Fusionにminimalインストールするとネットワークが有効にならないので、インストールの途中でネットワークが自動起動するように設定しておくと手間が無い。
もし、忘れた場合は、手動でeth0を設定する。
VMWare Fusionの問題2
VMWare FusionでVMをコピーし、MACアドレスを再生成、起動したら、なぜかeth0が認識されません。
代わりにeth1やeth2が認識され、かつ、使用できません。
下記のようにやると解決できるようです。
/etc/udev/rules.d/70-persistent-net.rulesの編集
/etc/udev/rules.d/70-persistent-net.rulesをviで開き、今認識されているインターフェース以外の記述行を削除します。
認識されているインターフェース名をeth0に書き換えます。この時、MACアドレスを控えておきます。
/etc/sysconfig/network-scripts/ifcfg-eth0の編集
ここのMACアドレスを上記で控えたものに書き換えます。
再起動すればeth0を認識しています。参考。
基本設定1
基本設定1としては、
- SELinuxの解除
- 必要ツールのインストール
- ユーザーの追加
- sudo設定
- sshのログイン設定
を行う。
なお、以下の操作は特に注意が無い限りルート権限で行うものとします。
SELinuxの解除
SELinuxがON(enforcing)になっていると設定等がきかないことが起こるので、OFFにしておく。
vi /etc/selinux/config
とし、
-SELINUX=enforcing
+SELINUX=disabled
とする。
getenforce
でDisabledとでればOKです。
必要ツールのインストール
Minimalインストールでは以降の手順で必要なツールがインスイトールされていません。
個別にインストールしてもいいのですが、Development toolsをインストールしておけば問題ないので、そうします。
yum groupinstall 'Development tools'
一般ユーザーの追加
ユーザーの追加
必要な一般ユーザーを作成しておきます。
useradd hoge
passwd hoge
sudo権限の付与
一般ユーザーで設定作業ができるように追加したユーザーにsudoが可能な権限を与えておきます。
まず、wheelグループへのsudo許可を有効にます。
visudo
として、設定ファイルを起動し、
-# %wheel ALL=(ALL) ALL
+ %wheel ALL=(ALL) ALL
wheelに関する行をコメントインします。
完了したら、今度はsudo権限を与えたいユーザーをwheelグループに参加させます。
gpasswd -a hoge wheel
適当なコマンドでsudoできるかチェックして下さい。正しく設定したのにsudo出来ない場合は、一度ログアウトして再ログインして見てください。
SSHログイン設定(証明書のみでのログインを許可)
CentOS6.5はMinialインストールでもsshは許可状態になっていますが、パスワードによるログイン、およびルートログインが許可された状態なので、証明書を利用したsshログインのみを許可する設定にします。
・鍵の生成
ローカル環境がMacだということを前提に進めます。
homeディレクトリに.sshを作成し、その中で鍵を生成します。
mkdir ~/.ssh
chmod 700 .ssh
cd .ssh
keygen -t rsa
標準設定のままEnterを押せばいいでしょう。パスフレーズは空でも設定してもいいです。
設定が完了すると、.sshの中に
- id_rsa(秘密鍵)
- id_rsa.pub(公開鍵)
の2つのファイルができます。この内、公開鍵をサーバに転送します。
転送の前に、両鍵に正しいパーミッション設定をしておきます。
chmod 600 ~/.ssh/*
鍵を保存するフォルダ、ファイルに正しいパーミッションを設定していないと接続時にエラーになります。
・鍵の転送
転送に先立ち、サーバ側で保存先を作成し、パーミッションを設定しておきます。
mkdir ~/.ssh
chmod 700 .ssh
sshが使える状態なので、scpにてサーバに鍵を転送します。
scp ~/.ssh/id_rsa.pub username@192.168.0.100:~/.ssh/authorized_keys
usernameやIP(サーバ名)は適宜変更して下さい。
転送が完了したら、ログインのテストを行って下さい。標準のまま鍵を転送し、かつ、ユーザー名がローカルと一致している場合は、
ssh 192.168.0.100
とするだけでOKです。
ポート名、鍵の場所(名前)、ユーザー名が違う場合は、
ssh -p 6666 -i ~/.ssh/hoge_id_rsa hoge@192.168.0.100
などとします。
・鍵以外のログインの禁止
sshdの設定を変更して、鍵以外、ルートログインを禁止します。
そのためには/etc/ssh/sshd_configを編集します。変更点は、
- PasswordAuthentication no
- PermitRootlogin no
とする感じです。Portも必要に応じて変えてもいいです。
変更したら、sshdを再起動します。
service sshd restart
ssh root@192.168.0.111などとし、拒否されることを確認して下さい。
基本設定2
基本設定2では、Firewallであるiptablesの設定をしてみたいと思います。
また、そのテストのためにhttpd(Apache)だけインストールしてみます。
iptablesの有効/無効化
問題の切り分け時に一時的にFirewallをOFFにしたい時があります。その場合は、
service iptables stop
でOKです。恒久的にOFFにする場合は、
chkconfig iptables off
とします。
設定内容の確認
設定内容は、/etc/sysconfig/iptablesを見ればいいのですが、
iptables -L -v --line-number
とするのが私の好みです。
- -Lは表示。
- --line-numberは行番号を表示(追加、削除の際に使う)。
- -v インターフェースとかも表示したいので。
初期状態では、下記のようになっている模様。
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 35 3092 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- any any anywhere anywhere
3 0 0 ACCEPT all -- lo any anywhere anywhere
4 0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
5 66 13068 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 20 packets, 2680 bytes)
num pkts bytes target prot opt in out source destination
普通にWebサーバとかを立てて外部からのアクセスをコントロールしたい場合は、INPUT Chainだけ気にしていればいい。
ルールの追加(80番ポート許可)
では、httpdをインストールして、外部からのアクセスを許可してみたい。
httpdのインストール(と起動、永続化)
以下の操作をルートで行う。
yum install httpd
service httpd start
chkconfig httpd on
http//hostname or ip/
でApacheの画面が見えないことを確認する。
iptablesの設定
いつもは/etc/sysconfig/iptablesを直接編集してましたが、ここではコマンドを使ってみます。
iptables -I INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
意味は、
- -Iは最上位に追加、-Aだと末尾に追加となる。
- 標準で、INPUT chainの末尾には全拒否が付与されているので、その上に追加しないと適用されない。
- -m stateは--state NEWを使用するためにstateモジュールを読み込んでいる。
- --state NEWは、新規接続の判断。
iptableでは上の記述ほど優先度が高い。上からマッチしたものが適用される。
内容の保存と再起動
service iptables save
service iptables restart
Apacheの画面が見えるか確認します。
ルールの削除
番号で行うのが一番早い。(削除前に--line-numberで番号を確認する)。
そして、iptables -D で指定する。
iptables -D INPUT 1
MySQLの許可
レプリケーション時等にMySQLのポートも開けておく必要がある。その場合は、
iptables -I INPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
とする。
レプリケーションの場合-sで、接続元(スレーブ)のみを許可した方がいいでしょう。
iptables -I INPUT -s 192.168.0.100 -m state --state NEW -p tcp --dport 3306 -j ACCEPT
全ルールのリセット
iptables -F
で全ルールをリセットできるようです。
サーバ類のインストール
Apache
インストール
既に説明しましたが、
yum install httpd
service start http
chkconfig httpd on
とするだけです。
設定
/etc/httpd/conf/http.confはいじればきりがないですが、
- IndexesのOFF
- .htaccessの許可
くらいはやっておいたほうが後のトラブルが少ないでしょう。
設定反映にはhttpdを再起動して下さい。
PHP
インストール
標準のPHP5.3.3でよければ、
yum install php php-devel php-mysql php-mbstring php-gd
という感じでいいと思います。あとはお好みで。
設定
/etc/php.iniの設定としては、
- date.timezone=Asia/Tokyo
- display_errors=On
とておいた方が何かといいでしょう。設定変更後は、httpdの再起動をお忘れなく。
MySQL
CentOS6.x系ではMySQL5.1.x系です(CentOS7からはMariaDB5.5.x系のようです)。
インストール
yum install mysql-server
service start mysqld
chkconfig mysqld on
となります。ユーティリティーやらクライアントやらもありますが、とりあえずはサーバーのみ。
設定
通常私がしたいDBの基本設定は、
- 文字コードをUTF-8に。
- 標準DBはInnoDBに。
- DB毎にファイルを作成。
あたりで、かつPHPアプリ等からの文字化けを防ぐために、
- skip-character-set-client-handshakeの追加
- [client]にdefault-character-set=utf8の追加
を行います。
[mysqld]
+character-set-server=utf8
+default-storage-engine=InnoDB
+innodb_file_per_table
+skip-character-set-client-handshake
+[client]
+default-character-set=utf8
5.5.3から、[mysqld]でdefault-character-set=utf8は使えなくなったようです。
逆に、5.1.x系でもcharacter-set-server=utf8は使えるようです。
必要に応じて
[mysqld]
server-id=101
log-bin=mysql-bin
set-variable=expire_logs_days=3
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
なども設定します。