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

記事内に広告が含まれていることがあります。
ConoHa VPS - rootログイン禁止アイキャッチ

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

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

  • 何故rootユーザーのログインを禁止すべきかがわかる!
  • rootユーザー以外の一般ユーザーの作成ができる!
  • 実際にrootユーザーのログインを禁止することができる!
WordPressカテゴリーCTA
\ココナラでWordPressエラー修正サービス始めました!/

ココナラでWordPressのエラー解決サービスを始めました!

追加オプション無しで3,000円から受け付けておりますが、新規会員登録で300円、僕の紹介コードを入力すると1,000円分のポイントが貰えるので実質1,700円から利用することができます!

  • 突然画面が真っ白になった
  • 英語のエラーが表示されてどうしたらいいかわからない
  • とにかく困っている

どんなことでもぜひお気軽にご相談ください!

紹介コード:K0GR23
スポンサーリンク
スポンサーリンク

なんで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 - ユーザー名

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

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

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

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

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

コマンド - mkdir
コマンド – mkdir
コマンド
$ mkdir /home/ユーザー名/.ssh

コマンド[mkdir]
ディレクトリ(フォルダ)を作成する為のコマンド

Macユーザーの方は前回使ったディレクトリを作る為の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接続を禁止するので、次の行を探してみて下さい。

/etc/ssh/sshd_config
#PermitRootLogin yes

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

/etc/ssh/sshd_config
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番から他のポートへ変更する事も簡単ですがめっちゃ重要です。

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

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

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

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

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

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

ConoHa VPS+KUSANAGIで始めるWordPress講座!初心者でもステップ形式で導入が可能です!KUSANAGI managerの使い方からコマンドまで全部解説
WordPress高速化エンジンKUSANAGIは、ConoHa VPSと組み合わせて使う事で初心者の方でも比較的簡単に導入が可能です。KUSANAGI managerを使った登録方法から設定やWordPressの設定まで全て解説!日本一分かりやすいKUSANAGIの始め方です!
スポンサーリンク
WordPress
スポンサーリンク
\この記事いいね!と思ったらシェアしてね/
スポンサーリンク
L'7 Records

コメント