本記事のゴール
本記事では、新しく Amazon EC2 (EC2) インスタンスを立ち上げた際にやる初期設定について解説します。
前提条件
本記事では、「新しく EC2 インスタンスを立ち上げた」状態というのは、EC2 のコンソールに進み、「インスタンスを起動」というボタンを押して立ち上げたもののことを指し、AMI からの復元等は含みません。
また、今回は、OS は Amazon Linux 2 であることを前提にお話しします。
既にキーペアを取得して立ち上げた EC2 インスタンスには ec2-user で SSH 接続できる状態になっていると仮定します。
SSH 接続用のユーザの設定
デフォルトユーザの ec2-user のまま運用してもいいのですが、念のため SSH 接続用のユーザを別途用意することとし、ec2-user は今後は使わないこととします。
作業のため、まずはスーパーユーザになります。
$ sudo su -ユーザーを作成、パスワードを設定します。
# adduser ${ユーザ名}
# passwd ${ユーザ名}さらに、作成したユーザーを sudo 実行可能にします。こちらの記事にあるとおり、Amazon Linux も Red Hat 系の Linux なのですが、Red Hat 系の場合 sudo 実行可能にするためにはユーザーをグループ wheel に追加すれば良いです。
# usermod -aG wheel ${ユーザ名}次に、作成したユーザーで SSH 接続可能にします。まずはホームディレクトリ配下に .ssh ディレクトリを作成していきます。
# mkdir /home/${ユーザ名}/.ssh
# chmod 700 /home/${ユーザ名}/.sshchmod コマンドでディレクトリへのユーザーのアクセス権を設定するのですが、SSH 接続においてはこのアクセス権の設定がキモになってきます。
次に、SSH 接続の際の鍵を管理するためのファイル authorized_keys を作成していきます。
# touch /home/${ユーザ名}/.ssh/authorized_keysSSH 接続する手元の PC で、キーペアを作成します。キーペアの作成方法については、Tera Term の場合はこちらの記事を、PuTTY の場合はこちらの記事を参考にしてください。リンクを貼ったどちらの記事も暗号化方式は「SSH-2 RSA」を取っていますが、セキュリティ面では「SSH-2 RSA」方式で鍵を作成していただくのがオススメです。
今、「id_rsa.pub」という公開鍵ができたとします。この公開鍵の内容を、先程の authorized_keys に登録します。
# cat ${id_rsa.pub の置いたディレクトリ}/id_rsa.pub >> /home/${ユーザ名}/.ssh/authorized_keys
# chmod 600 /home/${ユーザ名}/.ssh/authorized_keys最後に、スーパーユーザーで作業してきましたので作成したディレクトリの所有権を作成したユーザーに変更しておきます。
# chown -R ${ユーザ名}:${ユーザ名} /home/${ユーザ名}/.sshここまでで、いったん ec2-user からはログアウトして、作成したユーザーで改めて SSH 接続してみます。ユーザー名、使用する秘密鍵の設定の変更の上、再度接続します。
まずは SSH 接続できたら第 1 段階は OK、さらに、スーパーユーザーになれるか確認します。
$ sudo su -ここでスーパーユーザーになれれば OK です。今後はもう ec2-user は使用しませんので、まずは ssh の設定ファイルを書き換えて、ec2-user で SSH 接続できなくしてしまいます。
# vi /etc/ssh/sshd_config...
DenyUsers ec2-userssh の設定ファイルを書き換えたら、ssh を再起動しておきます。
# systemctl restart sshdまだ、ec2-user は削除されていません。ec2-user はデフォルトではパスワードなしで sudo 実行可能なユーザに指定されているので、
# visudo -f /etc/sudoers.d/90-cloud-init-users# Created by cloud-init v. 19.3-43.amzn2 on Mon, 03 May 2021 05:52:29 +0000
# User rules for ec2-user
#ec2-user ALL=(ALL) NOPASSWD:ALLec2-user に関する sudo の設定を変更しておきます。
タイムゾーンを JST に変更
EC2 インスタンスを立ち上げたばかりですと、タイムゾーンが UTC となっており、日本時間になっておりません。
# date
Mon May 10 09:33:25 UTC 2021これを日本時間に変えるための手順は 2 つで、まずは /etc/localtime に日本を指定します。
# cp -p /usr/share/zoneinfo/Japan /etc/localtime
その上で、/etc/sysconfig/clock を以下のように書き換えます。
# vi /etc/sysconfig/clockZONE="Asia/Tokyo"
UTC=Falseこれで、EC2 インスタンスの時間を日本時間に変更できました。
# date
Mon May 10 18:36:22 JST 2021パッケージの更新
インストール済みのパッケージを最新化しておきます。
# yum update -y日本語環境への変更
日本語環境への変更は、システムファイル /etc/sysconfig/i18n を書き換えるだけです。
# vi /etc/sysconfig/i18nLANG="ja_JP.UTF-8"不要なサービスの停止
Amazon Linux にも、他の OS と同様デフォルトでいくつかのサービスプロセスが走っており、これらのサービスについて全て利用する人はほとんどいないと思います。このような利用しない、不要なサービスについては、CPU やメモリの計算リソースだけでなく、ログファイルを吐き出したりしてディスクを消費する要因にもなりますので、この段階で止めておきます。
サービスの管理については、以下のコマンドで実施できます。
# ntsysv
以下がサービス一覧です。画面上、「*」で有効になっているものには○、無効のものには✕をつけています。○から✕に変更するものについては赤字にしているので、変更してみてください。
| # | サービス名 | 記述 | デフォルト | 変更後 |
|---|---|---|---|---|
| 1 | network | ネットワーク接続するためのもの。 | ○ | ○ |
| 2 | amazon-ssm-agent.service | AWS Systems Manager (SSM) のエージェント。SSM にリソース更新、管理、設定させる。 | ○ | ✕ |
| 3 | amzn2-early-relabel-modules.service | 詳細は不明。 | ○ | ○ |
| 4 | arp-ethers.service | arp コマンドを使用するためのもの。arp コマンドは非推奨ということで、OFF のままに。 | ✕ | ✕ |
| 5 | atd.service | at (指定した時刻に指定したコマンドを実行する) ツール。 | ○ | ○ |
| 6 | auditd.service | 操作ログの収集・監査をするためのデーモン。 | ○ | ○ |
| 7 | blk-availability.service | LVM のミラーデバイスを管理するサービス。LVM 使用でもミラーリングしていないのであれば特に不要 | ✕ | ✕ |
| 8 | chrony-wait.service | システムクロックを同期するために chrony を待つようだが、詳細は不明。 | ✕ | ✕ |
| 9 | chronyd.service | 時刻同期サービス。 | ○ | ○ |
| 10 | cloud-config.service | cloud-init を構成するツール。 | ○ | ○ |
| 11 | cloud-final.service | 同上 | ○ | ○ |
| 12 | cloud-init-local.service | 同上 | ○ | ○ |
| 13 | cloud-init.service | 同上 | ○ | ○ |
| 14 | console-getty.service | ターミナル関連の何かと思われるが、詳細は不明。 | ✕ | ✕ |
| 15 | console-shell.service | 同上 | ✕ | ✕ |
| 16 | crond.service | 定期タスク実行ツール cron。 | ○ | ○ |
| 17 | debug-shell.service | デバッグ、リカバリ用の機能。 | ✕ | ✕ |
| 18 | dm-event.socket | デバイスのマッピングを行っているサービス。 | ○ | ○ |
| 19 | dmraid-activation.service | ベンダー固有のドライバをインストールせずに、RAID デバイスをサポートするもの。 | ○ | ✕ |
| 20 | ec2-instance-connect.service | EC2 Instance Connect を使うためのもの。 | ○ | ✕ |
| 21 | ec2net-scan.service | 詳細は不明。 | ○ | ○ |
| 22 | gssproxy.service | Gss-proxy を使うためのもの。 | ✕ | ✕ |
| 23 | hibagent.service | ハイバネーション (メモリの中身をディスクに一時退避して停止、起動を行う) を行うためのもの。 | ✕ | ✕ |
| 24 | irqbalance.service | 割り込み要求 (IRQ) を複数CPUで分散する。マルチプロセッサになると必要になる。 | ○ | ○ |
| 25 | kpatch.service | 新しいカーネルを再起動せずに、実行中のカーネルに必要なパッチを当てる。 | ✕ | ✕ |
| 26 | libstoragemgmt.service | 外部ストレージアレイ管理プラグイン。 | ○ | ✕ |
| 27 | lvm2-lvmetad.socket | LVM 利用のためのもの。 | ○ | ○ |
| 28 | lvm2-lvmpolld.socket | 同上 | ○ | ○ |
| 29 | lvm2-monitor.service | 同上 | ○ | ○ |
| 30 | mdmonitor.service | ソフトウェア RAID モニタ機能。 | ○ | ✕ |
| 31 | mysqld.service | MySQL サーバー。 | ○ | ○ |
| 32 | nfs-blkmap.service | NFS を使うためのもの。 | ✕ | ✕ |
| 33 | nfs-rquotad.service | 同上 | ✕ | ✕ |
| 34 | nfs-server.service | 同上 | ✕ | ✕ |
| 35 | nfs.service | 同上 | ✕ | ✕ |
| 36 | nginx.service | Nginx。 | ○ | ○ |
| 37 | php-fpm.service | php-fpm。 | ○ | ○ |
| 38 | plymouth-halt.service | Plymouth はグラフィカル起動サービス。 | ✕ | ✕ |
| 39 | plymouth-kexec.service | 同上 | ✕ | ✕ |
| 40 | plymouth-poweroff.service | 同上 | ✕ | ✕ |
| 41 | plymouth-quit-wait.service | 同上 | ✕ | ✕ |
| 42 | plymouth-quit.service | 同上 | ✕ | ✕ |
| 43 | plymouth-read-write.service | 同上 | ✕ | ✕ |
| 44 | plymouth-reboot.service | 同上 | ✕ | ✕ |
| 45 | plymouth-start.service | 同上 | ✕ | ✕ |
| 46 | postfix.service | メールサーバーとしてサーバーを使う場合に必要になる。 | ○ | ✕ |
| 47 | psacct.service | プロセスアクティビティを監視するためのユーティリティ。 | ✕ | ✕ |
| 48 | rdisc.service | ルーターとして動作させる時に経路管理を行うためのもの。 | ✕ | ✕ |
| 49 | rhel-autorelabel-mark.service | 基幹系のサービス。 | ○ | ○ |
| 50 | rhel-autorelabel.service | 同上 | ○ | ○ |
| 51 | rhel-configure.service | 同上 | ○ | ○ |
| 52 | rhel-dmesg.service | 同上 | ○ | ○ |
| 53 | rhel-domainname.service | 同上 | ○ | ○ |
| 54 | rhel-import-state.service | 同上 | ○ | ○ |
| 55 | rhel-loadmodules.service | 同上 | ○ | ○ |
| 56 | rhel-readonly.service | 同上 | ○ | ○ |
| 57 | rngd-wake-threshold.service | ハードウェア乱数関連のサービス。詳細は不明。 | ✕ | ✕ |
| 58 | rngd.service | ハードウェア乱数のサービス。 | ○ | ○ |
| 59 | rpc-rquotad.service | NFS によりリモートマシンにマウントされている、 ローカルファイルシステムのユーザー quota 値を返す RPC サーバー。 | ✕ | ✕ |
| 60 | rpcbind.service | RPC ベースのサービスで接続を確立するもの。 | ○ | ✕ |
| 61 | rpcbind.socket | 同上 | ○ | ✕ |
| 62 | rsyncd.service | サーバー間のファイル同期に使われる。複数台サーバーを考えていないので、いったん無効のままに。 | ✕ | ✕ |
| 63 | rsyncd.socket | 同上 | ✕ | ✕ |
| 64 | rsyslog.service | システムログに使用。 | ○ | ○ |
| 65 | sshd.service | SSH サービス。 | ○ | ○ |
| 66 | sshd.socket | SSH のポートを開けるためのもの。Amazon Linux では sshd でポートを開けているようなので、こちらは不要。 | ✕ | ✕ |
| 67 | sysstat.service | サーバーのリソース監視のためのツール。 | ○ | ○ |
| 68 | systemd-bootchart.service | Linux の起動をグラフで記録する bootchart のためのもの。 | ✕ | ✕ |
| 69 | systemd-readahead-collect.service | 起動時のディスク使用パターン収集サービス。 | ○ | ○ |
| 70 | systemd-readahead-drop.service | 同上 | ○ | ○ |
| 71 | systemd-readahead-replay.service | 同上 | ○ | ○ |
| 72 | tcsd.service | TPM (セキュリティチップ) 開発ツールのためのもの。 | ✕ | ✕ |
| 73 | update-motd.service | message of the day (motd)とは、Linux サーバーにログインした時に表示されるバナーのことで、これを日次で更新している。 | ○ | ○ |
ネクストアクション
EC2 インスタンスを立ち上げたときの初期設定について解説しました。次回は、WordPress サイトの高速化について取り組んでみたいと思います。

