VPSマシンが悪意ある攻撃者に乗っ取られて攻撃の踏み台にされたりするのを防ぐ方法についてです。
通常、Linuxマシンは侵入と乗っ取りを防ぐためにリモートログインは次の認可・認証体制をしいていることがほとんどと思います。
- 認証は公開鍵方式のみ。パスワードは使わない
- rootにはログインできない。root権限が必要なら一般ユーザーからsudoコマンドを使わせる
(rootがパスワードログインできるのはリモートでなく実機でだけにします。実機で許すのは、ssh壊れてにっちもさっちもいかなくなったときのためですね。実機に触れるという時点である程度の本人性が担保されていますし)
VPSもインスタンスを借りた時点からこういう構成になっていることがほとんどですが、海外の格安VPSなんかですと
- グローバルからrootにパスワードでログインできる
状態のインスタンスをいきなりぽんと渡されたりします。
まずこの状態はセキュリティ上不十分であることを知っておいてください。パスワード認証は総当たり攻撃に弱く、それで侵入された時点でrootユーザーですからシステム全権限を乗っ取り完了となってしまいます。
さて、この状態から記事先頭に書いたまともな状態にしていきましょう。
手順です
-
鍵ペアを用意する
もともと持っている方はOK。ない方は、ssh鍵ペアを用意します。用意の仕方はぐぐってくだされ。 -
自分用の一般ユーザーを用意する
私yubaって名前なので、yubaって名前のユーザーを作ることにしますね。名前はお好きに。
まずrootにそのパスワードを使って入ります。-
ユーザー作成
useradd yuba
-
ユーザーにsudoで管理権限を行使できるようにする
通常Linuxではユーザーがwheelってグループに所属しているとsudoでrootの権限使えるようになってます
usermod -G wheel yuba
-
ユーザーがログインするための公開鍵を配置してやる
まず自分の鍵ペアの公開鍵(id_rsa.pubのほう)の内容をクリップボードにコピーして乗せておきます
mkdir /home/yuba/.ssh
cat > /home/yuba/.ssh/authorized_keys
そしてクリップボードをペーストしてからctrl D
chown -R yuba:yuba /home/yuba/.ssh
chmod 600 /home/yuba/.ssh/authorized_keys
-
ユーザーにパスワードも設定してやる
ログインには使わないのですがsudoコマンドを打ったときにパスワードを要求されてそこで詰むので、そのときに打てるパスワードを設定しておいてあげます。
passwd yubad
-
ユーザー作成
-
公開鍵認証を有効にしパスワード認証を無効に
vi /etc/ssh/sshd_config
sshサーバーの設定ファイルをいじっていきます-
公開鍵認証を有効にする
PubkeyAuthentication
という行をみつけてonにします。先頭に#
があったら消します。 -
パスワード認証を無効に
PasswordAuthentication
という行をみつけてoffにします。先頭に#
があったら消します。 -
rootにはsshで入れないようにする
PermitRootLogin
という行をみつけてoffにします。先頭に#
があったら消します。
-
公開鍵認証を有効にする
-
設定変更を適用
service sshd reload
さあ、まだrootユーザーをログアウトしてはいけません。
ssh壊れてしまっていたらいきなりにっちもいかなくなりますからね。このログインセッションは最後まで命綱です。 -
確認
- 一般ユーザーで公開鍵ログインとsudoできることを確認
- rootユーザーにパスワードログインできなくなったことを確認
-
すでにrootが何者かに侵入されていないかを確認
いまさっきまで危ない状態でしたからね、一応すでに入られ済みでないか見ておきましょう。
sudo grep "Accepted password" /var/log/secure
自分がこの作業を開始したよりも前にこのログイン成功ログが残っていたらおかしい、侵入され済みかもとなります。ただ、時刻が日本時間とは限りませんからね、特に海外VPSだったりするなら。おかしいじゃんとあわてる前にタイムゾーンのご確認を。
-
完了
確認がOKなら、もう一般ユーザーとして公開鍵認証で入り必要に応じてsudoするという一般的なセキュリティレベルが完成しています。
これでもう、最初にログインしたrootのセッションは切っても大丈夫です。