Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Day-3: Disable SSH Root Login on Linux | 100 Days Of DevOps

2025年09月21日に「Dev.to」が公開したITニュース「Day-3: Disable SSH Root Login on Linux | 100 Days Of DevOps」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Linuxサーバーのセキュリティを高めるため、SSHでのrootログインを禁止する方法を解説。rootユーザーからの直接ログインは危険なため、sudo権限を持つ一般ユーザーを作り、SSH設定ファイルを編集してrootログインを無効化する。その後サービスを再起動することで、安全にシステムを管理できるようになる。

ITニュース解説

Linuxサーバーのセキュリティを強化する上で、SSH(Secure Shell)によるアクセス管理は非常に重要だ。SSHは、ネットワークを通じて離れた場所にあるサーバーに安全に接続し、コマンドを実行するためのツールである。多くのLinuxサーバーでは、初期設定のままだと「root」ユーザーがSSH経由で直接ログインできるようになっている場合がある。しかし、これはセキュリティ上の大きなリスクを伴うため、rootユーザーによるSSHログインを無効にすることが強く推奨される。

rootユーザーとは、Linuxシステムにおいて全ての権限を持つ最強のユーザーアカウントである。システム内のあらゆるファイルや設定を変更したり、プログラムを実行したりする絶対的な権限を持っており、Windowsでいうところの「管理者」よりもさらに強力な存在だ。この強力なアカウントが、もし悪意のある第三者の手に渡ってしまうと、サーバー全体が乗っ取られ、データの破壊や不正利用、他のシステムへの攻撃の踏み台にされるなど、深刻な被害につながる可能性がある。

rootログインをSSH経由で許可していると、攻撃者は「root」というユーザー名を使って、パスワードを何度も試行する「ブルートフォース攻撃」を仕掛けやすくなる。攻撃者が試すべきユーザー名が「root」と分かっているため、あとはパスワードを総当たりで推測するだけになる。しかし、rootログインを無効にしておけば、攻撃者はまず正しいユーザー名を特定するところから始めなければならず、攻撃のハードルが格段に上がる。これにより、サーバーへの不正アクセスのリスクを大幅に減らすことができるのだ。

このセキュリティ強化策を実現するために、以下の手順で設定を行う。

まず、rootログインを無効にする前に、管理作業を行うための「非rootユーザー」を準備する必要がある。rootユーザーでのログインを禁止してしまうと、もし他の管理用ユーザーが存在しない場合、サーバーにログインして設定を変更する手段がなくなってしまうからだ。非rootユーザーとは、root以外の一般的なユーザーアカウントのことである。そして、その非rootユーザーには、必要なときに一時的にroot権限を使えるように「sudo」という特別な権限を付与しておくことが重要だ。sudo権限があれば、非rootユーザーでログインした後でも、特定のコマンドの前にsudoとつけることで、一時的にrootユーザーとしてそのコマンドを実行できる。

例えば、yourusernameという新しいユーザーを作成するには、サーバーにログインし(まだrootでログインしているならそれを使うか、既存のsudo権限を持つユーザーでログインする)、sudo adduser yourusernameというコマンドを実行する。このコマンドは、新しいユーザーアカウントを作成し、ホームディレクトリなども同時に設定してくれる。次に、この新しいユーザーにsudo権限を与えるために、sudo usermod -aG sudo yourusernameというコマンドを実行する。usermodはユーザーアカウントの情報を変更するコマンドで、-aG sudoはユーザーをsudoグループに追加するという意味だ。sudoグループに属するユーザーは、sudoコマンドを使ってroot権限でコマンドを実行できるようになる。これらの作業が完了したら、一度現在のセッションからログアウトし、新しく作成したyourusernamessh yourusername@server_ipのようにしてログインし直す。このユーザーで、これから行う設定変更を進めていく。

次に、SSHデーモンの設定ファイルを編集する。SSHデーモン(sshd)とは、サーバー上でSSH接続を受け付ける役割を担うプログラムのことだ。このプログラムの設定は、通常/etc/ssh/sshd_configというファイルに記述されている。このファイルを編集するには、sudo nano /etc/ssh/sshd_configというコマンドを使う。sudoは先ほど説明したようにroot権限でコマンドを実行するためのもので、nanoはLinuxでよく使われるシンプルなテキストエディタだ。

ファイルを開いたら、その中から#PermitRootLogin yesという行を探す。この行は、rootユーザーによるSSHログインを許可する設定を表している。行頭の#は、その行がコメントアウトされており、現在のところは設定として有効になっていないことを意味する。もし#がないPermitRootLogin yesという行があれば、それが有効な設定であり、その行を編集する。もしコメントアウトされたままの行しかない場合は、その行の#を削除し、yesnoに変更する。つまり、PermitRootLogin noという形になるように編集するのだ。この変更により、SSH経由でのrootユーザーによる直接ログインが完全に禁止される。ファイルを編集し終えたら、nanoエディタでファイルを保存して閉じる(通常はCtrl+Oで保存、Ctrl+Xで終了)。

設定ファイルを変更しただけでは、SSHデーモンは古い設定のまま動作し続ける。変更を反映させるためには、SSHデーモンを再起動する必要がある。これには、sudo systemctl restart sshdというコマンドを実行する。systemctlはLinuxのサービス(デーモン)を管理するためのコマンドで、restartは指定されたサービスを停止し、再度起動するという意味だ。これにより、新しい設定がSSHデーモンに読み込まれ、rootログインの禁止が有効になる。システムによっては、SSHサービスの名前がsshdではなくsshの場合もあるため、その場合はsudo systemctl restart sshと実行する。

設定変更が正しく適用され、なおかつ自分が管理作業を行えることを確認することは非常に重要だ。設定を間違えてしまうと、誰もサーバーにログインできなくなり、サーバーが「ロックアウト」されてしまう可能性があるからである。現在のSSHセッションは開いたままにしておき、新しいターミナルウィンドウを開くか、別のコンピュータから、先ほど作成した非rootユーザーでログインを試みる。具体的には、ssh yourusername@server_ipと入力し、ログインする。ログインが成功したら、そのユーザーでsudo whoamiというコマンドを実行してみる。whoamiは現在ログインしているユーザー名を表示するコマンドだが、sudoを前につけることで、root権限で実行した場合のユーザー名を表示させる。もしこのコマンドがrootと返せば、非rootユーザーでログインした後でも、sudoを使って管理作業(root権限が必要な作業)が行えることが確認できたことになる。これにより、rootログインを禁止しても、サーバー管理に支障がないことが保証される。

さらにセキュリティを強化したい場合は、SSHサービスのログを確認することで、最近のログイン試行、特に失敗したrootアクセス試行がないかをチェックできる。これには、sudo journalctl -u sshd | grep "root"というコマンドを使用する。journalctlは、Linuxシステムのログを一元的に管理するシステムジャーナルを表示するコマンドだ。-u sshdはSSHデーモンのログに絞り込むことを意味し、| grep "root"は、そのログの中から「root」というキーワードを含む行だけを抽出して表示するという意味になる。これにより、不正なrootアクセス試行がないか、サーバーが狙われていないかといった状況を把握し、早期に対応できる可能性がある。

以上の手順を踏むことで、LinuxサーバーのSSHセキュリティを大幅に向上させることができる。rootログインを無効にすることは、ブルートフォース攻撃に対するリスクを低減し、攻撃者が標的とするアカウントの数を制限する効果的な手段だ。常に、少なくとも一人の非rootユーザーがsudo権限を持っていることを確認し、安全な方法でシステムを管理することを忘れてはならない。この設定は、サーバーを安全に運用するための最も基本的でありながら非常に重要なステップである。

関連コンテンツ

関連IT用語