AWSのEC2で行うAmazon Linuxの初期設定

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

## 開発環境
- Mac OS X（El Capitan） 10.11.6
- Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type - ami-33c25b55

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

### 参考
- [Amazon Linux インスタンスを設定する](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/Configure_Instance.html)
- [AWS再入門 Amazon EC2(Linux)編 ｜ Developers.IO](https://dev.classmethod.jp/cloud/aws/cm-advent-calendar-2015-aws-re-entering-ec2-linux/#careful-about)
- [EC2 Amazon Linux を立ち上げた時にする初期設定 - Qiita](https://qiita.com/shojimotio/items/79264678e9ea10b6fd19)
- [Amazon Linux サーバセットアップメモ - Qiita](https://qiita.com/Ping/items/09deb80a0be86d5e3145)
- [AWS EC2 Amazon Linuxインスタンス起動後、最初にやることまとめ（SysVinit編） - Qiita](https://qiita.com/yangci/items/ef2ab9b6f0d28bad0881)

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

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

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

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

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

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

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

```
Last login: Mon Jan 15 17:27:41 2018 from ***.***.***.***

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/
```

## Amazon-linuxの初期設定
### パッケージの更新
以下のコマンドを実行してAmazon-linuxのパッケージを更新します。

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

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

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

# 有効化確認
$ sudo chkconfig --list yum-cron

# 有効化
$ sudo chkconfig yum-cron on

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

# 起動
$ sudo service yum-cron start

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

### タイムゾーンの変更
以下のコマンドを実行してインスタンスのローカルタイムとハードウェアクロックを変更します。

```
# 現在の設定確認
$ date

# ローカルタイムを【Japan】に変更
$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

# ハードウェアクロックを【Japan】に変更
$ sudo sed -i "s/\"UTC\"/\"Japan\"/g" /etc/sysconfig/clock

# システム再起動
$ sudo reboot

# 現在の設定確認
$ date
```

### 文字コードを日本語に変更
以下のコマンドを実行して文字コードを日本語対応に変更します。

```
# 文字コードを日本語に変更
$ sudo sed -i "s/en_US\.UTF-8/ja_JP\.UTF-8/g" /etc/sysconfig/i18n
```

### 不要なサービスの停止
以下のコマンドを実行してGUIで不要なサービスの停止することができます。

```
# 不要サービスの一括設定（GUI）
$ sudo ntsysv
```

## ユーザーアカウント追加
### ユーザーアカウント追加
以下のコマンドを実行して新規ユーザーアカウントを追加します。今回は【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
```

## デフォルトユーザ（ec2-user）を削除する場合
### 追加したユーザーアカウントでAWSのEC2にSSH再接続
以下のコマンドを実行してAWSのEC2にSSH再接続します。

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

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

```
Last login: Mon Jan 15 17:27:41 2018 from ***.***.***.***

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/
```

### デフォルトユーザーの削除
以下のコマンドを実行してデフォルトユーザ（ec2-user）とそのホームディレクトリを削除します。

```
# ec2-userとそのホームディレクトリの削除
$ sudo userdel -r ec2-user
```

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