ServersMan@VPSのセットアップ その1: ユーザの作成とSSHの設定

前回は、特別編としてGoogle I/O 2014の様子を紹介しましたが、再びServersMan@VSPSの話題に戻ります。

今回からは64bit版Debianのセットアップを行います。64bit版に変更する際にすべてHDDが消去されていますので、一から設定しなおす必要があります。

基本的には32bit時代に行った作業と同じになります。ここで記載している内容はすべてSSHでServersMan@VPSに接続して行います。

ルートのパスワード変更

まず最初にrootのパスワードを変更しておきます。passwdコマンドを実行して新しいパスワードを2回入力するだけです。

sudo passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

一般ユーザの追加

次に一般用のユーザを追加します。一般用のユーザを作成する理由は

  • rootで作業すると誤操作時に被害甚大。
  • SSHでrootのログインを禁止することによりセキュリティ向上

の2点です。

新しくサーバを設定している場合は

sudo adduser foo

のようにadduserに続けて追加したいユーザ名を入力すればOKです。適当に質問に答えればユーザが出来上がります。

私のようにサーバを再セットアップする場合は同じユーザを追加することになると思いますが、この時にグループIDとユーザIDが以前と全く同じにしておいたほうが何かと都合がよくなります(バックアップしたファイルを元に戻したときにパーミッションがおかしくなっていない)。

その場合はいったんグループIDを指定してグループ(ユーザ名と同じ名称)を作成したのち、ユーザIDを指定してユーザを作成します。その際、作成したユーザがあらかじめ作っておいたグループに登録されるようにします

sudo addgroup --gid AAAA foo
Adding group `foo' (GID AAAA) ...
Done.
sudo adduser –uid BBBB --gid AAAA foo
Adding user `foo' ...
Adding new user `foo' (BBBB) with group `foo' ...
Creating home directory `/home/foo' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: パスワード
Retype new UNIX password: パスワード
passwd: password updated successfully
Changing the user information for foo
Enter the new value, or press ENTER for the default
Full Name []: ユーザのフルネーム
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

AAAAが以前使っていたグループID、BBBBがユーザID、fooがユーザ名です。Debian GNU/Linuxではユーザ名とグループ名は同じになり、また、通常はグループID(AAAA)とユーザID(BBBB)は同じになります。

sudoグループへの追加

作成したユーザが一時的にルート権限でコマンドを実行できるsudoというコマンドを使えるようにします。この設定が終われば以降はrootで作業することはなくなります。

以前はvisudoコマンドで/etc/sudoersを編集しましたが、最近のDebianでは作成したユーザをグループsudoに追加すればOKです。

sudo addgroup foo sudo

SSHの設定

SSHの設定は不正ログインを防ぐためにも重要です。行うべきことは

  • rootでのログインを禁止する・・・攻撃者はほとんどの場合rootでログインしようとしてきます。
  • 鍵認証を使ったログインのみを許可する・・・万が一パスワードがばれてもアクセスできる人を限定できます

の2点です。

rootログインの禁止

/etc/ssh/sshd_configを編集することで行います。

「PermigRootLogin yes」という行があると思いますので、まずはその行の先頭に「#」を追記してコメントアウトします。次に下記の2行を追加します。fooの部分は先ほどsudoグループに追加したユーザ名になります。

PermitRootLogin no
AllowUsers foo

編集が終わったらSSHサーバを再起動します。

sudo service ssh restart

rootで作業していたSSHのシェルを終了する前に、新しく作成したユーザがSSHでログインできることとsudoコマンドが使用できることを確認してください。万が一、設定を正しくない状態でrootで作業していたSSHのシェルを閉じてしまうと、二度とSSHでログインできなくなる可能性があります。

鍵認証を使ったSSH接続

秘密鍵と公開鍵のペアを作成し、秘密鍵を持っているユーザのみがSSHで接続できるようにする方式です。

ネットカフェなど秘密鍵がない環境からはSSHでVPSにアクセスできなくなりますが、セキュリティは格段に上がります。

2015/04/10 追記
秘密鍵と公開鍵の扱いについては本ページの記述には間違いがあります。
訂正版は下記になります。
http://scratchpad.jp/ssh-public-key-authentication/

サーバ側の設定

まず、サーバ側で鍵ペアを作成します。この作業はsudoグループに追加したユーザ(foo)で行います。

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/foo/.ssh/id_rsa):
Created directory '/home/foo/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/foo/.ssh/id_rsa.
Your public key has been saved in /home/foo/.ssh/id_rsa.pub.
...

途中でパスフレーズの入力を求められるので入力しておきます(パスフレーズなしにもできますが、安全のため、やはりパスフレーズは設定しておきましょう)。

特に問題がなければ、ユーザfooの.sshディレクトリに、id_rsa.pubとid_rsaというファイルができます。

id_rsa.pubが公開鍵、id_rsaが秘密鍵になります。

この公開鍵・秘密鍵のペアをつかってログインできるように、公開鍵id_rsa.pubをauthorized_keysに追加します。

cd ~/.ssh
ls
id_rsa id_rsa.pub
cat id_rsa.pub >> authorized_keys
ls
authorized_keys id_rsa id_rsa.pub

ついでに、次の処理に必要なので、秘密鍵を表示しておきます。

cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: ...

.....
-----END RSA PRIVATE KEY-----

クライアント側の設定(Linuxの場合)

クライアントがLinuxの場合は割と簡単です。

先ほど画面に表示しておいた秘密鍵のテキストをすべてコピー&ペーストして「vps.key」というファイルを.sshディレクトリに作成します。またこのファイルのパーミッションを600にしておきます。

chmod 600 .ssh/vps.key

あとはsshコマンドでログインしてみます。

ssh -i .ssh/vps.key foo@VPSのIPアドレス –p SSHのポート番号

SSHのポート番号は22ではなく、別の番号なので注意してください。これでログインできれば問題ありません。

クライアント側の設定(Windowsの場合)

クライアントソフトとしてPuttyを使う場合を紹介します。

puttyはopenssh形式の鍵が読めないので、puttyについてくるputtygen.exeでファイル形式を変換する必要があります。

まずLinuxをクライアントにする場合と同様に、秘密鍵をコピペしてWindows上にファイルとして保存します(vps.keyとします)。

ここでputtygen.exeを起動して「変換メニュー」→「鍵のインポート」を選択して、作成したvps.keyを選択します。正常に読み込まれたら「ファイル」→「秘密鍵の保存」でPuTTY形式(?)の秘密鍵ファイルとして保存します(vps-key.ppkとします)。

変換に失敗した場合は、WinSCPをインストールしてWinSCPについてくるputtygen.exeを使ってみてください。WinSCPに付属するputtygen.exeのほうが対応しているフォーマットが多いようです。

putty形式の秘密鍵がよう出来たらputtyのセッションの設定を行います。

  • 接続先のホスト名をVPSのIPアドレス、ポート番号はSSHのポート番号、接続タイプはSSHにする。
  • 接続→データの「自動ログインのユーザ名」を「鍵を作成したユーザ名(foo)」にする
  • 接続→SSH→認証の「認証のためのプライベートキーファイル」を作成した鍵ファイル(vps-key.ppk)にする

これで接続してputtyのウィンドウに

Using username "foo".
Authenticating with public key "vps-key-openssh-key"
Passphrase for key "vps-key-openssh-key":

と表示されたら成功です。ssh-keygenを実行したときに入力したパスフレーズを入力します。

SSH接続に鍵認証を必須にする

最後に再びサーバ(VPS)側の作業です。

SSHのログインを鍵認証のみに変更します。これにより鍵を持っていないユーザはアクセスすることができなくなります。

これには/etc/ssh/sshd_configに下記2つの変更を加えます

  1. 「PasswordAuthentication no」を追記する
  2. 下記の行の先頭の#をはずす
    uthorizedKeysFile %h/.ssh/authorized_keys/pre>

忘れずにSSHサーバを再起動します。

sudo service ssh restart

まとめ

今回はServersMan@VPSを契約したら最初にやっておくべきこととして、ユーザの作成とSSHの設定を紹介しました。SSHを鍵認証方式に変更するのは若干面倒ですが、セキュリティ向上のため行っておくことをお勧めします。

次回は初期化前にバックアップしたファイルを戻しつつ、ServersMan@VPSのセットアップを進めていきます。