Amazon Linux にユーザを追加する

Amazon Linux にユーザを追加する

Amazon Linux にユーザを追加する手順。
デフォルトのec2-userと同様にキーファイルを利用した接続を行うための方法を記載します。
※IAMユーザではありません。

はじめに

AWS(EC2)状に構築したAmazon Linuxにユーザを追加する事になりました。

想定しているユーザは、CMSのテンプレート等の編集が可能で、システム設定自体は変更不可。
比較的よくあるケースかと思われます。

  • Webサイトを更新するためのユーザ
  • Webサイトは適当なCMSで動作しており(Wordpress等)、テンプレート等の更新作業等も行う
  • デフォルトの ec2-user とは別ユーザを作成し、適当なパーミッションを設定する

Amazon Linux では初期状態で ec2-user というユーザが用意されており、このユーザでインスタンスに接続する際には、キーファイルを利用したSSH接続を行います。( 公開鍵認証 : id/パスワードによるログインよりもセキュア )

今回追加するユーザに関しても同様にキーファイルを利用したログインとなるよう設定を行います。
ec2-user 用のキーを使いまわすのはセキュリティ上問題があるので、追加するユーザ毎にキーを発行します。

環境

環境は以下です。

サーバ側OS Amazon Linux (64bit)
クライアント側OS Windows 8.1
クライアントソフト PuTTY 0.66-jp

手順

ユーザ追加

先ず、Amazon Linux にユーザを追加します。

# adduser <ユーザ名>

指定したユーザ/グループが作成されます。

確認は以下で ( 作成したユーザ/グループが追加されていればOK )

# cat /etc/passwd
# cat /etc/group

認証のためのキー作成

キーの生成には幾つかの方法がありますが、ここでは以下を利用した方法に関して説明します。

  1. PuTTY (windows) を利用した方法
  2. ssh-keygen (linux) を利用した方法

PuTTY を利用した方法

PuTTY はWindows上で動作するSSHクライアントソフトです。
この手のソフトとしては最も有名なものの一つで、AWSのドキュメント でも説明されています。

PuTTY には SSH鍵を生成するための PuTTYgen というプログラムが同梱されており、これを利用した方法になります。

  1. PuTTY が未インストールの場合、まず取得します。
    PuTTYjp ( PuTTYの日本語版 ) から最新版を取得します。
  2. 取得したアーカイブファイルを適当なディレクトリに展開します。
  3. 展開した先にある puttygen.exe を実行します。
  4. PuTTY Key Generator ウィンドウが開くので、"Parmaeters" 欄で "SSH-2 RSA" が選択されている事を確認し [Generate] ボタンをクリックします。キー生成が行われます。
    putty keygen

    ※生成されるまで暫くかかります。

  5. 生成が完了すると以下のような画面になります。
    putty keygen
    Key comment には適当な(後で識別できる)値を設定し、[Save public key] にて公開鍵、[Save private key] にて秘密鍵をそれぞれ保存します。
    ここではそれぞれ以下ファイル名で作成したものとします。
    秘密鍵client.ppk
    公開鍵client.pub

    ※[Key passphrase]、及び、[Confirm passphrase] に(同じ)パスフレーズを入力して保存する事で、パスフレーズを設定する事も可能です。この場合キーファイルを利用して接続する場合にパスフレーズの入力が求められるようになります。
    セキュリティ要件によって、パスフレーズを利用するかどうかは決めましょう。

  6. 作成した公開鍵をサーバの追加したユーザのホームディレクトリ下にある.sshディレクトリ ( 通常 /home/<追加したユーザ名>/.ssh ) に転送します。
    接続可能なユーザ (ec2-user等) でSCP等を利用して転送して下さい。

    .ssh ディレクトリが存在しない場合、作成したユーザーのhomeディレクトリ直下に .sshディレクトリを作成しておきます。

    # su - <ユーザ名>
    $ cd ~
    $ mkdir .ssh
    $ chmod 700 .ssh
    
  7. PuTTYgenで生成した公開鍵をopenssh互換形式に変換し、authorized_keys ファイルに設定します。
    $ cd .ssh
    $ ssh-keygen -i -f client.pub >> authorized_keys
    $ chmod 600 authorized_keys
    
  8. 公開鍵は削除します ( 必要に応じてバックアップして下さい )。
    $ rm client.pub
    

ssh-keygen を利用した方法

以下、ユーザを追加する Amazon Linux上で操作するものとします。

  1. 先に作成したユーザに切り替えます。
    # su - <ユーザ名>
    

    ホームディレクトリ ( /home/<ユーザ名>/ ) に移動します。

  2. ssh-keygen コマンドを利用してキーを生成します。
    $ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/<ユーザ名>/.ssh/id_rsa):   # 出力ファイル名の確認
    Enter passphrase (empty for no passphrase):   # パスフレーズ
    Enter same passphrase again:   # パスフレーズ確認
    Your identification has been saved in /home/<ユーザ名>/.ssh/id_rsa.   # 秘密鍵
    Your public key has been saved in /home/<ユーザ名>/.ssh/id_rsa.pub.   # 公開鍵
    The key fingerprint is:
    b1:xx:4d:a9:e9:xx:d8:xx:fc:81:e5:xx:26:3c:xx:03 <ユーザ名>@hostname
    The key's randomart image is:
    +--[ RSA 2048]----+
    |            E    |
    |             .   |
    |        .     +  |
    |         o   + . |
    |        S     +.o|
    |         .   ++= |
    |        .o  o.+o.|
    |         . * + oo|
    |         .= + o .|
    +-----------------+
    

    ※ssh-keygen の場合もパスフレーズを設定する事が可能です。設定したい場合、"Enter passphrase ... :"、及び、"Enter same passphrase again:" に対して適当なパスフレーズを設定して下さい。( 不要な場合は何も設定せずにエンターキーを押下 )

  3. 出力ファイル名を指定しない場合、作業ディレクトリ下 .ssh ディレクトリに秘密鍵、及び、公開鍵が生成されます。
    秘密鍵id_rsa
    公開鍵id_rsa.pub
  4. 生成した公開鍵を authorized_keys ファイルに設定します。
    $ cd .ssh
    $ cat id_rsa.pub >> authorized_keys
    $ chmod 600 authorized_keys
    
  5. 作成した秘密鍵をクライアント (Windows PC等) に転送します。
    サーバに接続可能なユーザ (ec2-user等) でSCP等を利用して転送して下さい。
  6. 秘密鍵/公開鍵は削除します ( 必要に応じてバックアップして下さい )。
    $ rm id_rsa*
    
  7. クライアント側に保存した秘密鍵を PuTTY で利用する場合、ファイル形式の変換が必要です。
    上述のAWSのドキュメントにも記されていますが、ここにも簡単に記載します。

    ※AWSのpemファイルをPuTTYで利用する場合と同じ手順になります。

    puttygen.exe を実行します。

  8. PuTTY Key Generator ウィンドウが開くので、"Parmaeters" 欄で "SSH-2 RSA" が選択されている事を確認し、[Load] ボタンをクリックします。
    putty keygen
  9. ファイル選択のダイアログが表示されるので、転送した秘密鍵 (id_rsa)を選択します。一覧に表示されない場合、拡張子を"All Files(*.*)"に変更して下さい。
  10. 通知ダイアログが表示されます。PuTTY で利用する場合にはロードした鍵をPuTTYの形式に変換する必要がある旨表示されています。
    putty keygen notice
  11. [Save private key] ボタンをクリックして PuTTY形式で保存します。
    パスフレーズを設定していない場合、以下警告表示がなされますが問題なければそのまま続行 ( [はい]ボタン ) して下さい。問題がある場合にはパスフレーズを設定してから再実行して下さい。
    putty keygen warning
  12. ファイル保存のためのダイアログが表示されるので、適当なファイル名を設定して保存します。
    ここでは client.ppk というファイル名で保存したものとします。

SSH接続

生成したキーファイルを利用してSSH接続可能か確認します。
利用するクライアントはPuTTYです。
 

PuTTY設定

  1. PuTTY (puttyjp.exe) を実行します。
    puttyjp
  2. 左メニューの [接続]>[SSH]>[認証] をクリックします。
  3. "認証のためのプライベートキーファイル" 欄に生成した秘密鍵ファイルを指定します (参照...ボタンをクリックしてキーファイルを選択)。
    puttyjp
  4. 左メニューの [セッション] をクリックします。
  5. 接続先のホスト名 ( またはIPアドレス )、及び、ポートを入力します。
    puttyjp

    ※今後もこの設定を利用する場合 "セッション一覧" のテキストボックスに適当な名前を入力して [ 保存] ボタンを押しましょう。
    キーファイルや接続先の情報がセッションとして保存され、次回からは保存したセッションをダブルクリックする事で設定の読み込み、及び、接続が行われるようになります。

    ※保存したセッションの設定を変更する場合、セッション選択後[読込]ボタンをクリックし、必要な設定変更を行った後に保存すればOKです。同じセッション名で保存すれば上書き、別名なら別セッションとして保存されます。

  6. [開く]ボタンをクリックします。
  7. SSHログイン待ちになるので、作成したユーザ名でログインします。
    login as: <ユーザ名>
    Authenticating with public key "imported-openssh-key"
    Last login: Tue Jan  5 11:50:15 2016 from xx.xx.xx.xx
    
  8. キーファイルを利用したログインが行われればOKです。

WinSCP設定

PuTTYでの接続設定を記載しましたが、実際にデザイン変更等を行う場合、SSH接続して直接編集するという事は殆どないでしょう。
ローカルの開発環境でファイルを編集し、これをサーバに転送するという形になると思われます。

こういった場合 FTP を利用している事も多いと思いますが、FTPはセキュリティ上問題がある事、また Amazon Linux では別途FTPサーバを導入する必要があるため、SCPを利用する方が簡単、且つ、セキュリティ面でも望ましいといえるでしょう。

ここでは Windows で利用できる代表的なSCPクライアントである WinSCP を利用した接続設定にも軽く触れておきます。

  1. WinSCPを実行します。
  2. "ログイン" ウィンドウが開くので"新しいサイト"をクリックします。
  3. 転送プロトコルに SCP を選択し、接続先のホスト情報、及び、(作成した)ユーザ名を設定します。
    WinSCPログイン
  4. [設定] ボタンをクリックします。
  5. 左メニューから [SSH]>[認証]をクリックします。
  6. "秘密鍵" 欄に生成した秘密鍵ファイルを指定し [OK] ボタンをクリックします。
    WinSCP秘密鍵
  7. [保存] ボタンをクリックして設定を保存します。
  8. [ログイン] ボタンをクリックします。
    認証が行われサーバに接続されればOKです。

パーミッション設定

追加したユーザがSSH接続できるようになったら、パーミッション設定を行います。

パーミッション設定に関しては軽く触れる程度にします。
運用含めて適当なパーミッションを設定して下さい。

例 : wordpress (nginx+php-fpmで動作) ディレクトリに書き込み権限を付与する場合

  1. 追加したユーザを nginx グループに追加
    # usermod -G nginx <ユーザ名>
    
  2. 必要なディレクトリに nginx グループの書き込み権限を付与する。

これ以外にも umask を利用する。 chmod でスティッキービットやセットIDする等、要件に応じて設定を行ってください。

キーファイルの配布

接続/設定に問題ない事が確認できたらキーファイル(秘密鍵ファイル) を利用者に配布します。
※非セキュアな経路での受け渡しは行わないようにしましょう。
※キーファイルの管理は適切に行ってください。

まとめ

以上 Amazon Linux にユーザを追加し、キーファイルを利用した認証を行うための手順でした。
PuTTYやWinSCPを利用する場合、openssh形式のキーファイルがそのままでは利用できない ( 変換が必要な ) 点は"はまりポイント"かもしれません。

AWSを利用する際、面倒くさくてつい特定のpemファイルを使いまわしたくなる事なんかもあるかもしれませんが、きちんとユーザ毎にファイルを発行する等してセキュリティ面も確保したいものです