AWSのEC2で行うCentOS 7の初期設定

AWSのEC2で行うCentOS 7の最低限の初期設定をまとめてみました。まだすべき設定が残っているとは思いますので、こちらを更新していければと思ってい

## 開発環境
- Mac OS X（El Capitan） 10.11.6
- CentOS 7 (x86_64) - with Updates HVM

### 事前に用意しておく必要があるもの
- 接続先EC2のパブリックDNS
- デフォルトユーザ（CentOS 7の場合デフォルトはcentos）
- EC2からダウンロードした秘密鍵（デフォルトは****.pem）

### 参考
- [【初心者向け】CentOS 7インスタンスの初期設定手順 ｜ Developers.IO](https://dev.classmethod.jp/cloud/aws/centos7-initial-settings/)
- [EC2でCENTOS7の初期設定でやっておきたい7つの大罪 | あいしんくいっと](https://i-think-it.net/ec2-startup-centos7-7/#i-4)
- [AWSでCentOS7セットアップ後に行うべきこと](https://mekou.com/linux-magazine/aws%E3%81%A7centos7%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E5%BE%8C%E3%81%AB%E8%A1%8C%E3%81%86%E3%81%B9%E3%81%8D%E3%81%93%E3%81%A8/)

## AWSのEC2にSSH接続
### 秘密鍵の配置設定
以下のコマンドを実行してEC2からダウンロードした秘密鍵を【.ssh】ディレクトリに配置し、管理しやすくします。

```
$ mv /Users/ユーザ名/Downloads/秘密鍵名.pem ~/.ssh/
```

### 秘密鍵の権限設定
SSHを機能させるためには秘密鍵が公開されていないことが必要ですので、以下のコマンドを実行てし権限の設定をします。

```
$ chmod 400 ~/.ssh/秘密鍵名.pem
```

### SSH接続
以下のコマンドを実行してAWSのEC2にSSH接続します。

```
$ ssh -i ~/.ssh/秘密鍵名.pem ユーザ名@パブリックDNS
```

### ログイン完了
以下が表示がされたらログイン完了です。

```
[centos@ip-パブリックDNS ~]$
```

## CentOS 7の初期設定
### SELINUXの無効化
以下のコマンドを実行してSELINUXを無効化します。【Disabled】になったら無効化完了です。

```
# ステータス確認
$ getenforce

# 設定変更
$ sudo sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 再起動
$ sudo reboot

# SSH再接続
$ ssh -i ~/.ssh/秘密鍵名.pem ユーザ名@パブリックDNS

# 無効化確認
$ getenforce
```

### パッケージの更新
以下のコマンドを実行してCentOS 7のパッケージを更新します。

```
# パッケージの更新
$ sudo yum update -y
```

### パッケージの自動更新設定
以下のコマンドを実行してyum-cronをインストールし、パッケージの自動更新を設定します。

```
# インストール
$ sudo yum install yum-cron -y

# 有効化確認
$ systemctl list-unit-files | grep yum-cron

# 有効化
$ sudo systemctl enable yum-cron

# 自動更新設定
$ sudo sed -i "s/^apply_updates.*$/apply_updates = yes/g" /etc/yum/yum-cron.conf

# 起動
$ sudo systemctl start yum-cron.service

# 起動確認
$ systemctl status yum-cron.service
```

### タイムゾーンの変更
以下のコマンドを実行してタイムゾーンを変更します。

```
# 現在の設定確認
$ timedatectl status

# ローカルタイムを【Asia/Tokyo】に変更
$ sudo timedatectl set-timezone Asia/Tokyo

# 現在の設定確認
$ timedatectl status
```

### ロケールとキーマップの変更
以下のコマンドを実行してロケールとキーマップを日本語対応に変更します。

```
# 現在の設定確認
$ localectl status

# 選択できるキーマップの確認
$ localectl list-keymaps

# ロケールを日本語とUTF-8に変更
$ sudo localectl set-locale LANG=ja_JP.utf8

# キーマップをjp106に変更
$ sudo localectl set-keymap jp106

# 現在の設定確認
$ localectl status
```

### 不要なサービスの停止（例：postfix）
以下のコマンドを実行して不要なサービスの停止をします。

```
# 有効化サービス一覧確認
$ systemctl list-unit-files --type service | grep enabled

# ステータス確認
$ systemctl status postfix.service

# 停止
$ sudo systemctl stop postfix.service

# 無効化
$ sudo systemctl disable postfix.service

# ステータス確認
$ systemctl status postfix.service
```

## ユーザーアカウント追加
### ユーザーアカウント追加
以下のコマンドを実行して新規ユーザーアカウントを追加します。今回は【newuser】として作成します。

```
# newuserを追加
$ sudo adduser newuser
```

### sudo権限の変更
以下のコマンドを実行してsudoersファイルを安全に編集します。

```
# sudoersファイルの編集
$ sudo visudo
```

作成したnewuserグループをsudoコマンドがパスワード無しで実行できるように追記します。

```
## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
+ %newuser       ALL=(ALL)       NOPASSWD: ALL
```

### ユーザーアカウント切り替え
以下のコマンドを実行してnewuserへ切り替えます。

```
# newuserへ切り替え
$ sudo su - newuser
```

## 公開鍵認証設定
### 公開鍵認証用ファイルの作成
以下のコマンドを実行して公開鍵認証用のディレクトリとファイルを作成します。

```
# newuserのホームディレクトリに.sshディレクトリを作成
$ mkdir .ssh

# ファイルパーミッションを700（所有者のみ、読み取り、書き込み、削除が可能）に変更
$ chmod 700 .ssh

# authorized_keysを作成
$ touch .ssh/authorized_keys

# ファイルパーミッションを600（所有者のみ、読み取りおよび書き込みが可能）に変更
$ chmod 600 .ssh/authorized_keys
```

### キーペアのパブリックキーをコピー
以下のコマンドを実行してパブリックキーをコンピュータから取得します。

```
# パブリックキーをコンピュータから取得
$ ssh-keygen -y

# キーを持つファイルのパスを指定
Enter file in which the key is (/Users/****/.ssh/id_rsa): /path_to_key_pair/my-key-pair.pem
```

表示されたインスタンスのパブリックキー（※以下は例）の末尾の【キーペア名】を除いてコピーします。

```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
```

### 取得したキーペアのパブリックキーをペースト
以下のコマンドを実行して、コピーしたキーペアのパブリックキーを【authorized_keys】にペーストします。

```
#.ssh/authorized_keysを編集
$ vi .ssh/authorized_keys
```

### 追加したユーザーアカウントでAWSのEC2にSSH再接続
以下のコマンドを実行してAWSのEC2にSSH再接続します。

```
$ ssh -i ~/.ssh/秘密鍵名.pem 追加したユーザーアカウント@パブリックDNS
```

### ログイン完了
以下が表示がされたらログイン完了です。

```
[centos@ip-パブリックDNS ~]$
```

[ブログ記事](http://ninolog.com/set-centos7-aws-ec2/)の転載になります。