VPSのrootユーザーログインを禁止しよう!超強力な権限を持たせたまま放置は絶対NG

ConoHa VPS - rootログイン禁止アイキャッチ

サーバーにおけるrootルートユーザーは最も絶大な権限を持ち、言い換えればサーバーをどうにでもできる存在です。

通常rootユーザーはログインできないように設定するものなので、今回はちゃちゃっとrootユーザーのログインを禁止すると共に、普段使うユーザーを作成して行きましょう!

  • 何故rootユーザーのログインを禁止すべきかがわかる!
  • rootユーザー以外の一般ユーザーの作成ができる!
  • 実際にrootユーザーのログインを禁止することができる!
スポンサーリンク
スポンサーリンク

なんでrootユーザーはダメなの?

シリーズでお伝えしているConoHa VPSコノハ ブイピーエスを初めて契約した方だと、中にはrootという単語を初めて聞いた方もいるかも知れません。

何が危険なのか、何故rootユーザーはダメなのかざっくり解説していきます。

持ってる力が超大きい!

まずrootユーザーはスーパーユーザーとも言われ、サーバー(というよりUnixユニックス系やLinuxリナックス系のOS)の中で最も大きな権限を持っています。

スーパーと言うぐらいですから平たく言えばなんでもできちゃうんです、例えば頑張って作ったWordPressワードプレスの記事を軒並み削除しちゃうとか。

そもそもWebサーバー自体を止めちゃう事もできるので、そうなったら読者は一切のアクセスができません。

もっと言うと、OSそのものを削除する事もできます。

サラッと言いましたけどこれめちゃくちゃ恐ろしい事です、それまで築き上げた設定は全て水の泡ですからね・・・笑。

ユーザー名がバレている!

もう一つ大事な事は、rootユーザーはUnix系/Linux系OSをインストールした時点で元から存在しているユーザーです。

という事は、基本的に世界中のどのUnix系/Linux系OSにも存在しています。

システムにログインする為に最低限必要なのはユーザー名とパスワード。

そう、ユーザー名が最初からバレているんです。

ユーザー名がバレているという事は、悪いことを考えている人間はパスワードさえどうにかすればログインができてしまいます。

これを防ぐにはそもそもrootというユーザーのログインを不可にしてしまう事と、パスワードだけではログインできないようにする事。

今回は前者を扱いますが、下記の記事でパスワードだけではログインできなくする方法も取り扱っているので必ずセットで行いましょう!

一般ユーザーの作成をしよう

それでは実際に作業を始めていきましょう!

一般ユーザー作成作業手順
  • Step.1
    一般ユーザーの作成
  • Step.2
    公開鍵配置用のディレクトリを作成
  • Step.3
    一般ユーザーのSSH接続用キーペアの作成
  • Step.4
    公開鍵の設定変更
  • Step.5
    一般ユーザーでログイン

その前にいきなりrootユーザーのログインを禁止してしまっては誰もログインできなくなってしまうので、普段自分が使う一般ユーザーを作成していきます。

まずはrootユーザーで通常通りSSHセキュアシェル接続します。

以下はWindowsのTera Termテラ タームというソフトで接続していますが、Macのターミナルで接続してもやることは全く同じです。

一般ユーザーの作成

一般ユーザーはrootに比べ権限が制限されているユーザーです。

つまり万が一クラッキング(不正ログイン)されても、システムに重大な攻撃をする事が防げるという事。

ただし何もできないと困るので、必要な時にだけrootユーザーの権限を借り受ける事ができます。

そんな一般ユーザーの作成をまずは行っていきます。

コマンド - useradd

コマンド – useradd

# useradd -G wheel ユーザー名

このコマンドで一般ユーザーの作成が行えます。

コマンド[useradd]
新しくユーザーを作る時に使うコマンド
オプション[-G]
新規作成するユーザーをグループに所属させるオプション
wheelはsudo権限(rootユーザーになれる権限)を持ったデフォルトグループ

一般ユーザーにパスワードを付与

一般ユーザーは作成しましたが、今のままではパスワードが設定されていません。

という事でパスワードを設定して行きましょう!

コマンド - passwd

コマンド – passwd

# passwd ユーザー名
コマンド[passwd]
ユーザーにパスワードを付与するコマンド
コマンド - パスワード入力

コマンド – パスワード入力

コマンドを実行すると、パスワードを入力する画面になりますがセキュリティ上キーボードを打っても画面に一切の変化がありません。

間違わないようにキーボードを打って行きましょう、反映はされませんが当然大文字小文字の区別はあります。

パスワードを入力してEnterキーを押すともう一度パスワードを入力する画面になるので同じパスワードを入力します。

再度コマンド入力画面([root@IPアドレス ~]#)になったらユーザーの作成・パスワード付与ができました!

一般ユーザーに切り替え

では試しに一般ユーザーでログインしてみましょう!

exitコマンドでログアウトして再接続・・・いえいえ、WindowsやMacと同じようにユーザー切り替えのコマンドがあります。

コマンド - su

コマンド – su

# su - ユーザー名

実行するとどうでしょう、@の前のユーザー名がrootから先程作ったユーザー名に、最後の#が$に変わりましたよね?

これで一般ユーザーへの切り替え成功です!

コマンド[su]
他のユーザーへの切り替え時に使うコマンド
通常は一般ユーザーでログインをし、後述するsudoというコマンドを使うことが多いです

公開鍵配置用のディレクトリを作成

それでは一般ユーザーの状態($)で、SSH接続する為に必要なキーペアのうち公開鍵を設置する為のディレクトリ(フォルダ)を作って行きます。

コマンド - mkdir

コマンド – mkdir

$ mkdir /home/ユーザー名/.ssh

Macユーザーの方は前回使ったディレクトリを作る為のmkdirコマンドを使って行きます。

コマンド[mkdir]
ディレクトリ(フォルダ)を作成する為のコマンド
~/.sshとして作成しても良いんですが、今回は初心者の方向けになるべく分かりやすいように配慮しています。

続いて作った.sshフォルダの権限を変更して行きます。

こちらもMacユーザーの方は既に使った事があるchmodです。

コマンド - chmod

コマンド – chmod

$ chmod 700 /home/ユーザー名/.ssh/
コマンド[chmod]
ファイルやフォルダのパーミッション(権限/アクセス権)を設定する為のコマンド

念の為正しくディレクトリが作成できているか、権限が正しいかどうか確認して行きましょう。

コマンド - ls

コマンド – ls

$ ls -la /home/ユーザー名/
コマンド[ls]
ファイルやディレクトリの情報を示す為のコマンド
オプション[-l]
ファイルやディレクトリの詳細な情報を示す為のオプション
オプション[-a]
(隠しディレクトリを含む)全てを表示させる為のオプション
コマンド - lsの結果

コマンド – lsの結果

ここまで手順通りにやってきたらこんな感じの表示になると思います。

.sshディレクトリが作成されていますね!

もしここに.sshが出てこなければディレクトリが作れていない、先頭がdrwx——以外だとパーミッションの設定が間違えています。

パーミッション(権限)
パーミッションはdrwx・・・の部分になります。
最初の1文字目はファイルの種別を表し、dはディレクトリ、-はファイルです(他にもあるけど割愛)。
次の9桁のうち最初の3桁が所有者、次の3桁が所有グループ、最後の3桁がその他の権限を表します。
それぞれ最初の1文字目は読み取り(readリード)、2文字目が書き込み(writteライト)、3文字目が実行(executionエグゼキューション)。
-となっているとその権限が無いので、この.sshのdrwx——は「所有者に読み書き実行の権限があるがそれ以外には一切の権限が無いディレクトリ」という意味になります。
また、rを4、wを2、xを1とした加算で7は全ての権限、6は読み書き、5は読み実行、4は読みと数字で表現もできます。
仮にパーミッションが707だとしたら「所有者とその他にはフル権限、所有グループには権限無し」、777なら「全てのユーザーに対しフル権限」という事になります。
パーミッションは中々理解が難しいですが、冷静になると意外と簡単なので是非覚えてみて下さい!

一般ユーザーのSSH接続用キーペアの作成

次に行うのがrootユーザーで使っているような秘密鍵を、一般ユーザー用にも作っていきます。

rootユーザー用のキーをコピーして使う事もできない訳じゃないんですが、それだとセキュリティ的にも「何の意味があるんだ・・・?」という事請け合いなのでめんどくさがらずに別のキーペアを用意して行きましょう笑。

なおキーペアはローカル(自分のパソコン)でもサーバーでも作成ができるんですが、僕個人は秘密鍵(自分のパソコンに保存して使う鍵)をネットワークを通して移動させる事をあんまり良い事だと思っていないので、ローカルで作成をしてサーバー上に公開鍵をアップロードする方法で解説します。

公開鍵と秘密鍵
公開鍵はサーバー上に、秘密鍵はローカル(自分のパソコン)上でそれぞれ保管し、接続時に毎回照合を行います。
公開鍵はその名の通り公開されているもので、例えるなら鍵穴です。
鍵穴はドアに付いているもので、誰に見られても問題ないですよね?サーバーの公開鍵も同様に誰に見られても問題ありません。
秘密鍵はドアに対する鍵で、これは誰かに見られると複製される恐れがあり大変危険です。
なので当然通信させない(漏洩ろうえいの可能性を限りなく避ける)方がベターです。
なおローカルがウイルス感染等により危険に晒されたら秘密鍵の意味がありません、ローカルのアンチウイルスソフト(ウイルスバスター)等による防御もまた重要です。

Windows(Tera Term)ユーザーの場合

Tera Term - SSH鍵作成

Tera Term – SSH鍵作成

ログインしている状態で、上部の設定の中からSSH鍵作成を選択します。

Tera Term - SSH鍵作成

Tera Term – SSH鍵作成

こんな感じの画面が現れるので上から順に作成していきます。

  1. 生成をクリック
  2. 鍵のパスワードフレーズと確認をそれぞれ入力
  3. 公開鍵の保存をクリックして保存
  4. 秘密鍵の保存をクリックして保存

パスワードフレーズは無くても鍵自体は生成できますが、セキュリティ上あったほうが好ましいです。

鍵の保存場所はどこでも良いんですが、とりあえず自分が分かりやすい場所に保存しておいて下さい。

公開鍵と秘密鍵

公開鍵と秘密鍵

秘密鍵と公開鍵のダウンロードが終わるとローカル上にこんな感じの2つのファイルが保存されます。

.pubがpublic(パブリック)、つまり公開鍵ですね!

今度はこの公開鍵をサーバー上にアップロードしていきます。

やり方は簡単、この.pubのファイルをドラッグ&ドロップでTera Termのウインドウ上に持っていけばOK。

Tera Term - 公開鍵転送

Tera Term – 公開鍵転送

こんな画面になるので、転送先を入力してOKボタンをクリックします。

転送先は先程作成した/home/ユーザー名/.sshの直下ですね!

id_rsaですが、分かりやすい名前(例えばサーバー名-ユーザー名)等にリネームしてしまうとそのままの状態では秘密鍵として使えないので、その場合最後に.pemと拡張子をつけてあげれば一応リネーム自体はできます(拡張子って結構ガバガバなので・・・笑)。
ただし拡張子の変更自体トラブルの元なので、可能であればサーバー名をつけたフォルダに入れて管理し、ファイル名自体はそのままという方がスマートだと思います(僕はそうしています)。

次はMacユーザーの場合なので、飛ばして公開鍵の設定変更から作業を再開して下さい!

Macユーザーの場合

Macは全てコンソールで完結します。

ローカルでキーペアを作成するので、一度exitコマンドでログアウトして下さい。

ここからはサーバーにログインしていない、ローカル(Mac)上で行います。

それではキーペアを作って行きましょう!

$ ssh-keygen -t rsa -b 2048
コマンド[ssh-keygen]
認証用のキーペアを作成・管理するコマンド
オプション[-t]
鍵の種類を指定するオプション
オプション[-b]
鍵の長さを指定するオプション(単位はbit)
過去に別の秘密鍵を作成しその鍵ファイルがデフォルトネームで.ssh直下に存在している場合は、必ず新しく作る鍵の名前を変更して下さい。
ssh-keygenコマンドは同じ名前のファイルが既にある場合問答無用で上書きをしてしまいます。
不安な場合は、$ ls -la ~/.sshとコマンドを叩いてid_rsaとid_rsa.pubが無い事を確認して下さい。

実行するとちょっとした操作が必要です。

Enter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa):

キーペアのファイル名(id_rsa/id_rsa.pub)がそのままで良ければそのままEnterキーを押して下さい。

ファイル名を変更したい時はここに入力すればファイル名の変更ができますが、その時は今コンソール上に居る位置で作成されます(なのでファイル名を変更したい場合はcdコマンドで~/.sshに移動して作成して下さい)。

Enter passphrase (empty for no passphrase):

次にキーペアのパスフレーズです。

これも空Enterでパスワード無しにもできますが、あった方がベターです。

Enter same passphrase again:

上記で入力したパスワードと同じものを入力します。

コマンド - keygen

コマンド – keygen

こんな感じの画面になったらキーペアが出来上がりました!

キーペアのうち公開鍵のパーミッションを変えておきます

コマンド - chmod

コマンド – chmod

$ chmod 600 ~/.ssh/id_rsa.pub

ファイルがちゃんとできているか、パーミッションが正しく設定されているかlsコマンドで見ておきましょう。

コマンド - ls

コマンド – ls

$ ls -la ~/.ssh
コマンド - lsの結果

コマンド – lsの結果

id_rsaとid_rsa.pubができていて、.pubの公開鍵のパーミッションが-rw——-になっていたらOKです!

最後に公開鍵をサーバー上にコピーします。

コマンド - scp

コマンド – scp

$ scp -i ~/.ssh/root用の秘密鍵名 ~/.ssh/id_rsa.pub root@サーバーのIPアドレス:/home/ユーザー名/.ssh

ちょっと長いコマンドですが、慎重に入力していきましょう!

コマンド[scp]
異なるリモートデバイス(ローカルとサーバー等)でファイルやディレクトリをコピーする時に使用するコマンド
文法:scp -i 接続用の秘密鍵 コピー元のパス コピー先のユーザー名@コピー先のIPアドレス:コピー先のパス
オプション[-i]
秘密鍵の場所を指定するためのオプション

どこかSSH接続する時のコマンドに似ていますね!

rootユーザーで認証している為、-iには今までSSHログインで使っていた秘密鍵のパスが入ります。

その後は先程作った公開鍵(id_rsa.pub)のローカルのパスを指定し、その後接続先のユーザー名やIPアドレスを指定します。

最後に保存先のディレクトリを指定しています。

コマンド - scpの結果

コマンド – scpの結果

ちょっと横に長くて申し訳ないんですがあえて未編集で出しました、こんな感じでコンソールの右端に小さい文字が出ます。

この画面が表示されていれば成功です!

長いコマンドはそれだけ間違えやすいので、必ずEnterを押す前に正しいか確認しましょう!

次は再度サーバー上の作業なので、rootでログイン後su – ユーザー名で一般ユーザーに切り替えて次へ進みましょう!

公開鍵の設定変更

それではここからはWindows/Macどちらも共通操作です!

現在公開鍵ファイルが/home/ユーザー名/.ssh/id_rsa.pubという名前で配置されています。

この公開鍵の名前を変更します。

コマンド - mv

コマンド – mv

$ mv ./.ssh/id_rsa.pub ./.ssh/authorized_keys
コマンド[mv]
ファイルやディレクトリの移動の他、リネーム(名前の変更)も行えるコマンド

Macユーザーの方はローカルで一度使っていると思うんですが、mvコマンドは移動だけじゃなく名前の変更も行える便利なやつです!

それではきちんと名前が変わったかどうか確認してみましょう。

先程も使ったlsコマンドで確認して行きます。

コマンド - ls

コマンド – ls

$ ls -la ./.ssh/

最終的にこんな感じでauthorized_keysが表示されていればOKです!

一般ユーザーでログイン

rootユーザーから完全にログアウトして、一般ユーザーとして先程設定した一般ユーザー用のキーペアを使ってログインして行きます。

ログインのやり方は基本的にrootユーザーの時と同じですが、ユーザー名とパスワードは作成した一般ユーザーの物、秘密鍵も作った一般ユーザー用の物を使っていきます。

もしログインできなかった場合は

  1. パーミッションが正しく設定されているか
  2. 公開鍵の場所が/home/ユーザー名/.ssh配下になっているか
  3. 秘密鍵をrootユーザー用と間違えていないか

この辺りを確認してみて下さい。

rootユーザーのログインを禁止

それではいよいよrootユーザーのログインを禁止して行きます。

rootユーザーのログイン禁止作業手順
  • Step.1
    設定ファイルの書き換え
  • Step.2
    sshdサービス再起動

sshd設定ファイルの書き換え

まずは設定ファイルの書き換えです。

SSHに関する設定ファイルは/etc/ssh/sshd_configというファイルです。

その前に万が一設定ファイルの書き換えを間違えてしまった時用のバックアップファイルを作成しておきましょう。

コマンド - cp

コマンド – cp

$ sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.old
コマンド[sudo]
一時的にスーパーユーザー(root)の権限を借りられるコマンド
コマンド実行後は一般ユーザーに戻る
コマンド[cp]
ファイルをコピーする際に使用するコマンド
オプション[-p]
ファイルのパーミッション・所有者等を保持してコピーするオプション

見慣れないsudoのコマンドが出てきましたが、これめちゃくちゃよく使います。

一般ユーザーに権限があるのは/homeディレクトリ配下なので、/etc配下のsshd_configには通常触る事ができません。

そこでsudoコマンドでrootユーザーの権限を一時的に借り受けて実行している訳ですね!

sudoコマンドはパスワードを聞かれる事がありますが、その時入力するパスワードは自分(一般ユーザー)のパスワードです。

以上の作業でバックアップが作成できました。

万が一の時はsshd_configを削除し、sshd_config.oldをリネームして.old部分を削除すればここまでの状態のsshd_configの設定に戻す事ができます。

では書き換えを行っていきましょう!

Linux系OSにはviヴィーアイというテキストエディタがインストールされているので、このviを使って編集していきます。

コマンド - vi

コマンド – vi

$ sudo vi /etc/ssh/sshd_config
コマンド[vi]
viというテキストエディタ、またはそれに関連するコマンド
操作[i]
現在のカーソル位置に文字を挿入する入力モード
操作[ESCキー]
入力モードからコマンドモードに戻る
操作[:wq]
ファイルを保存してviを終了するコマンド

今回はrootユーザーのSSH接続を禁止するので、次の行を探してみて下さい。

#PermitRootLogin yes

この行の先頭の#を削除し、末尾のyesをnoに変更します(先頭の#が最初から無い場合もあります)。

PermitRootLogin no

viの基本的な使い方ですが、最初はコマンドモードというモードです。

テキストを編集するには入力モードにする必要があり、キーボードのiキーを押す事で入力モードに変更可能です(他にも入力モードにするキーはたくさんあるんですが、とりあえずiキーで覚えて下さい)。

該当の行へ矢印キーで移動し、iキーを押して入力モードにします。

入力モードになると左下に-INSERT-と表示されます。

入力が終わったらキーボードのESCキーを押して、入力モードを終了します(-INSERT-の表示も消えます)。

この状態で「:wq」と入力すると左下に:wqを表示されるので、Enterキーを押します。

これで変更が保存されました。

コマンド - sudo viから編集流量まで

コマンド – sudo viから編集流量まで

viは言葉だけじゃ伝わりにくいので動画にしてみました、是非参考にしてみて下さい!

SSHサーバーの再起動

最後にSSHサーバーの再起動を行います。

設定ファイルの変更を読み込ませる為に必要な作業ですね。

コマンド - systemctl

コマンド – systemctl

$ sudo systemctl restart sshd.service
コマンド[systemctl]
サービスの起動や停止、再起動の際に使用するコマンド

rootユーザーのログイン試行

それでは最後に、rootユーザーでログインできるか試してみましょう!

ログインができなかったら大成功!これでrootユーザーに直接ログインができなくなりました。

ログインできてしまった場合どこかが間違えている可能性があります。

もう一度落ち着いて確認してみて下さい。

rootユーザーログイン禁止でセキュリティ向上

コマンドでの作業量がちょっと多くて億劫になってしまう作業ですが、VPSサーバーでは必ずやっておきたい作業です。

rootユーザーをそのままログインできる状態を放置するという事は、世界中に対して「ログイン求む!」と挑戦しているようなもんです・・・笑。

rootユーザーは原則ログイン禁止必要な時に権限を借り受けるという認識を持って取り組んで行きましょう!

更に同時にSSHサーバーのポートを標準の22番から他のポートへ変更する事も簡単ですがめっちゃ重要です。

合わせて以下の記事から設定して見て下さい!

SSHは22番ポートで通信しちゃダメ!入り口を隠してVPSサーバーの安全を守ろう!
SSHといえば22番ポート、これ常識です。 だからダメです、今すぐ22番ポートから他のポートへ変えましょう! 何故22番ポートがダメなのかわかる! 実際に22番ポートから他のポートに変える手順が分かる! 22...

ConoHa VPS+KUSANAGIで始めるWordPress超高速環境

ConoHa VPS まとめ記事用アイキャッチ

当記事はWordPressを超高速化できるWordPress専用仮想マシンKUSANAGIをConoHa VPSで初心者でも簡単に導入できるというコンセプトの1記事です。

手順通りに行えば誰でもKUSANAGI環境が実現できる!を目指して作成しました。

是非合わせてお読み下さい!

ConoHa VPS+KUSANAGIで始めるWordpress講座!初心者でもステップ形式で導入が可能です!KUSANAGI managerの使い方からコマンドまで全部解説
ConoHa VPSコノハ ブイピーエスにおけるWordpressワードプレス仮想マシン、KUSANAGIクサナギを1から導入するのは非常に大変な作業です。 しかしKUSANAGIクサナギ managerマネージャーというKUSANA...

コメント

タイトルとURLをコピーしました