インスタンス構築時基本設定

環境

項目 説明
OS 4.9.32-15.41.amzn1.x86_64

パッケージアップデート

$ yum update
# セキュリティパッケージの更新のみ
$ yum update --security

環境設定

# ファイルツリー表示
$ yum install tree

# 障害調査時に使うコマンドをインストール
$ yum install dstat sysstat iotop htop

Crontab(オプション)

開発環境の場合、お金が勿体無いので22時に終了するよう設定する

$ vi /etc/crontab
---
0 22 * * * root /sbin/shutdown -h now >/dev/null 2>&1
---

文字コードの変更

$ vi /etc/sysconfig/i18n
---
#LANG="en_US.UTF-8"
LANG="ja_JP.UTF-8"
---

Timezone(タイムゾーン)確認・変更

確認

$ strings /etc/localtime
TZif2
TZif2
UTC0

変更(この変更だけだとサーバ再起動時Timezoneの設定が戻ってしまう)

// オリジナルをバックアップ
$ cp /etc/localtime /etc/localtime.org

// タイムゾーンファイルの変更
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

変更(再起動後もTimezoneの設定が保持される)

$ cp /etc/sysconfig/clock /etc/sysconfig/clock.org
$ vi /etc/sysconfig/clock
---
// ZONEの変更
ZONE="Asia/Tokyo"
// falseにするとハードウェアのクロックもローカルタイムで設定されてしまう為、変更しない
UTC=true
---

$ /etc/init.d/crond restart

ntpdateの起動

Amazon Linuxは初期状態でNTPによるシステムクロックの同期を行っている。

$ chkconfig ntpdate on
$ chkconfig --list | grep ntpdate

iptablesの停止

セキュリティグループを利用しているため, iptablesは停止する.

$ ps aux | grep ip6
$ chkconfig --list | grep iptables
$ chkconfig ip6tables off
$ chkconfig iptables off
$ chkconfig --list | grep iptables

NTPの確認

$ ntpstat
# 正常
synchronised to NTP server (12.34.56.78) at stratum 3
time correct to within 399 ms
polling server every 64 s

$ ntpq -p
# このコマンドの出力にアクティビティが表示されない場合は、セキュリティグループ、ネットワーク ACL、またはファイアウォールが NTP ポートへのアクセスをブロックしている可能性が高い。

Hostname(ホスト名)変更

$ vi /etc/sysconfig/network
---
// Hostnameの変更
HOSTNAME=[ 指定したいホスト名 ]
---

リブート(設定を反映)

$ sudo reboot

開発用ユーザーの追加

認証鍵の生成

$ ssh-keygen -t rsa -C ""

ユーザーの作成

[ec2-user ~]$ sudo adduser newuser
[ec2-user ~]$ sudo su - newuser
[newuser ~]$
[newuser ~]$ mkdir .ssh
[newuser ~]$ chmod 700 .ssh
[newuser ~]$ touch .ssh/authorized_keys
[newuser ~]$ chmod 600 .ssh/authorized_keys
# 任意のテキストエディタで authorized_keys ファイルを編集し、キーペアのパブリックキーをファイルに貼り付ける。

新しく追加したユーザーへsudo権限を与える。

$ sudo visudo
---
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

# 追加
developer ALL=(ALL) ALL
---

sshでログインできることを確認。

$ ssh -i ~/.ssh/xxx developer@11.11.11.11

“sudo” 利用時に、パスワードを入力させる設定を行う。

$ sudo passwd developer

“ec2-user” の権限剥奪

“ec2-user” が “sudo” 実行時に、パスワードを入力させる設定を行う。
※ 設定を誤った場合、ec2-user からsudoできなくなり何もできなくなる可能性がある為、複数のSSH接続を行い、常にrootユーザとして作業可能な接続を確保しておく。

# パスワードを設定
$ sudo passwd ec2-user

# ec2-userがsudoする際にパスワード入力が必要になるよう、設定を変更。
$ sudo visudo -f /etc/sudoers.d/cloud-init
---
#ec2-user ALL = NOPASSWD: ALL

# User rules for ec2-user
#ec2-user ALL=(ALL) NOPASSWD:ALL
ec2-user ALL=(ALL) ALL
---

ec2-userのsshアクセスを拒否する。
/etc/ssh/sshd_config

#追加
DenyUsers ec2-user

“su” からのroot実行を制御

“sudo” 時パスワード入力必須にしても、”su” がパスワード無しで実行できては意味がない為、rootパスワードも設定する。

$ sudo passwd root

#設定を反映
$ sudo service sshd reload

管理用ユーザーの変更

Amazon Linuxでは、よくある “wheel” グループなどの管理グループ全体に “sudo” を付与しているわけではなく、ユーザー単位に設定されているため、新規で追加したユーザーにも個別に “sudo” 権限を付与する。

# 新規ユーザー追加
$ sudo useradd newuser

# 鍵などをec2-userからコピー&権限設定
$ sudo cp -arp /home/ec2-user/.ssh /home/newuser/
$ sudo chmod 700 /home/newuser/.ssh
$ sudo chown -R newuser /home/newuser/.ssh

# 新しいユーザーのパスワードを設定
$ sudo passwd newuser

環境変数の設定

こちらを参照。