Linux で SSH 経由のルート ログインを無効にする方法 (およびその理由)

公開: 2022-09-29
bash プロンプトを表示している Linux ラップトップ
Fatmawati achmad zaenuri/Shutterstock.com

Linux ルート ユーザーとしてログインすることはお勧めできません。 SSH 接続を介して root としてログインするのはさらに悪いことです。 その理由を説明し、それを防ぐ方法を示します。

諸刃の剣

通常のユーザーが扱うには重要すぎる、または機密性が高すぎるオペレーティング システムの部分を所有および管理する権限を持つ人が必要です。 そこで root の出番です。root は、Unix および Linux オペレーティング システムの全能のスーパーユーザーです。

root ユーザー アカウントは、すべてのアカウントと同様に、パスワードで保護されています。 root ユーザーのパスワードがなければ、誰もそのアカウントにアクセスできません。 つまり、root の特権と権限は、他のユーザーが使用することはできません。 反対に、悪意のあるユーザーと root 権限の間の唯一の防御はそのパスワードです。 もちろん、パスワードは、推測、推定、どこかに書き留めたもの、または力ずくで見つけられる可能性があります。

悪意のある攻撃者が root のパスワードを発見すると、ログインしてシステム全体に対して好きなことを行うことができます。 root の昇格された特権では、できることに制限はありません。 これは、root ユーザーがログアウトせずに端末から離れ、自分のアカウントへの日和見アクセスを許可したかのようです。

Linux システムに root としてログインしてはいけない理由
関連Linux システムに root としてログインしてはいけない理由

これらのリスクのため、多くの最新の Linux ディストリビューションでは、root がコンピューターにローカルでログインすることを許可していません。 root ユーザーは存在しますが、パスワードが設定されていません。 それでも、誰かがシステムを管理できる必要があります。 その難問を解決するのがsudoコマンドです。

sudoを使用すると、指名されたユーザーは自分のユーザー アカウント内から root レベルの権限を一時的に使用できます。 sudoを使用するには認証が必要です。これは、独自のパスワードを入力して行います。 これにより、ルートの機能に一時的にアクセスできます。

使用していたターミナル ウィンドウを閉じると、root 権限が失われます。ターミナル ウィンドウを開いたままにしておくと、タイムアウトになり、自動的に通常のユーザー ステータスに戻ります。 これにより、別のタイプの保護が提供されます。 それはあなた自身からあなたを守ります。

通常のアカウントではなくルートとして習慣的にログインすると、コマンド ラインでミスを犯すと壊滅的な事態になる可能性があります。 管理を実行するためにsudoを使用する必要があるということは、入力内容に集中して注意を払う可能性が高くなることを意味します。

SSH を介したルート ログインを許可すると、攻撃者がローカルである必要がないため、リスクが高まります。 彼らはあなたのシステムをリモートでブルートフォースしようとすることができます.

関連: Linux で sudo コマンドの使用法を確認する方法

root ユーザーと SSH アクセス

他の人のためにシステムを管理している場合、この問題に遭遇する可能性が高くなります。 ログインできるように root パスワードを設定した人もいるかもしれません。 root が SSH 経由でログインできるようにするには、他の設定を変更する必要があります。

このようなことは偶然には起こりません。 しかし、関連するリスクを理解していない人でも実行できます。 そのような状態のコンピューターの管理を引き継ぐ場合は、所有者になぜそれが悪い考えなのかを伝えてから、システムを安全に動作する状態に戻す必要があります。 以前のシステム管理者によって設定されたものである場合、所有者はそれについて知らない可能性があります。

ここでは、Fedora を実行しているコンピューター上のユーザーが、Ubuntu コンピューターのルート ユーザーとして Ubuntu コンピューターに SSH 接続を行っています。

 ssh [email protected] 

SSH を使用してリモート コンピューターに接続する root ユーザー

Ubuntu コンピューターでは、root ユーザーが SSH 経由でログインできます。 Ubuntu コンピューターでは、root ユーザーからのライブ接続が進行中であることがわかります。

who コマンドを使用してログインしているユーザーを一覧表示する

誰がそのセッションを使用しているかはわかりません。 SSH 接続の相手が root ユーザーなのか、root のパスワードを取得した人なのかはわかりません。

root の SSH アクセスを無効にする

root ユーザーの SSH アクセスを無効にするには、SSH 構成ファイルを変更する必要があります。 これは「/etc/ssh/sshd_config」にあります。 sudoを使用して変更を書き込む必要があります。

 sudo gedit /etc/ssh/sshd_config 

sshd-config ファイルの編集

ファイルをスクロールするか、文字列「PermitRootLogin」を検索します。

これを「no」に設定するか、ハッシュ「 # 」を行の最初の文字として配置して行をコメントアウトします。 変更を保存します。

変更を有効にするには、SSH デーモンを再起動する必要があります。

 sudo systemctl restart ssh 

sshd デーモンの再起動

ローカル ログインも防止したい場合は、root のパスワードを無効にします。 ベルトとブレースのアプローチを採用し、 -l (ロック) と-d (パスワードの削除) オプションの両方を使用しています。

 sudo passwd root -ld 

root アカウントのロックと root パスワードの削除

これにより、アカウントがロックされ、アカウントのパスワードが取り除かれます。 root ユーザーが物理的にコンピュータの前に座っていても、ログインすることはできません。

ルート SSH アクセスを許可するより安全な方法

SSH 経由のルート アクセスを削除することに対する管理上の抵抗に遭遇することがあります。 彼らが本当に耳を貸さないのなら、あなたはそれを元に戻さなければならない立場にいることに気付くかもしれません. この場合、リスクを軽減しながら root ユーザーからのリモート ログインを許可する方法で妥協できるはずです。

Linux シェルから SSH キーを作成してインストールする方法
関連Linux シェルから SSH キーを作成およびインストールする方法

SSH 鍵を使用して SSH 経由で接続することは、パスワードを使用するよりもはるかに安全です。 パスワードが含まれていないため、ブルート フォース、推測、またはその他の方法で発見することはできません。

ローカル ルート アカウントをロックする前に、リモート コンピューターで SSH キーをセットアップして、ルート ユーザーがローカル コンピューターに接続できるようにします。 次に、パスワードを削除し、ローカル アカウントをロックします。

また、「sshd_config」ファイルをもう一度編集する必要があります。

 sudo gedit /etc/ssh/sshd_config 

sshd-config ファイルの編集

「PermitRootLogin」行を変更して、「prohibit-password」オプションを使用するようにします。

変更を保存し、SSH デーモンを再起動します。

 sudo systemctl restart ssh 

sshd デーモンの再起動

これで、誰かが root ユーザーのパスワードを元に戻しても、パスワードを使用して SSH 経由でログインすることはできなくなります。

リモート ルート ユーザーがローカル コンピューターに SSH 接続を行うと、キーが交換されて検査されます。 認証に合格すると、root ユーザーはパスワードなしでローカル コンピューターに接続されます。

 ssh [email protected] 

パスワードなしで SSH を使用してリモート コンピューターに接続する root ユーザー

立入り禁止

root ユーザーからのリモート接続を拒否することが最善の選択肢です。 root が SSH キーを使用して接続できるようにするのが 2 番目に良い方法ですが、それでもパスワードを使用するよりははるかに優れています。

関連: Linux で sudo アクセスを制御する方法