Instiq
第6章 · システムのセキュリティ·v1.0.0·更新 2026/7/7·読了目安 約13分

変更要約: 初版(主題2.12・副主題2.12.1〜2.12.4に対応)

6.2OpenSSHサーバーの設定と管理

この節の要点

sshd の設定ファイル/etc/ssh/sshd_configを中心に、ホスト鍵/etc/ssh/ssh_host_*_keyssh_host_*_key.pub)、root ログイン制御のPermitRootLogin、公開鍵認証のPubkeyAuthentication、接続許可ユーザーを絞るAllowUsers、パスワード認証のPasswordAuthenticationを学びます。

リモート管理の生命線がsshd(OpenSSH サーバーデーモン)です。デフォルト設定のまま外部公開すると総当たり攻撃の的になるため、L2 ではroot ログインの禁止・鍵認証への一本化・接続ユーザーの絞り込みという定番の堅牢化を、設定ディレクティブのスペルまで正確に扱えることが問われます。

6.2.1sshd_configの主要ディレクティブ

  • 設定ファイルは/etc/ssh/sshd_config。編集後は構文チェック(sshd -t)してからsystemctl reload sshdで反映するのが安全(誤った設定での再起動はロックアウトの危険)。
  • PermitRootLogin=root での直接ログイン可否。noで禁止、prohibit-passwordでパスワード認証のみ禁止(鍵認証でのroot接続は許可)。堅牢化の定番はno
  • PubkeyAuthentication=公開鍵認証の有効/無効(既定yesが多い)。PasswordAuthentication=パスワード認証の可否。鍵認証を徹底するならPasswordAuthentication noに設定する。
  • AllowUsers=接続を許可するユーザーをスペース区切りで列挙(例AllowUsers alice bob)。指定されなかったユーザーは全て拒否されるホワイトリスト方式

6.2.2ホスト鍵と鍵認証の仕組み

  • ホスト鍵=サーバー自身の身元証明鍵。/etc/ssh/ssh_host_*_key(秘密鍵)とssh_host_*_key.pub(公開鍵)のペアがアルゴリズム(rsa/ecdsa/ed25519等)ごとに存在し、通常はパッケージインストール時に自動生成される。
  • クライアント側は初回接続時にホスト鍵のフィンガープリントを記録(~/.ssh/known_hosts)し、次回以降は鍵が変わっていないかを検証する(中間者攻撃の検知)。
  • 公開鍵認証の流れ=クライアントの秘密鍵で署名→サーバーが対応する公開鍵(~/.ssh/authorized_keysに登録)で検証。サーバー側にはクライアントの公開鍵のみを置く(秘密鍵は絶対に配布しない)。
試験ポイント

「root ログイン禁止=PermitRootLogin no」「鍵認証のみに絞る=PasswordAuthentication no(+ PubkeyAuthentication yes)」「接続許可ユーザーの絞り込み=AllowUsers」 の3点セットが最頻出です。ディレクティブのスペル(PermitRootLogin・PubkeyAuthentication・大文字小文字含む)を正確に選べるかが問われます。ホスト鍵の秘密鍵ファイル名(ssh_host_*_key)と公開鍵(.pub)の対比も定番です。

典型的な堅牢化シナリオで確認しましょう。「インターネットに公開する踏み台サーバーで、root の直接ログインを禁止し、一般ユーザー alice と bob だけに接続を絞り、パスワード認証を無効化して鍵認証のみにしたい」場合、/etc/ssh/sshd_configには次を設定します:PermitRootLogin no(root は直接ログイン不可、必要ならsudoで昇格)、AllowUsers alice bob(この2名以外は接続不可)、PasswordAuthentication no(パスワードでの認証を拒否)、PubkeyAuthentication yes(鍵認証を許可、通常は既定で有効)。ここで注意したいのは適用順序と検証です。設定変更後にいきなりsystemctl restart sshdすると、鍵の設定ミスがあった場合に誰も接続できなくなるリスクがあるため、可能ならコンソールアクセスを確保した状態でsshd -tによる構文チェック→別セッションを開いたまま反映→新規接続で疎通確認、という手順を踏みます。またPermitRootLogin prohibit-passwordという中間的な設定もあり、これは「パスワードでのroot直接ログインは拒否するが、鍵認証でのroot接続は許可する」もので、緊急時のroot作業を鍵認証に限定したい場合に使われます。ホスト鍵が変わった(サーバー再構築等)場合、クライアントはknown_hostsの記録と食い違うため警告を出しますが、これは正当な再構築でも中間者攻撃でも同じ警告になるため、変更の正当性を運用者が確認してからknown_hostsを更新する運用が重要です。

ディレクティブ役割堅牢化の典型値
PermitRootLoginrootの直接ログイン可否no(または prohibit-password)
PasswordAuthenticationパスワード認証の可否no
PubkeyAuthentication公開鍵認証の可否yes
AllowUsers接続許可ユーザーの列挙AllowUsers alice bob
注意

ひっかけ: 「PermitRootLogin no にすると鍵認証でも root ログインが一切できなくなる」は文脈次第で誤りです。noは完全禁止ですが、鍵認証のみ許可したいならprohibit-passwordが正解で、両者を混同させる選択肢は定番です。また「AllowUsers を設定しなくても sshd_config の他の設定で自動的に接続ユーザーが絞られる」も誤り=AllowUsers を明示しない限り、認証を通過した全ユーザーが接続可能です。ディレクティブ名をPubKeyAuthenticationのように大文字を誤らせる選択肢(正しくはPubkeyAuthentication)にも注意します。

sshd_configの主要ディレクティブとホスト鍵・公開鍵認証の流れを示す図。
PermitRootLogin no・PasswordAuthentication no・AllowUsers

6.2.3この節のまとめ

  • 設定は/etc/ssh/sshd_configPermitRootLogin no/PasswordAuthentication no+PubkeyAuthentication yes/AllowUsersで堅牢化
  • ホスト鍵ssh_host_*_key秘密/.pub公開)がサーバー身元証明。反映前にsshd -tで構文チェック

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. 公開サーバーで root の直接ログインを完全に禁止したい(鍵認証でも不可)。sshd_config に設定すべきディレクティブと値は?

Q2. alice と bob だけに SSH 接続を許可し、他の全ユーザーを拒否したい。適切な設定は?

Q3. パスワード認証を無効化し、公開鍵認証のみでSSH接続させたい。設定すべき組み合わせは?

理解度を確認第6章「システムのセキュリティ」の問題を解く

学習の記録を残しませんか

参考書はすべて無料で読めます。無料登録すると、問題集での演習・既読と進捗の記録・間違えた問題の復習・ハイライトが使えます。