5 LOG

「さくらのVPS」CentOS の初期設定の作業のまとめ&解説(ssh編)

image
さくらのVPS の初期設定ですが、すでに多くの方が記事にしてくれています。 ただ、色々なページを見てまわるのが大変なのと、設定方法は書かれているけど何故そうするのか説明がなかったりするので、基本的にこれをやっておけば大丈夫という作業を初心者でも解るようにまとめておきました。 ちなみに、下記のサイトがとても参考になります。 http://phpspot.org/blog/archives/2011/02/webvps.html http://www.iex3.info/archives/1008 http://akibe.com/2010/09/centos-setup-2-user/ http://blog.hifumi.info/dev/play-with-%e3%81%95%e3%81%8f%e3%82%89vps/

作業目次

  1. 初期設定 ssh編(←今回はここ)
    1. サーバー起動、rootパスワード変更
    2. 作業用ユーザーの追加・パスワード設定・管理者グループに追加・sudo・suの設定
    3. 公開鍵認証、パスワードログインの禁止、rootログインの禁止、sshポート番号の変更
  2. ファイアウォール編
    1. iptablesによるファイアウォールの設定
今回は、初期設定 ssh編です。

1. サーバー起動、rootパスワード変更

さくらのVPSは初期状態ではVPSは停止状態になっているので起動させます。 サーバーを申し込んだ際に送られてくる-[さくらのVPS] 仮登録完了のお知らせ-のメールに記載されている 《VPSコントロールパネル ログイン情報》 でコントロールパネルにログインし、VPSを起動させます。 この状態ではサーバーは無防備なので、セキュリティ設定をします。 まずは、コントロールパネルのリモートコンソールを使用してサーバーにログインします。 リモートコンソール リモートコンソールページの右の黒い画面で{enter}キーを押すと、
<code>www.sakura.ne.jp login:</code>
という表示が出ます。そこで、 -[さくらのVPS] 仮登録完了のお知らせ-のメールに記載されている [サーバ基本情報] IPアドレス:xxx.xxx.xxx.xxx [管理用ユーザ] ユーザ名 :root 初期パスワード:〇〇〇〇 を参照して、
<code>www.sakura.ne.jp login: root 
password: <em>ここに初期パスワードを入力</em></code>
すると、
<code>SAKURA Internet [Virtual Private Server SERVICE] 

[root@ ~]#</code>
という表示が出れば接続成功です。 次に、今入力した初期パスワードのままでは危険ですので、初期パスワードは必ず変更して新しいパスワードを設定しておきます。
<code>[root@ ~]# passwd 
Changing password for user root. 
New UNIX password:<em>ここに新しいパスワードを入力</em> 
Retype new UNIX password:<em>ここにもう一度パスワードを入力</em> 
passwd: all authentication tokens updated successfully. 
[root@ ~]#</code>
これで新しいパスワードを設定しました。

2. 作業用ユーザーの追加・パスワード設定・管理者グループに追加・sudo・suの設定

root は全ての権限を持っている管理ユーザーです。 仮にパスワードが漏れたり、アタックをかけられたりして第三者に root でログインされてしまうと… ですので、後ほど ssh で root でのログインは出来ないようにします。 かわりに、作業用ユーザーでログインするようにします。 作業用ユーザー(仮にユーザー名を admin とします。)を作ります。
<code>[root@ ~]# useradd admin 
[root@ ~]# passwd admin 
Changing password for user admin 
New UNIX password:<em>ここにパスワードを入力</em> 
Retype new UNIX password:<em>ここにもう一度パスワードを入力</em> 
passwd: all authentication tokens updated successfully.</code>
これで admin という作業用ユーザーができました。 しかし、このユーザーはすべての権限を持っているわけではないので、出来ない処理も出てきます。その場合 ◎su(ユーザーを切り替え root になる) ◎sudo(一時的にスパーユーザー(root)になる) のどちらかのコマンドで root 権限を持って作業をします。 ただし、誰でも root になれてしまうのは危険ですので、管理者グループ(wheelグループ)に所属しているユーザーのみが root になれるように設定します。 まずは、作業用ユーザー(admin)を管理者グループ(wheelグループ)に登録します。
<code>[root@ ~]# usermod -G wheel admin</code>
次に、su コマンドは管理者グループ(wheelグループ)に属するユーザのみ使用できるように設定します。 この設定は、/etc/login.defs ファイルを編集します。ファイルを編集する際は元のファイルをコピーして日付を付けて残しておきましょう。
<code>[root@ ~]# cp -p /etc/login.defs /etc/login.defs_yyyymmdd<em>(yyyymmddは日付)</em></code>
これで/etc/login.defsをコピーしてファイル名に_yyyymmdd(日付)を追加して保存しました。 そしたら、元のファイルを開いて編集します。
<code>[root@ ~]# vi /etc/login.defs</code>
vi はテキストファイルの内容を編集できるコマンドです。 vi の使い方は、viエディタの使い方など検索するとたくさん出てきますので、使えるようにしておきましょう。 vi 起動時はコマンドモードといって、文字が入力できません。下記の操作キーを押すと編集モードになり文字入力が可能になります。再度コマンドモードに戻る際は {esc} キーを押します。 コマンドモードの時
a カーソル位置の右に文字を追加
i カーソル位置の左に文字を追加
o カーソル行の下に新しい行を挿入
x 一文字削除
u 最後の編集を取り消す(アンドゥ)
:w 保存(vi は終了しない)
:wq 保存して終了する
編集モードの時
{esc} 編集モードからコマンドモードに切り替える
vi でファイルを開いたら、 ↓カーソルでファイルの末尾まで行く キーボードの「o」で現在のカーソル行の下に空行を作りそこにテキストを挿入できる文字入力モードになるので、下記を追加
<code>SU_WHEEL_ONLY yes</code>
{esc}キーを押してコマンドモードに切り替え、「:wq」で保存して終了 これで、wheel グループのみ su コマンドが使えるようになりました。 次に、一時的に root になれる sudo コマンドですが、初期状態ではこのコマンドは使用できない設定ですので、wheelグループのユーザーのみ sudoコマンドを使える設定にします。
<code>[root@ ~]# visudo</code>
ファイルを編集します。 下記のコメントアウトになっている部分の「#」を削除します。 コマンドモードで「#」にカーソルを持って行き「x」で削除します。
#%wheel ALL=(ALL) ALL
 ↓
%wheel ALL=(ALL) ALL
「#」を削除したら、「:wq」で保存して終了します。 これで、作業用のユーザーの登録ができ、sudoコマンドが使えるようになりました。

3. 公開鍵認証、パスワードログインの禁止、rootログインの禁止、sshポート番号の変更

さらにセキュリティを強化するために、公開鍵認証の設定をします。 公開鍵認証とは、公開鍵と秘密鍵のペアを作成し、公開鍵をサーバーに置き、ssh でのサーバーへのログインはこの秘密鍵を持っていないとログインできない様にします。 まずは、sshクライアントを使用して、ローカルマシンで公開鍵と秘密鍵のペアを作成します。 sshクライアントはいろいろありますが、Macユーザーならターミナルで十分です。 アプリケーション > ユーティリティ からターミナルを起動させます。 ターミナルの画面に
<code>mac:~ user$</code>
と出てきますので、公開鍵を作成するコマンドを入力します。
<code>mac:~ user$ ssh-keygen -t rsa 
Enter file in which to save the key (/Users/name/.ssh/id_rsa): <em>{Enter}キー</em> 
Enter passphrase (empty for no passphrase): <em>ここに任意のパスフレーズを入力</em> 
Enter same passphrase again: <em>もう一度入力</em> 
Your identification has been saved in ~/.ssh/id_rsa. 
Your public key has been saved in ~/.ssh/id_rsa.pub.</code>
これで、 ~/.ssh/id_rsa に秘密鍵 ~/.ssh/id_rsa.pub に公開鍵 が作成されました。 作成された公開鍵をサーバーに送信します。
<code>mac:~ user$ cd .ssh 
mac:.ssh user$ scp id_rsa.pub admin@<em>サーバーのIPアドレス</em>:authorized_keys 
password: <em>ここに先ほど作成した作業用ユーザー(admin)のパスワードを入力</em></code>
上記のコマンドは、まず、ローカルマシンの公開鍵が作成されたフォルダ.sshに行き、 そこにある id_rsa.pub ファイルをコピーして、VPSサーバーに作業用ユーザー(admin)でアクセスして、authorized_keys という名前でファイルを保存しています。 そしたら、サーバーへログインして、公開鍵(authorized_keys)を .ssh というフォルダに移動させます。 サーバーへはターミナルを使って、作業用ユーザー(admin)でログインします。 ターミナルでサーバーにログインするには、
<code>mac:~ user$ ssh admin@xxx.xxx.xxx.xxx<em>(サーバーのIPアドレス)</em> 
password: <em>ここにadminのパスワードを入力</em></code>
このコマンドは、ssh でIPアドレス xxx.xxx.xxx.xxx のサーバーに admin でアクセスという意味です。
<code>SAKURA Internet [Virtual Private Server SERVICE] 
[admin@ ~]$</code>
と表示されれば、サーバーにログイン成功です。 そしたら、ホームディレクトリに .ssh というフォルダを作成して、authorized_keys を移動します。
<code>[admin@ ~]$ mkdir .ssh<em>(.sshという名前のフォルダを作成)</em> 
[admin@ ~]$ mv authorized_keys .ssh/<em>(.sshフォルダにauthorized_keysを移動)</em> 
[admin@ ~]$ chmod 700 .ssh<em>(.sshフォルダのパーミッションを700に変更)</em> 
[admin@ ~]$ cd .ssh<em>(.sshフォルダに移動)</em> 
[admin@ .ssh]$ chmod 600 authorized_keys<em>(authorized_keysのパーミッションを600に変更)</em></code>
authorized_keys は他のユーザーに見られないようにパーミッションを 600 に変更しておきます。 これで、公開鍵の設定が出来ました。 次に、パスワードでのログインを禁止して、公開鍵認証でしかログイン出来ない様にし、さらに、root でのログインを禁止します。 そうすると、ssh での接続は秘密鍵をもった作業用ユーザーのみログインできるようになります。 この設定は /etc/ssh/sshd_config ファイルを編集します。 ただし、このファイルは root権限が必要なので sudoコマンドで root で作業します。
<code>[admin@ ~]$ sudo vi /etc/ssh/sshd_config 
We trust you have received the usual lecture from the local System Administrator. 
It usually boils down to these three things: 

   #1) Respect the privacy of others. 
   #2) Think before you type. 
   #3) With great power comes great responsibility. 

[sudo] password for admin: <em>ここに admin のパスワードを入力</em></code>
sshd_config ファイルを下記の設定に変更します。
#Port 22
 ↓
Port 20022 <em>//デフォルトの22から任意の番号に変更する</em>
#PermitRootLogin yes
 ↓
PermitRootLogin no <em>//rootログインの禁止</em>
#PasswordAuthentication yes
 ↓
PasswordAuthentication no <em>//パスワードログインの禁止</em>
ssh接続は通常22番ポートですので、これを狙って攻撃されます。ですので、このポート番号を変更することにより攻撃を防ぐことができます。 編集が完了したら「:wq」で保存して終了します。 そして ssh を再起動させます。
<code>[admin@ ~]$ sudo /etc/init.d/sshd restart 
Stopping sshd: [ OK ] 
Starting sshd: [ OK ]</code>
これで、sshの設定は完了です。 秘密鍵を持ったPCから作業用ユーザーでしかログインできなくなりました。 それでは、一度サーバーからログアウトして、再度 ssh でログインしてみてください。 ログアウトは
<code>[admin@ ~]$ exit</code>
です。 再度ログインの際は、ssh接続のポートを変更したので、ポートオプションを使います。
<code>$ ssh admin@xxx.xxx.xxx.xxx -p 20022<em>(20022はポート番号を入力)</em></code>
再度 ssh でログインすると、最初のみ公開鍵を作成する際に設定したパスワードを聞いてきます。 一度パスワードを入力すればそれ以降はパスワードなしでログインできます。 ssh編はここまでです。 次回は、iptablesを使用したファイアウォールの設定です。 iptablesについては、Googleで検索するとちょっと不安な情報も出てきますので、しっかりと設定しておきましょう。