EC2 basic provisioning
- Install yum packages
- Change character set / Timezone
- Set NTP
- Update hostname
# Update yum packages. yum update # Only security package. yum update --security # Install commands for fault investigation. yum install tree dstat sysstat iotop # For dev (considering cost). vi /etc/crontab # +0 22 * * * root /sbin/shutdown -h now >/dev/null 2>&1 # Change Char code. vi /etc/sysconfig/i18n # +LANG="ja_JP.UTF-8" # Change Timezone. strings /etc/localtime TZif2 TZif2 UTC0 # If only this change, Timezone settings will be restored when the server is restarted. cp /etc/localtime /etc/localtime.org ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # Timezone settings are retained after reboot. cp /etc/sysconfig/clock /etc/sysconfig/clock.org vi /etc/sysconfig/clock # (※1.) # +ZONE="Asia/Tokyo" /etc/init.d/crond restart # Start ntpdate # Amazon Linux synchronizes the system clock with NTP in the initial state. chkconfig ntpdate on chkconfig --list | grep ntpdate # Stop iptables # Iptables is stopped to secure by security group. vi /etc/sysconfig/i18n vi /etc/sysconfig/network vi /etc/sysconfig/network-scripts/ifcfg-eth0 vi /etc/modprobe.d/disable-ipv6.conf ps aux | grep ip6 service ip6tables stop chkconfig ip6tables off alternatives --config mta iptables -L ps aux | grep ip chkconfig iptables off chkconfig --list | grep iptables # Check NTP status ntpstat # ok. synchronised to NTP server (12.34.56.78) at stratum 3 time correct to within 399 ms polling server every 64 s # If no activity appears in the output of this command, it is likely that a security group, network ACL, or firewall is blocking access to the NTP port. ntpq -p # Update Host name vi /etc/sysconfig/network # HOSTNAME=<custom hostname> # Reboot and apply settings. reboot
Hostname と Timezone 変更, Iptables 停止 script
#!/bin/bash # sh <filename>.sh <hostname> HOSTNAME=$1 if test "$HOSTNAME" = "" ;then echo "HOSTNAME Parameter error" exit 1 fi echo "127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 $HOSTNAME" > /etc/hosts echo "::1 localhost6 localhost6.localdomain6" >> /etc/hosts sed -i s/localhost.localdomain/$HOSTNAME/ /etc/sysconfig/network hostname $HOSTNAME cp -fp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime sed -i s@\"UTC\"@\"Asia/Tokyo\"@ /etc/sysconfig/clock chkconfig iptables off chkconfig ip6tables off chkconfig --list | grep ip exit 0
Add dev user.
EC2 以外の user 追加用簡易 script を実行。Amazon Linux では他 Linux によくある wheel group 等の管理 group 全体に sudo を付与しているわけではない。user 単位に設定されているため新規追加した user にも個別に sudo 権限を付与する。
if [ $# -ne 1 ]; then echo "assigned arguments are $# count." 1>&2 exit 1 fi cat <<__EOT__ user name $1 will be create. __EOT__ user=$1 useradd $user -G wheel passwd $user mkdir /home/$user/.ssh cd /home/$user/.ssh # get public key ssh-keygen -t rsa -C "" mv /root/.ssh/id_rsa.pub /home/$user/.ssh/authorized_keys mv /root/.ssh/id_rsa /home/$user/.ssh/${user}_rsa chmod 600 /home/$user/.ssh/authorized_keys chmod 700 /home/$user/.ssh chown -R $user:$user /home/$user/.ssh cat /home/$user/.ssh/${user}_rsa
authorized_keys を編集し get public key
で取得した key pair の public key を貼り付ける。
sudoしたいなら visudo でwheelを有効にする。
visudo
# %wheel ALL=(ALL) ALL
NOPASSWDを消して、以下に変更する。
visudo -f /etc/sudoers.d/cloud-init <user> ALL=(ALL) ALL
sshでログインできることを確認する。
sudo時パスワード入力必須にしても、suがパスワード無しで実行できては意味がない為、rootパスワードも設定する。
# suからのroot実行を制御 sudo passwd root sudo service sshd reload
sudoers
file を編集、ec2-user の権限を剥奪。
visudo -f /etc/sudoers.d/cloud-init # +newuser ALL = (ALL) ALL # -ec2-user ALL = NOPASSWD: ALL
ec2-user の ssh を拒否。
vi /etc/ssh/sshd_config
# +DenyUsers ec2-user
環境変数の設定 (適宜)
ログイン時に一回だけ実行したい場合は .bash_profile
に記載、shell を起動する度に実行したい場合は .bashrc
に記載。
# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions alias ls='ls --color' alias l='ls -1' alias la='ls -1A' alias ll='ls -1alF' HISTTIMEFORMAT='%Y-%m-%dT%T%z '
ユーザー変更 (適宜)
# add / modify user (※2.) useradd[usermod] # options # `-c` comment (文字列) を変更 # `-g` primary group 名を変更。group 名は `/etc/group` ファイルで定義した group 名 # `-G` secondary group を変更(複数選択可) **aをつける** # `-d` 既存の user 名を変更 # `-u` user ID を変更 # setting password passwd newuser visudo -f /etc/sudoers.d/cloud-init # +<newuser> ALL = (ALL) ALL # add groups # `-G` のみで新しい sub group を追加すると、既に設定されていた他 group の設定が全て消える usermod -aG[gpasswd -a] <group> <user> # 該当グループに所属しているユーザーを確認 getent group wheel # delete user # -r option で home directory ごと削除。 userdel -r <olduser>
※1. UTC=true
を falseにするとハードウェアのクロックもローカルタイムで設定されてしまう為、変更しない。
※2. sudoersファイルを編集する際は /etc/sudoers
を直接編集しない。ユーザの定義は /etc/passwd
にあるが、セキュリティ的に直接編集はしない。