EC2インスタンス(Amazon Linux)の初期設定

AMIにAmazon Linux(64bit版)を選択して、EC2インスタンスを立ち上げた際に行う初期設定に関してまとめてみます。

はじめに

EC2インスタンスを立ち上げた場合、使用目的に応じて各種設定を行う事になると思いますが、ここでは使用目的に関わらず、行っておく方がよいと個人的に思っている設定に関して書こうと思います。

Amazon Linux を想定していますが、もともとはVPS等外部公開する Redhat系Linuxにおいて行っていた手順をAmazon Linux 用に整理した感じです。

RedhatやCentOS等を外部公開する場合の設定手順としても使える部分もあるかと思います。

環境

以下の環境を想定しています。

AMI Amazon Linux 2013.09 (3.4.82-69.112.amzn1.x86_64)

日本(語)関連の設定など

文字コード設定

文字コードを日本語に設定しておきます。

$ sudo vi /etc/sysconfig/i18n
以下内容で設定します。
#LANG="en_US.UTF-8"
LANG="ja_JP.UTF-8"

タイムゾーン設定

デフォルトでは日本時間にはなっていないので必要に応じて適宜変更します。

$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime
日本時間になったかどうかは以下で確認できます。
$ date
2014年  3月  6日 木曜日 13:20:47 JST

実は上のようにコピーしただけの場合、yum によるアップデート/再起動後にタイムゾーンがUTCに戻ってしまう場合がありました。
これに関しては、/etc/sysconfig/clock に以下の設定を行います。

$ sudo vi /etc/sysconfig/clock
以下内容で設定します。
ZONE="Asia/Tokyo"
UTC=false

参考 : インスタンスの時間を設定します - Amazon Elastic Compute Cloud

パスワード設定

AMI に Amazon Linuxを選択した場合、SSH接続にはpemファイルを利用した認証が必要であるため、pemファイルの管理に問題がなければパスワードの設定は必ずしも必要ないかもしれません。

しかし、pemファイルが漏洩した場合を考えると、root権限が必要となる作業を行う場合には、パスワードの入力を求めるように設定しておいた方がよいと思います。
※実際に漏洩した疑いがある場合には、キーペアファイルを作り直して、漏洩した可能性があるファイルは利用不可にしましょう。

初期設定ではec2-userはパスワードの入力無しで sudo できてしまうので、先ずこれができないように設定を行います。

※以下設定を誤った場合、ec2-user から sudo できなくなって何もできなくなる可能性があります。複数のSSH接続を行い、常にroot ユーザとして作業可能な接続を確保しておくなど、設定内容を誤った場合でもリカバリできる形で作業を行う事をお勧めします。

ec2-user の設定変更

  1. ec2-user にはパスワードが設定されていないため、設定を行います。
    パスワードを二回問い合わせてくるので、適当なパスワードを設定して下さい。
    $ sudo passwd ec2-user
    ユーザー ec2-user のパスワードを変更。
    新しいパスワード:
    新しいパスワードを再入力してください:
    passwd: 全ての認証トークンが正しく更新できました。
    
  2. ec2-user が sudo する際にパスワード入力が必要になるよう、設定を変更します。
    $ sudo visudo -f /etc/sudoers.d/cloud-init
    
    以下内容で編集
    #ec2-user ALL = NOPASSWD: ALL
    ec2-user ALL = (ALL) ALL
    
  3. sudo してみます。
    sudo -i
    [sudo] password for ec2-user: 
    
    パスワード入力を求められるので、先に設定したec2-user のパスワードを入力して root ユーザになれる事を確認してください。

rootのパスワード設定

sudo 時パスワード入力必須にしても、su がパスワード無しで実行できては意味がありません。root パスワードも設定しておきます。

  1. root パスワードを設定(変更)します。
    $ sudo passwd root
    [sudo] password for ec2-user:
    ユーザー root のパスワードを変更。
    新しいパスワード:
    新しいパスワードを再入力してください:
    passwd: 全ての認証トークンが正しく更新できました。
    
  2. su してみます。
    $ su
    パスワード:
    
    設定した root のパスワードを入力して root ユーザになれる事を確認してください。

SSHの設定変更

LinuxをVPS等に建てる場合にはSSHの設定として

  • パスワード認証を禁止し、鍵認証を設定
    Amazon Linux ではデフォルトで設定済み
  • root ログイン禁止
    これも設定済み
  • ポート番号変更

といった事を行います。
ポート番号の変更は気休め程度ですが、不特定多数のホストに対してポートスキャンをかけている場合、22番ポートが開いていないという事で素通りされる可能性は高くなると思います。
※ホスト指定で狙われている場合には効果はないと思ってよいです。

SSHのポート番号を変更する場合には以下のようにします。
  1. /etc/ssh/sshd_config を編集します。
    $ sudo vi /etc/ssh/sshd_config
    
    以下内容(抜粋)で編集します。
    #
    #Port 22
    Port XXX  <= 実際のポート番号を設定する
    #AddressFamily any
    #ListenAddress 0.0.0.0
    #ListenAddress ::
    
  2. 編集したら、設定に問題ないか確認します。問題がない場合何も表示されません。
    $ sudo /usr/sbin/sshd -t
    
  3. 設定に問題がなければsshdを再起動します。
    $ sudo /etc/rc.d/init.d/sshd restart
    sshd を停止中:                                             [  OK  ]
    sshd を起動中:                                             [  OK  ]
    
  4. 新たなポート番号で接続可能かどうか確認してください。

    ※この場合も、現在のセッションはそのままで、別セッションでの接続確認をお勧めします。繋がらなくなった場合に戻せなくなる可能性があります。

    ※EC2 の Security Group 設定で変更後のポートでの接続許可がなされていない場合、接続できません。こちらの設定も必要に応じて変更して下さい。

スワップ追加

t1.micro ( マイクロ ) インスタンスの場合にはスワップ領域が設定されていません。
通常スワップ無しでも問題なく動作しますが、Javaのアプリケーションサーバを起動するような用途の場合にはある程度のスワップ領域があった方が安心できます。 ※ t1.microはメモリ613MBと他インスタンスと比べてメモリも少ない

  1. 先ずスワップファイルを作成します。
    以下では、t1.microのメモリ613MBの約二倍の大きさでスワップファイルを作成しています。

    ※ "スワップ領域の容量は物理メモリの2倍で設定すべし"と昔は言われていましたが、物理メモリの容量が増えた現在は必ずしもそうではありません。参考: パーティション設定に関する推奨 - Redhat

    $ sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=1280
    
  2. 作成したファイルをスワップ領域として設定します。
    $ sudo mkswap /mnt/swapfile
    
  3. スワップを有効にします。
    $ sudo swapon /mnt/swapfile
    
  4. 有効になっているか確認します。
    $ free
                 total       used       free     shared    buffers     cached
    Mem:        608292     340308     267984          0       7436      30504
    -/+ buffers/cache:     302368     305924
    Swap:      1310716     548292     762424
    
  5. (再)起動時に自動的にマウントされるように設定を行います。
    $ sudo vi /etc/fstab
    
    以下内容で設定を追記します。
    /mnt/swapfile none      swap    sw              0   0
    

※ 次回再起動時には自動マウントされているか確認した方が確実です。

パッケージのアップデート

インストールされているパッケージもアップデートしておきましょう。
最新版でセキュリティホールが修正されている場合もあるため、できる限り最新版を利用しておいた方がよい。

$ sudo yum update

その他

アンチウィルスとかルートキットチェックとか他にも設定した方が、と思えるものもありますが、それらについてはまた時間があるときに

※関連記事も併せてどうぞ