LinuxでSSH経由のrootログインを無効にする方法(と理由)

  • Linuxのrootユーザーとしてログインすることは、万能の権限が付与されるため危険です。SSH経由でrootとしてログインすることはさらに危険で、リモートの攻撃者がシステムにアクセスできる可能性があります。
  • 多くのLinuxディストリビューションでは、rootとしてログインすることを推奨せず、代わりにsudoコマンドを使用して、必要に応じて一時的に権限を昇格させて、ミスや悪意のある行為のリスクを軽減することを推奨しています。
  • SSH経由でrootアクセスを許可する必要がある場合は、パスワードの代わりにSSHキーを使用する方が安全です。これにより、ブルートフォース攻撃や不正アクセスのリスクがなくなります。

Linuxのrootユーザーとしてログインすることはよくありません。SSH接続経由でrootとしてログインすることはさらに悪いです。その理由と防止方法を紹介します。

このサイバーセキュリティ意識向上週間の記事は、Incogniとの提携でお届けします。

Linuxのrootとは?

通常のユーザーが扱うにはあまりにも重要または機密性が高すぎるオペレーティングシステムの領域を所有し、管理する権限を持つ人物が必要です。そこでrootが登場します。rootは、UnixとLinuxオペレーティングシステムの万能のスーパーユーザーです。

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

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

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

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

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

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

SSH経由でrootログインを許可すると、攻撃者はローカルにいる必要がないため、リスクが高まります。システムをリモートでブルートフォース攻撃を試行できます。

rootユーザーとSSHアクセス

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

このようなことは偶然には起こりません。しかし、関連するリスクを理解していない人が行う可能性があります。その状態のコンピュータの管理を引き継ぐ場合は、所有者にそれがなぜ悪い考えなのかをアドバイスしてから、システムを安全な状態に復元する必要があります。前のシステム管理者が構成したものであれば、所有者は知らないかもしれません。

Fedoraを実行しているコンピュータのユーザーが、UbuntuコンピュータのrootユーザーとしてUbuntuコンピュータにSSH接続しています。

ssh [email protected]

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

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

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

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

sudo systemctl restart ssh

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

sudo passwd root -ld

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

rootのSSHアクセスを許可するためのより安全な方法

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

SSH経由で接続するためにSSHキーを使用することは、パスワードを使用することよりもはるかに安全です。パスワードは使用されないため、ブルートフォース攻撃、推測、またはその他の方法で検出されることはありません。

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

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

sudo gedit /etc/ssh/sshd_config

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

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

sudo systemctl restart ssh

これで、誰かがrootユーザーのパスワードを復活させたとしても、パスワードを使用してSSH経由でログインすることはできません。

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

ssh [email protected]

アクセス禁止

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