small is beautiful

be the worst

AWS EC2 basic provisioning

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 にあるが、セキュリティ的に直接編集はしない。