sshdサーバを使ってみよう

SSHによるリモート・ログインは、サーバ管理においてほぼ必須である。そのため、最近のLinuxディストリビューションでは最初からOpenSSHのsshdサーバが有効になっていることが多い。その場合、大抵は最初からパスワード認証と公開鍵認証の2種類が有効になっており、アカウントがあればSSHを使ってログインできる状態になっている。

今回は、このsshdサーバの設定を変更して公開鍵認証のみを有効にする方法や、より使いやすくするための方法を紹介しよう。可能な限り安全な環境を作り上げ、セキュリティ・インシデントを全力で回避する。――最小限の労力で最大の効果を挙げるには、こうした地味な取り組みが大切なのだ。

設定ファイルを書き換える(汎用)

sshdの設定ファイルは、「/etc/ssh/sshd_config」にデプロイされていることが多い。このファイルは、各行が「項目 値」という形式で記述されており、これを書き換えてsshdを再起動すると、変更が反映される。

まず大前提として、rootではログインしないように次のような設定を記述しよう。


PermitRootLogin no

ほとんどの場合、すでに「PermitRootLogin」という項目があると思う。その値が「yes」になっていたら、これを「no」にすればよい(もしコメント・アウトされていたら、コメントを削除してから値を「no」にする)。

また、公開鍵認証でログインしたいので、その設定を有効にする。


PubkeyAuthentication yes

さらに、パスワード認証とチャレンジ・レスポンス認証は無効にしたいので、これらは次のように記述する。


PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

これで、ログインに関する設定は完了だ。

より使いやすくするための設定

ログインに関する設定を終えたら、今度はより使いやすくするための項目を設定しておこう。まず、DNSを切る。DNSを使用可能な状態にしていると、場合によってはログインできないケースに遭遇することがあるので、念のための設定だ。


UseDNS no

また、sshdはデフォルトではポート番号22で待機しているが、これを変更しておくとわずかながら攻撃されるリスクを下げることができる。下記のようにポート番号が記述してある個所があるので、空いているポート番号に変えておこう。


Port 22

ポート番号を変更しても、フルスキャンによってどのソフトウェアがどのポートを使っているかは判定されてしまうのだが、少しでも攻撃される可能性を下げられるに越したことはない。あえて既知のほかのポート番号に割り当てることもあるが、そのあたりはポリシーの話になる。

こうして/etc/ssh/sshd_configファイルを書き換えた後は「service sshd restart」というコマンドを入力すれば、sshdを再起動できる。もしserviceが存在しない場合には、「/etc/rc.d/sshd restart」あたりが使えると思う。

設定ファイルを書き換える(*BSD系)

*BSD(FreeBSD、NetBSD、OpenBSD)では、/etc/ssh/sshdconfigファイルを直接書き換えなくともsshdのオプションを設定できるようになっている。/etc/rc.confファイルに「sshdflags」という変数を設定し、そこに起動時に指定したいオプションを書いておけばよい。


sshd_enable="YES"
sshd_flags="-oPermitRootLogin=no -oUsePAM=no -oChallengeResponseAuthentication=no -oUseDNS=no"

*BSDでは、サーバの設定をこの/etc/rc.confファイルに記述するケースが多く、このファイルを見るとそのサーバで何が動いているのかがわかる。


# ps axw | grep /usr/sbin/sshd | grep -v grep
13977  -  Is       0:00.00 /usr/sbin/sshd -oPermitRootLogin=no -oUsePAM=no -oChallengeResponseAuthentication=no -oUseDNS=no
#

さらにこの方法では、「ps(1)」コマンドでsshdを調べた時に、指定されているオプションを確認できるという利点がある。加えて、/etc/ssh/sshd_configファイルを直接編集しないので、システム・アップグレードの際に設定が上書きされてしまうといった事故を避けられる点もメリットだ。

なお、OpenBSDでは/etc/rc.confではなく/etc/rc.conf.localに書く方法が推奨されている

設定の確認

公開鍵認証のみでログインしているかどうかは、SSHのデバッグ・オプションを有効にすると確認できる。以下に、参考までにデバッグ・オプション(-v)を指定した状態の出力を掲載しておく。


% ssh -v foo.bar.example.org
OpenSSH_6.6.1p1, OpenSSL 1.0.1p-freebsd 9 Jul 2015
debug1: Reading configuration data /home/daichi/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to xxxxxx [yyyyyy] port 22.
debug1: Connection established.
...略...
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey    ← これと
debug1: Next authentication method: publickey       ← これ。
debug1: Offering RSA public key: /home/daichi/.ssh/id_rsa.pem
debug1: Server accepts key: pkalg ssh-rsa blen 533
debug1: Authentication succeeded (publickey).
...略...
debug1: mux_client_request_session: master session id: 2
Last login: Sun Dec 20 18:13:46 2015 from 192.168.1.39  ← ログイン成功
FreeBSD 10.2-RELEASE-p7 (GENERIC) #0: Mon Nov  2 14:19:39 UTC 2015

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace "en" with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

Edit /etc/motd to change this login announcement.
#

「Authentications that can continue: publickey」から、認証方式として公開鍵認証しか挙げられていないこと、「Next authentication method: publickey」から、公開鍵認証で認証していることが確認できる。もし、公開鍵認証以外も有効になっている場合、「Authentications that can continue: publickey,keyboard-interactive」のように、有効な認証方式が列挙される。

今回のおさらい

今回はおさらいは、こんなところだ。

  • sshdの設定を変更して公開鍵認証のみを使うように変更する
  • sshdの設定ファイルは、/etc/ssh/sshd_configファイル
  • *BSDの場合、/etc/rc.confファイルでも設定できる
  • sshdの再起動には、「service sshd restart」コマンドを使う
  • 使われている認証方式の確認には、「ssh -v」コマンドを使う

公開鍵/秘密鍵の生成方法と、サーバ/クライアントの設定については次回紹介しよう。