検証用 Amazon Linux2 初期設定メモ(2019/10/10 版)
検証用に Amazon Linux2 を作る際、自分なりに実施する初期設定をメモしておきます。 必ずしもセキュリティには十分な配慮をしておらず、あくまで「検証用途」の設定です。
1. 必ず実行しているもの¶
1-1. パッケージをアップデートする¶
パッケージをアップデートします。 カーネルがバージョンアップされている場合、新しいカーネルで起動しなおしたいので、OS を再起動します。 reboot は systemctl へのシンボリックリンクになっていますが、実際に OS を再起動する前に sync する処理が入っている為、明示的に sync コマンドを実行する必要はありません (勿論、sync コマンドを実行しても害はありません)。
古いバージョンのカーネルが存在する場合はディスク容量を節約する為に削除しておきます。
1-2. 作業用ユーザを作成する¶
作業用のユーザを作成します。 後の手順で root ユーザは SSH ログイン出来なくする為、このユーザを管理者グループ (wheel) に追加しておきます。
また、鍵交換方式でログイン出来るよう、このユーザに公開鍵を登録しておきます。
1-3. wheel グループユーザが sudo する際、パスワード不要にする¶
wheel グループに所属しているユーザはパスワード不要で sudo を実行出来るようにします。
sed -i -e "s/%wheel\tALL=(ALL)\tALL/#%wheel\tALL=(ALL)\tALL/g" /etc/sudoers
sed -i -e "s/# %wheel\tALL=(ALL)\tNOPASSWD: ALL/%wheel\tALL=(ALL)\tNOPASSWD: ALL/g" /etc/sudoers
1-4. ec2-user ユーザを削除する¶
Amazon Linux2 にデフォルトで存在する ec2-user は「デフォルトで存在する = ユーザ名を推測される」為、削除しておきます。
1-5. ホスト名を変更する¶
ホスト名を変更しておきます。 現在のホスト名は hostname コマンドで確認できます。
ホスト名を変更するには以下のように実行します。
1-6. タイムゾーンを Asia/Tokyo へ変更する¶
現在のタイムゾーン設定は timedatectl で確認できます。 デフォルトでは未設定であり、UTC 扱いになっていました。
# timedatectl
Local time: Sun 2019-10-06 04:51:38 UTC
Universal time: Sun 2019-10-06 04:51:38 UTC
RTC time: Sun 2019-10-06 04:51:38
Time zone: n/a (UTC, +0000)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
タイムゾーンを設定するには timedatectl set-timezone [TIMEZONE] を実行します。 Asia/Tokyo へ設定するには以下のように実行します。
実行後にタイムゾーンを確認すると以下のように、Time zone: Asia/Tokyo と表示されるはずです。
# timedatectl
Local time: Sun 2019-10-06 13:52:15 JST
Universal time: Sun 2019-10-06 04:52:15 UTC
RTC time: Sun 2019-10-06 04:52:15
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
1-7. プロンプトの色を変更する¶
一般ユーザのプロンプトは水色 (36) に、root ユーザのプロンプトは赤色 (31) に変更します。
echo "export PS1='\[\033[01;36m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/profile
echo "export PS1='\[\033[01;31m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\$ '" >> /root/.bashrc
1-8. root ユーザで SSH ログイン出来ないようにする¶
セキュリティ上の理由から直接、root ユーザではログイン出来ないようにします。 root ユーザで作業しない場合は一度、適切な権限をもった一般ユーザでログインし、それから su や sudo su で root ユーザへ昇格するように運用します。
sed -i -e "s/#PermitRootLogin yes/PermitRootLogin no/g" /etc/ssh/sshd_config
systemctl restart sshd.service
2. 場合によっては実行するもの¶
2-1. 対話的な alias を無効化する¶
好みによると思いますが、検証用のインスタンスであればコマンドを実行する度に対話的な確認は不必要なので、alias を無効化しておきます。
sed -i -e "s/alias rm='rm -i'/#alias rm='rm -i'/g" /root/.bashrc
sed -i -e "s/alias cp='cp -i'/#alias cp='cp -i'/g" /root/.bashrc
sed -i -e "s/alias mv='mv -i'/#alias mv='mv -i'/g" /root/.bashrc
2-2. vi → vim の alias を追加する¶
Amazon Linux2 にはデフォルトで vi と vim の両方がインストールされていました。
# vi --version | grep version
Small version without GUI. Features included (+) or not (-):
# vim --version | grep version
Huge version without GUI. Features included (+) or not (-):
好みによると思いますが、vim メインで使いたい場合は vi とタイプしたら vim が起動するようにエイリアスを設定しておきます。
2-3. epel のインストール¶
EPEL リポジトリを追加しておきたい場合は下記のように amazon-linux-extras を実行します。
3. 実行不要なもの¶
3-1. firewalld と SELinux は初期状態で無効¶
Amazon Linux2 の場合、そもそも firewalld はインストールされていません。 また、デフォルト状態で SELinux は無効化されています。 getenforce で確認すると SELinux が無効化 (Disabled) になっているのが分かります。
3-2. NTP の設定は不要¶
EC2 上に作成した Amazon Linux2 インスタンスの場合、デフォルト状態で AWS が提供する NTP サーバである 169.254.169.123 と同期しています。 従って、追加の NTP 設定は不要ですし、AWS インフラ内で利用する以上、AWS 提供の NTP の方がレスポンスタイムも良いと思いますので、変更しない方が良いと思われます。
# chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 169.254.169.123 3 4 377 4 -14us[ -12us] +/- 319us
^- a.ntp.cloud-one.ru 2 6 377 64 +12ms[ +12ms] +/- 203ms
^- ntpool0.603.newcontinuum> 2 6 377 6 +607us[ +608us] +/- 103ms
^- t2.time.bf1.yahoo.com 2 6 377 266 -4485us[-4487us] +/- 122ms
^- arethusa.tweakers.net 2 6 377 5 -2824us[-2823us] +/- 127ms