CentOS7.x 基本設定メモ


7.xがリリースされてからもう随分経ちますが、ずっと食わず嫌いで6.xでやって来ました。
が、そろそろ7.xも使うので6.xの違いなどをメモ。基本設定からLAMPのセットアップまで。
テストは、Mac上のVM Ware Fusion7上で行っているので、一部、それに依存。

##忙しい人向け

6.xとの主な違いは下記の通り。後は随時ググる。

* ifconfigはip aに。
* servicesはsystemctlコマンドに。 systemctl start/stop httpd.serviceなど。
* chkconfigもsystemctlコマンドに。 systemctl enable/disenable httpd.serviceなど。
* iptablesはfirewall-cmdコマンドで制御。 firewall-cmd --list-allなど。

.serviceは付けなくても動く。

##インストールして最低限の設定

###インストール

特に難しいことはない。開設は他者に譲る。

###インストール後の設定
####eth0の認識 (VMFusion依存)

VM Ware FusionにCentOSをインストールすると初期状態でネットワークがONになっていない。今までは、手動で/etc/sysconfig/network-scripts/ifcfg-eth0とかを編集していましたが、VM Ware FusionでMacアドレスを再発行すれば認識してくれるようです。

##使う準備をする

###

###何は無くてもifconfig

インストール時はifconfigは使えない。使いたければ、

```bash
sudo yum install net-tools
```
とすると、いろいろ使えるようになる。ただ、郷に入れば郷に従えなので、ipコマンドを使う。

```bash
ip a
```
とする。ip addrの略。

###一般ユーザーの追加

```bash
useradd hoge
passwd hoge
```

###SSHでのログイン（初期状態）
標準(Minimal)インストール状態でもsshdは動いてポートも開いているようです。rootログインも可能な状態。テストならばまあ、このままでも良い。
最終的にはrootからのログインをnoにし、証明書インストールのみOKとする（後ほど）。

###sudoの許可
ここも6.xと変わらない。wheelグループのユーザーに許可する。

```bash
visudo
```
とし、

```bash
%wheel   ALL=(ALL)       ALL
```
をコメントイン。#を消す。

```bash
visudo
```
そして、sudoを許可するユーザーをwheelに追加。

```bash
gpasswd -a hoge wheel
```
私はgpasswd派。

###SELinuxの無効化

このへんは6.xと同じ。

```bash
getenforce
```
で状態確認。/etc/sysconfig/selinuxを編集する。

```bash
SELINUX=disabled
```
とし、再起動。

###firewalldの起動・停止
CentOS7からは従来のiptablesではなく、firewalldを利用します。
普段は停止させることはないが、問題の切り分け時などには必要なのでひとまず起動と停止を。

```bash
systemctl stop firewalld
systemctl start firewalld
```
Firewalldの詳しい説明は[ここ](http://www.kakiro-web.com/linux/firewalld.html)のサイトが大変参考になります。
標準ではdhcpのクライアントとssh（サービス）が許可されているようです。

###httpdのインストール
firewalldのテストも兼ねて、とりあえずhttpdのインストール。これは普通にyum。
なお、CentOS7ではApache2.4.xとなる。

```bash
yum install httpd
systemctl start httpd.service
systemctl enable httpd.service
```
http://servername/ にアクセスしてみます。

サービスの永続化ができたかどうかは

```bash
systemctl list-unit-files  -t service | grep httpd
```
などとする。chkconfig --list的なもの。

###firewalldの設定
とりあえず、ポートのOpen, close。
####80番ポートを追加（許可）

```bash
firewall-cmd --permanent --add-port=80/tcp
```
サービスでもOKだけど、カスタムとか大変なので、とりあえずポートでいいかなと。

####変更反映

変更したらreload。

```bash
firewall-cmd --reload
```

####設定の確認
確認は、

```bash
firewall-cmd --list-all
```
とする。

####80番ポートを非許可（削除）

```bash
firewall-cmd --permanent --remove-port=80/tcp
```

###SSHログイン（証明書のみ許可）
本番運用ではIDとPWでログインというわけにはいかないあので、鍵のみでのログインを許可します。
手順は6.xと変わりはありません。

####鍵の生成
鍵の生成はどこでやってもいいのですが、まあ、ローカル(Mac)でやるとこうことで。
まず、鍵の保存場所を作っておきましょう。標準では~/.sshとなるので、作っておきます。また、適切にパーミッションも設定しておきます。

```bash
#ローカル
mkdir ~/.ssh
chmod 700 .ssh
```
保存場所ができたので鍵の生成をします。

```bash
#ローカル
ssh-keygen -t rsa
```
標準ではid_rsaという名前で秘密鍵を生成するか？と聞いてくるのでそのまま進みます。パスフレーズは空でもいれても良い。そうすると、

* id_rsa（秘密鍵）
* id_rsa.pub（公開鍵）

の2つのファイルが生成されます。このうち.pubの方をサーバにあげます。
なお、生成された2つの鍵のパーミッションを600にしておきます。

```bash
#ローカル
chmod 600 ~/.ssh/*
```

####鍵の転送
転送の前に、サーバ側で転送先となるディレクトリをサーバのhomeディレクトリに作成し、パーミッションを正しく設定しておきます。

```bash
#サーバ側
mkdir ~/.ssh
chmod 700 .ssh
```
転送はscpで行います。なお、サーバ側ではid_rsa.pubをauthorized_kesとします。

```bash
scp ~/.ssh/id_rsa.pub username@192.168.0.100:~/.ssh/authorized_keys #ローカル
```

転送が完了したらID,PWのログインをブロックする前にログインできるかテストをしておきます。

```bash
ssh username@192.168.0.100
```
などとし、ID,PWを聞かれず透過的にログインできることを確認します。

####/etc/ssh/sshd_configの設定

変更点は、

* Port 22
* PasswordAuthentication no
* PermitRootLogin no

の3つくらい。Portは必要に応じて。
変更したら、sshdをリスタートします。

```bash
systemctl restart sshd.service
```
rootでsshログインして拒否されることを確認します。

ここまでが、本格的に使えるようになるまでの事前準備でしょうか。

##使う(LAMPのセットップなど)

後は普通にyumで必要なツールをインストールして使うだけ。何かあれば随時更新していきます。
ひとまずはLAMPあたりでしょうか。

 標準リポジトリを利用した場合の6.xとの違いは、
 
 * Apache 2.2.x → 2.4.x
 * PHP 5.3.x → 5.5.x
 * MySQL5.1.x → MariaDB5.5.x

という感じです。

###Apache

既に、上記でインストールしましたが、

```bash
yum isntall httpd
```
とするだけ。
httpd.confで2.2と違う点は、

* Indexesは削除する(-Indexesはエラー）
* .httaccesのためには、AllowOverride all + Require all grantedとする。

```xml
<Directory "/var/www/html">
	AllowOverride All
	Require all granted
</Directory>
```
という感じ。

###PHP5.6

Laravel5.1.x用にPHP5.6をインストールします。

####レポジトリ
epel, remiを個別にインストールしなくても、下記でどっちも入るそうです。

```bash
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```
epelやremi-safeがenabled=1になっているので0にしておきます。
どのレポジトリがonになっているかは、

```bash
yum repolist all
```
で確認。

####インストール

基本コンポーネント。

```bash
yum install php php-common --enablerepo=remi,remi-php56
```

その他、必要コンポーネント。

```bash
yum install php-mysqlnd php-mbstring php-gd php-pdo php-gd php-xml --enablerepo=remi,remi-php56
```

####Apacheの再起動
phpをインストールしたり、モジュールを追加したら再起動。

```bash
systemctl restart httpd
```
サービスの永続化、80番ポートのOpen等は、上記を参照下さい。

###MySQL
新しいレプリケーションをテストしたいので、5.7をインストールしてみます。

####レポジトリのインストール

```bash
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
```
インストールされた/etc/yum.repos.d/mysql-community.repoを見ると、5.6が標準でenableになっている。なので、enable=0としておく。

####本体のインストール
enablerepo=mysql57-community-dmrとする。

```bash
yum install mysql mysql-devel mysql-server mysql-utilities --enablerepo=mysql57-community-dmr
```

####とりあえず起動と継続化

```bash
sudo systemctl start mysqld.service
sudo systemctl enable mysqld.service
```


####パスワード

初期パスワードは、/var/log/mysqld.logに出力されているので、調べる。

```bash
sudo grep password /var/log/mysqld.log
```
とする。

####パスワードの変更
5.7?ではパスワードポリシーが強化されているので注意。

```bash
mysqladmin password Hoge123! -u root -p
```

####my.cnfの設定

いくつか追加をします。

```bash
[mysqld]
character-set-server = utf8
default-storage-engine = InnoDB
innodb_file_per_table

default_password_lifetime = 0
```
MySQL5.7.4からパスワードの有効期限(デフォルトで360日)が設定されているので、不用意なトラブルを避けるため0を設定し、向こうにしています。

後は必要に応じて

```bash
[mysqld]

server-id=101
log-bin=mysql-bin
set-variable=expire_logs_days=3
```
なども設定します。server-idを振っておくと再起動無しにレプリケーションできるようになります。
log-binも、レプリケーションはもちろん、通常のリカバリにも使えます。binlogが無制限に拡大しないよう、最低限の期限を設定しておきます。