/usr/sbin/sshd
sshd — OpenSSH daemon
SYNOPSIS
- sshd [-46DdeiqTt] [-C connection_spec] [-c host_certificate_file] [-E log_file] [-f config_file] [-g login_grace_time] [-h host_key_file] [-o option] [-p port] [-u len]
DESCRIPTION
sshd (OpenSSH Daemon) は ssh のデーモンプログラムである。 これらのプログラムはともに、rlogin と rsh に代わるものであり、 安全でないネットワークを介して、信頼できない 2 つのホスト間で安全な 暗号化通信を提供する。
sshd は、クライアントからの接続を待ち受ける。通常、起動時に /etc/init.d/ssh から起動される。 sshd は、着信接続ごとに新しいデーモンをフォークする。 フォークされたデーモンは、鍵交換、暗号化、認証、コマンド実行、およびデータ交換を処理する。
sshd は、コマンドラインオプションまたは設定ファイル (既定では sshd_config) を使用して設定することができ、コマンドラインオプションは設定ファイルで指定された値を上書きする。
オプションは次のとおり。
- -4
- sshd が IPv4 アドレスのみを使用するように強制する。
- -6
- sshd が IPv6 アドレスのみを使用するように強制する。
- -C connection_spec
- -T 拡張テストモードで使用する接続パラメータを指定する。 指定された場合、構成ファイル中の Match ディレクティブが適用され、構成が標準出力に書き出される前に適用される。 接続パラメータはキーワードと値の組で提供され、複数の -C オプションまたはカンマ区切りのリストとして、任意の順序で提供することができる。 キーワードは"addr"、"user"、"host"、"laddr"、"lport"、"rdomain"で、それぞれソースアドレス、ユーザー、解決済みソースホスト名、ローカルアドレス、ローカルポート番号、ルーティングドメインに対応する。
- -c host_certificate_file
- 鍵交換時に sshd を識別するための証明書ファイルへのパスを指定する。 証明書ファイルは、-h オプションまたは HostKey 構成ディレクティブを使用して指定されたホスト鍵ファ イルと一致する必要がある。
- -D
- このオプションを指定すると、sshd は切り離されず、デーモンにならない。 これにより、sshd の監視が容易になる。
- -d
- デバッグモード。 サーバは標準エラーに冗長なデバッグ出力を送信し、自身をバックグラウンドに置かない。 また、サーバはフォークせず、1 つの接続のみを処理する。 このオプションは、サーバーのデバッグのみを目的としている。 複数の -d オプションを指定すると、デバッグのレベルが上がる。 最大値は3である。
- -E log_file
- システムログの代わりに log_file にデバッグログを追加する。
- -e
- システムログの代わりにスタンダードエラーにデバッグログを書き込む。
- -f config_file
- 構成ファイルの名前を指定する。 既定値は /etc/ssh/sshd_config である。構成ファイルが存在しない場合、sshd は起動しない。
- -g login_grace_time
- クライアントが認証を行うまでの猶予時間を指定する (デフォルト 120 秒)。 クライアントがこの秒数以内にユーザを認証できなかった場合、サーバは接続を切断して終了する。 値0は制限なしを示す。
- -h host_key_file
- ホスト鍵の読み取り元となるファイルを指定する。 このオプションは、sshd が root として実行されていない場合に指定する必要がある (通常、通常のホスト鍵ファイルは root 以外では読み取れないため)。 既定では、/etc/ssh/ssh_host_ecdsa_key、/etc/ssh/ssh_host_ed25519_key および /etc/ssh/ssh_host_rsa_key が指定されている。 異なるホスト鍵アルゴリズム用に複数のホスト鍵ファイルを持つことが可能である。
- -i
- sshd が inetd から実行されていることを指定する。
- -o オプション
- 構成ファイルで使用される形式でオプションを指定するために使用できる。 これは、個別のコマンドライン・フラグがないオプションを指定する場合に便利である。 オプションとその値の完全な詳細については、sshd_config を参照。
- -p port
- サーバーが接続をリッスンするポートを指定する (デフォルト 22)。 複数のポート・オプションを指定することができる。 Port オプションを使用して構成ファイルで指定されたポートは、コマンドライン・ポートが指定され ている場合、無視される。 ListenAddress オプションを使用して指定されたポートは、コマンドライン・ポートより優先される。
- -q
- クワイエットモードである。 システムログには何も送信されない。 通常、各接続の開始、認証、終了はログに記録される。
- -T
- 拡張テストモード。 設定ファイルの有効性をチェックし、有効な設定を標準出力に出力して終了する。 オプションとして、1つまたは複数の -C オプションを使用して接続パラメータを指定することにより、マッチルールを適用することができる。
- -t
- テストモード。 構成ファイルの有効性と鍵の正常性のみをチェックする。 これは、構成オプションが変更される可能性があるため、 sshd を確実に更新するのに便利である。
- -u len
このオプションは、リモートホスト名を保持するutmp構造体のフィールドのサイズを指定するために使用される。解決されたホスト名がlenより長い場合、代わりにドット付き10進数値が使用される。 これにより、このフィールドをオーバーフローする非常に長いホスト名を持つホストも一意に識別できるようになる。 -u0 を指定すると、ドット付き10進数のアドレスだけを utmp ファイルに書き込むようになる。 また、-u0 を使用すると、認証機構または構成が必要としない限り、sshd が DNS 要求を行わないようにすることができる。 DNS を必要とする可能性のある認証機構には、HostbasedAuthentication および鍵ファイルでの from="pattern-list" オプションの使用が含まれる。 DNS を必要とする構成オプションには、AllowUsers または DenyUsers で USER@HOST パターンを使用する場合 がある。
AUTHENTICATION
OpenSSHのSSHデーモンは、SSHプロトコル2のみをサポートしている。 各ホストはホスト固有の鍵を持っており、ホストを識別するために使用される。 クライアントが接続するときはいつでも、デーモンはその公開ホスト鍵で応答する。 クライアントはホスト鍵を自分自身のデータベースと比較し、鍵が変更されていないことを確認する。 前方秘匿はDiffie-Hellman鍵合意によって提供される。 この鍵の合意は、共有されたセッション鍵に帰結する。 セッションの残りの部分は、対称型暗号を使用して暗号化される。 クライアントは、サーバから提供された暗号化アルゴリズムの中から使用するものを選択する。 さらに、セッションの完全性は暗号化メッセージ認証コード(MAC)を通じて提供される。
最後に、サーバとクライアントは認証ダイアログに入る。 クライアントは、ホストベース認証、公開鍵認証、チャレンジ・レスポンス認証、またはパスワード認証を使用して自分自身を認証しようとする。
認証の種類に関係なく、アカウントはアクセス可能かどうか確認される。 アカウントがロックされていたり、DenyUsersに登録されていたり、グループがDenyGroupsに登録されている場合は、アクセスできない。 ロックされたアカウントの定義は、システム依存である。プラットフォームによっては、独自のアカウントデータベースを持っていたり (例: AIX)、passwd フィールドを変更するものもある (Solaris と UnixWare の '*LK*', HP-UX の '*', Tru64 の 'Nologin', FreeBSD の '*LOCKED*' とほとんどの Linux の '!' を含む)。 もし、公開鍵を使用するアカウントでパスワード認証を無効にする必要がある場合は、 passwdフィールドにこれらの値以外(例えば「NP」または「*NP*」)を設定しなければならない。
クライアントが認証に成功すると、セッションの準備のためのダイアログが表示される。 このときクライアントは、擬似ttyの割り当て、X11接続の転送、TCP接続の転送、認証エージェント接続のセキュアチャネル経由での転送などを要求することができる。
この後、クライアントはシェルを要求するか、コマンドの実行を要求する。 その後、両者はセッションモードに移行する。 このモードでは、どちらからデータを送ってもよく、サーバ側のシェルやコマンドと、クライアント側のユーザ端末との間でデータがフォワーディングされる。
ユーザープログラムが終了し、フォワーディングされたX11やその他の接続がすべて閉じられると、サーバーはクライアントにコマンド終了ステータスを送信し、双方は終了する。
LOGIN PROCESS
ユーザがログインに成功したとき、sshdは、次のことを行う:
- 1. ログインが tty で、コマンドが指定されていない場合、最終ログイン時刻と /etc/motd を表示する (設定ファイルまたは ~/.hushlogin で阻止されていない限り。FILES セクションを参照)。
- 2. ログインがttyである場合、ログイン時間を記録する。
- 3. /etc/nologin をチェックし、存在すれば、内容を表示して終了する(root でない場合)。
- 4. 通常のユーザー権限で実行できるように変更。
- 5. 基本的な環境を整える。
- 6. ~/.ssh/environment ファイルが存在する場合、それを読み込み、ユーザが環境を変更することを許可する。 sshd_config の PermitUserEnvironment オプションを参照。
- 7. ユーザのホームディレクトリに変更する。
- 8. もし ~/.ssh/rc が存在し、かつ sshd_config PermitUserRC オプションが設定されていればそれを実行し、 /etc/ssh/sshrc が存在すればそれを実行し、そうでなければ xauth を実行する。 "rc" ファイルには、X11 認証プロトコルとクッキーが標準入力で渡される。 後述のSSHRCを参照。
- 9. ユーザーのシェルまたはコマンドを実行する。 すべてのコマンドは、システム・パスワード・データベースで指定されたユーザーのログイン・シェルの下で実行される。
SSHRC
もし ~/.ssh/rc が存在すれば、sh は環境ファイルを読み込んだ後、 ユーザのシェルやコマンドを起動する前にこれを実行する。 これは標準出力には何も出力してはいけない。 X11 フォワーディングが使用されている場合、スクリプトは標準入力に "proto cookie" ペアを受け取る (環境では DISPLAY を受け取る)。 sshd は X11 クッキーを追加するために自動的に xauth を実行しないので、スクリプトは xauth を呼び出さなければならない。
このファイルの主な目的は、ユーザのホームディレクトリにアクセスできるようになる前に必要となる可能性のある初期化ルーチンを実行することである。
このファイルには、おそらくいくつかの初期化コードが含まれ、その後に:|のようなものが続く。~/.ssh/rc ファイルが存在する場合、sh は環境ファイルを読んだ後、 ユーザのシェルやコマンドを開始する前にこれを実行する。 これは stdout に何も出力してはいけない。 X11 フォワーディングが使用されている場合、スクリプトは標準入力に "proto cookie" ペアを受け取る (環境では DISPLAY を受け取る)。 sshd は X11 クッキーを追加するために自動的に xauth を実行しないので、スクリプトは xauth を呼び出す必要がある。
このファイルの主な目的は、ユーザのホームディレクトリにアクセスできるようになる前に必要となる初期化ルーチンを実行することである。
このファイルには、おそらくいくつかの初期化コードが含まれ、その後に次のようなものが続くであろう
if read proto cookie && [ -n "$DISPLAY" ]; then
if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
# X11UseLocalhost=yes
echo add unix:`echo $DISPLAY |
cut -c11-` $proto $cookie
else
# X11UseLocalhost=no
echo add $DISPLAY $proto $cookie
fi | xauth -q -
fi
もしこのファイルが存在しない場合、/etc/ssh/sshrcが実行され、どちらも存在しない場合、xauth は、クッキーの追加に使用される。
AUTHORIZED_KEYS FILE FORMAT
AuthorizedKeysFile は、公開鍵認証の公開鍵を含むファイルを指定する。このオプションを指定 しない場合、既定値は ~/.ssh/authorized_keys および ~/.ssh/authorized_keys2 になる。 ファイルの各行には 1 つの鍵が含まれる (空の行および '#' で始まる行はコメントとして無視される)。 公開鍵は、スペースで区切られた次のフィールドで構成される: options、keytype、base64 エンコードされた鍵、comment。 オプションフィールドはオプションである。 対応する鍵の種類は以下のとおり。
sk-ecdsa-sha2-nistp256@openssh.com ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 sk-ssh-ed25519@openssh.com ssh-ed25519 ssh-dss ssh-rsa
コメント欄は何の役にも立たない(ただし、ユーザが鍵を識別するのに便利な場合がある)。
このファイルの行は、(公開鍵のエンコーディングのサイズのために)数百バイトの長さになり、8キロバイトの限界までであることに注意すること。 代わりに id_dsa.pub、 id_ecdsa.pub、 id_ecdsa_sk.pub、 id_ed25519.pub、 id_ed25519_sk.pub 、または id_rsa.pub をコピーして編集すること。
sshd は、最小の RSA 鍵モジュラスサイズとして 1024 ビットを強制的に使用する。
オプション (存在する場合) は、カンマで区切られたオプション指定で構成される。 二重引用符内を除き、空白文字は使用できない。 以下のオプション指定に対応している (オプションキーワードは大文字と小文字を区別しない)。
- agent-forwarding
- restrictオプションで無効になっていた認証エージェントフォワーディングを有効にする。
- cert-authority
- リストされた鍵が、ユーザー認証のために署名された証明書を検証するために信頼されている認証局(CA)であることを指定する。
- 証明書は、これらの鍵オプションと同様のアクセス制限をコード化することができる。 証明書の制限と鍵オプションの両方が存在する場合、2つのうち最も制限の厳しい組合わせが適用される。
- command="command"
- この鍵が認証に使用されるたびに、コマンドが実行されることを指定する。 ユーザが指定したコマンドは (もしあれば) 無視される。 コマンドは、クライアントが pty を要求した場合は pty で実行され、そうでない場合は tty なしで実行される。 8ビットクリーンチャネルが必要な場合は、ptyを要求しないか、no-ptyを指定しなければならない。 コマンドに引用符を含めるには,バックスラッシュで引用符を囲む。
- このオプションは、特定の公開鍵が特定の操作だけを実行するように制限するのに便利である。たとえば、リモートバックアップは許可するが、それ以外は許可しない鍵のようなものである。 restrict keyオプションなどで明示的に禁止されていない限り、クライアントはTCPおよび/またはX11フォワーディングを指定できることに注意。
- クライアントによって最初に提供されたコマンドは、環境変数 SSH_ORIGINAL_COMMAND で利用可能である。 このオプションは、シェル、コマンド、サブシステムの実行に適用されることに注意すること。 また、このコマンドは sshd_config ForceCommand ディレクティブによって取って代わられる可能性があることに注意。
- コマンドが指定され、認証に使用される証明書に強制コマンドが埋め込まれている場合、2 つのコマンドが同じである場合にのみ、証明書が受け入れる。
- environment="NAME=value"
- このキーを使ってログインしたときに、この文字列を環境に追加することを指定する。 この方法で設定された環境変数は、他のデフォルトの環境値を上書きする。 このタイプのオプションは複数指定可能である。 環境処理はデフォルトでは無効になっており、 PermitUserEnvironment オプションで制御する。
- expiry-time="timespec"
- キーを受け付けない時間を指定する。 時刻は、YYYYMMDD の日付、またはシステムタイムゾーンの YYYYMMDDHHMM[SS] 時刻で指定することができる。
- from="pattern-list"
- 公開鍵認証に加えて、リモートホストの正規名またはその IP アドレスのいずれかが、カンマ区切りのパターン の一覧に含まれている必要があることを指定する。 パターンについて詳しくは、ssh_config のPATTERNSを参照。
- ホスト名またはアドレスに適用できるワイルドカードのマッチングに加えて、From スタンザは CIDR アドレス/マスクレン表記を使用して IP アドレスにマッチすることができる。
- このオプションの目的は、セキュリティを高めることである。 公開鍵認証は、それ自身はネットワークもネームサーバも何も (鍵以外は) 信用しない。しかし、誰かが何らかの方法で鍵を盗んだ場合、 その鍵によって侵入者は世界のどこからでもログインできるようになる。 この追加オプションは、盗まれた鍵を使うことをより難しくする(鍵だけでなく、ネームサーバーやルーターも危険にさらす必要がある)。
- no-agent-forwarding
Forbids authentication agent forwarding when this key is used for authentication.
- no-port-forwarding
Forbids TCP forwarding when this key is used for authentication. Any port forward requests by the client will return an error. This might be used, e.g. in connection with the command option.
- no-pty
Prevents tty allocation (a request to allocate a pty will fail).
- no-user-rc
Disables execution of ~/.ssh/rc.
- no-X11-forwarding
- このキーが認証に使用されている場合、X11フォワーディングを禁止する。 クライアントからの X11 フォワーディングリクエストはすべてエラーを返す。
- permitlisten="[host:]port"
- ssh -R オプションを使用してリモートポートフォワーディングを制限し、指定されたホスト (オプション) およびポート上でのみ待ち受けることができるようにする。 IPv6 アドレスは、アドレスを角括弧で囲むことによって指定することができる。 permitlisten オプションは、カンマで区切って複数適用することができる。 ホスト名には、ssh_config の PATTERNS セクションで説明されているように、ワイルド カードを含めることができる。このポート指定は、任意のポートに一致する。 GatewayPorts の設定により、リスンアドレスがさらに制限される可能性があることに 注意。 ssh は、フォワーディングを要求されたときにリッスンホストが指定されていない場合、 "localhost" というホスト名を送信し、この名前は、明示的な localhost アドレス "127.0.0.1" および "::1" とは異なる扱いを受けることに注意。
- permitopen="host:port"
- ssh の -L オプションでローカルポートフォワーディングを制限し、指定したホストとポートにのみ接続できるようにする。 IPv6 アドレスは、アドレスを角括弧で囲んで指定できる。 複数の permitopen オプションをカンマで区切って適用することができる。 指定されたホスト名については、パターンマッチや名前の検索は行われず、リテラルなホスト名やアドレスである必要がある。 ポート指定は、任意のポートにマッチする。
- port-forwarding
- restrictオプションで無効になっていたポートフォワーディングを有効にする。
- principals="principals"
- cert-authority 行では、証明書認証で許可されるプリンシパルをカンマ区切りのリストで指定する。 証明書が受け入れられるためには、リストの少なくとも 1 つの名前が証明書のプリンシパルのリストに含まれている必要がある。 このオプションは、cert-authority オプションを使用して信頼できる証明書署名者としてマークされていない鍵の場合は無視される。
- pty
- restrictオプションで無効化されていたttyの割り当てを許可する。
- no-touch-required
- この鍵を使用した署名に対して、ユーザーの存在を示すことを要求しない。 このオプションは、FIDO認証アルゴリズムecdsa-skとed25519-skに対してのみ意味を持つ。
- verify-required
- この鍵を使用して作成された署名が、例えばPINを介してユーザーを検証した ことを証明することを要求する。このオプションは、FIDO認証アルゴリズムecdsa-skとed25519-skに対してのみ意味を持つ。
- restrict
- すべての制限を有効にする。すなわち、ポート、エージェント、X11 フォワーディングを無効にし、PTYの割り当てと ~/.ssh/rc の実行を無効にする。 将来的に authorized_keys ファイルに制限機能が追加された場合、このセットに含まれることになる。
- tunnel="n"
- サーバに tun(4) デバイスを強制的に導入する。 このオプションがない場合、クライアントがトンネルを要求した場合に、次に利用可能なデバイスが使用される。
- user-rc
- restrict オプションで無効化されていた ~/.ssh/rc の実行を可能にする。
- X11-forwarding
- restrict オプションで無効になっていた X11 フォワーディングを許可する。
- authorized_keys ファイルの例。
# Comments allowed at start of line ssh-rsa AAAAB3Nza...LiPk== user@example.net from="*.sales.example.net,!pc.sales.example.net" ssh-rsa AAAAB2...19Q== john@example.net command="dump /home",no-pty,no-port-forwarding ssh-rsa AAAAC3...51R== example.net permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-rsa AAAAB5...21S== permitlisten="localhost:8080",permitopen="localhost:22000" ssh-rsa AAAAB5...21S== tunnel="0",command="sh /etc/netstart tun0" ssh-rsa AAAA...== jane@example.net restrict,command="uptime" ssh-rsa AAAA1C8...32Tv== user@example.net restrict,pty,command="nethack" ssh-rsa AAAA1f8...IrrC5== user@example.net no-touch-required sk-ecdsa-sha2-nistp256@openssh.com AAAAInN...Ko== user@example.net
SSH_KNOWN_HOSTS FILE FORMAT
/etc/ssh/ssh_known_hosts および ~/.ssh/known_hosts ファイルには、すべての既知のホストの ホスト公開鍵が含まれている。 グローバルファイルは管理者が準備する必要があり (オプション)、ユーザ単位のファイル は自動的に維持される。ユーザが未知のホストに接続すると、その鍵がユーザ単位のファイルに追加される。
これらのファイルの各行には、次のフィールドが含まれる。マーカー(オプション)、ホスト名、キータイプ、base64エンコードされたキー、コメント。 各フィールドは空白で区切られる。
マーカーはオプションですが,存在する場合は"@cert-authority"のいずれかでなければならず,これはその行に認証局(CA)鍵が含まれていることを示す。また"@revoked"は,その行に含まれる鍵が取り消され,決して受け入れてはならないことを示す。 1つの鍵の行には1つのマーカーしか使ってはいけない。
Hostnames はカンマで区切られたパターンの一覧である ('*'と'?'はワイルドカードとして機能する)。各パターンは順番にホスト名と照合される。 sshd が HostbasedAuthentication を使用してクライアントを認証する場合、これは標準的なク ライアントホスト名となる。ssh がサーバを認証する場合、これはユーザが指定したホスト名、 ssh HostkeyAlias が指定されている場合はその値、 ssh CanonicalizeHostname オプションが使用されている場合は正規のサーバホスト名と なる。
ホスト名が否定されたパターンにマッチする場合、その行の他のパターンにマッチしても、 (その行では) 受け入れられない。 ホスト名やアドレスはオプションで '[' と ']' で囲み、その後に ':' と非標準のポート番号を続けることができる。
また、ホスト名をハッシュ化して保存し、ファイルの内容が公開された場合にホスト名やアドレスを隠蔽することもできる。 ハッシュ化されたホスト名は'|'文字で始まる。 ハッシュ化されたホスト名は1行に1つだけ表示でき、上記の否定演算子やワイルドカード演算子を適用することはできない。
keytype および base64 エンコードされた鍵は、ホスト鍵から直接取得する。これらは、例えば /etc/ssh/ssh_host_rsa_key.pub から取得できる。 オプションのコメントフィールドは行末まで続き、使用されない。
'#'で始まる行および空白行は、コメントとして無視される。
ホスト認証を行う場合、一致する行に適切な鍵があれば認証が受け入れられる。完全に一致する鍵、またはサーバが認証のために証明書を提示した場合、その証明書に署名した認証局の鍵のどちらかである。 鍵が認証局として信頼されるには、前述の "@cert-authority" マーカを使用する必要がある。
既知のホストファイルは、例えば関連する秘密鍵が盗まれたことが判明した場合などに、 鍵を失効させるための機能も提供する。 取り消された鍵は、鍵の行の先頭に"@revoked"という印をつけることで指定され、 認証や認証局として受け入れられることはなく、代わりに ssh から警告が出される。
同じ名前に対して、複数の行や異なるホスト鍵を持つことは許される (推奨はされない)。これは、異なるドメインのホスト名の短縮形がファイルに記述されている場合に、 必然的に発生するものである。 どちらのファイルからも有効な情報が得られる場合、認証は許可される。
これらのファイルの行は通常数百文字の長さになるので、ホストキーを手で入力するのは絶対にやめること。 ssh-keygen は ~/.ssh/known_hosts に対して、ホスト名にマッチするホストの削除や、 すべてのホスト名をハッシュ化した表現に変換するなどの基本的な自動編集も可能である。
ssh_known_hosts ファイルの例:
# Comments allowed at start of line closenet,...,192.0.2.53 1024 37 159...93 closenet.example.net cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....= # A hashed hostname |1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa AAAA1234.....= # A revoked key @revoked * ssh-rsa AAAAB5W... # A CA key, accepted for any host in *.mydomain.com or *.mydomain.org @cert-authority *.mydomain.org,*.mydomain.com ssh-rsa AAAAB5W...
FILES
- ~/.hushlogin
- PrintLastLogとPrintMotdをそれぞれ有効にした場合、最終ログイン時刻と/etc/motdの表示を抑制するために使用される。 Bannerで指定されたバナーの表示は抑制されない。
- ~/.rhosts
- このファイルは、ホストベースの認証に使用される (詳細については ssh を参照)。 マシンによっては、ユーザのホームディレクトリが NFS パーティション上にある場合、 sshd が root としてこのファイルを読み込むため、このファイルは world-readable である必要があある。 さらに、このファイルの所有者はユーザでなければならず、他の誰にも書き込み権限を与えてはならない。 ほとんどのマシンで推奨されるパーミッションは、ユーザが読み取り/書き込みができ、他のユーザがアクセスできないようにすることである。
- ~/.ssh/
- このディレクトリは、すべてのユーザー固有の設定と認証情報のデフォルトの場所である。 このディレクトリの内容全体を秘密にする一般的な要件はないが、推奨されるパーミッションは、ユーザーのための読み取り/書き込み/実行であり、他の人がアクセスできないようにする。
- ~/.ssh/authorized_keys
- このユーザーでログインする際に使用できる公開鍵(DSA、ECDSA、Ed25519、RSA)をリストアップする。 このファイルの形式は前述のとおりである。 ファイルの内容は機密性の高いものではないが、推奨されるパーミッションは、そのユーザーの読み取り/書き込みであり、他のユーザーがアクセスできないようにする。
- このファイル、~/.ssh ディレクトリ、またはユーザのホームディレクトリが他のユー ザによって書き込み可能な場合、不正なユーザによってファイルが変更または置換される可能性がある。 この場合、sshd は StrictModes オプションが "no" に設定されていない限り、このファイルの使用を許可しない。
- ~/.ssh/environment
- このファイルは、ログイン時に環境に読み込まれる (存在する場合)。 このファイルには、空行、コメント行('#'で始まる)、 name=valueの形の代入行しか入れることができない。 このファイルはユーザのみが書き込み可能であるべきで、他のユーザが読む必要はない。 環境処理はデフォルトでは無効になっており、PermitUserEnvironmentオプションで制御する。
- ~/.ssh/known_hosts
- ユーザがログインしたすべてのホストのうち、システム全体の既知のホスト鍵のリストにまだ含まれていないホスト鍵のリストが含まれている。 このファイルの形式は前述のとおり。 このファイルは、root/所有者のみが書き込み可能であるべきで、全体に読み取り可能である必要はないが、そうであるべきである。
- ~/.ssh/rc
- ユーザーのホームディレクトリにアクセスできるようになる前に実行される初期化ルーチンが含まれている。このファイルは、ユーザのみが書き込み可能で、他のユーザが読み取れる必要はない。
- /etc/hosts.allow
- /etc/hosts.deny
- tcp-wrappersが実施すべきアクセス制御はここで定義される。 さらなる詳細は hosts_access で説明されてる。
- /etc/hosts.equiv
- このファイルは、ホストベースの認証 (ssh 参照) 用である。 このファイルは root によってのみ書き込み可能であるべきである。
- /etc/ssh/moduli
- "Diffie-Hellman Group Exchange" 鍵交換方式で使用されるDiffie-Hellmanグループが格納されている。ファイルのフォーマットは moduli で説明されている。 このファイルに使用可能なグループがない場合、固定の内部グループが使用される。
- /etc/nologin
- このファイルが存在する場合、sshd は root 以外のログインを拒否する。 このファイルの内容は、ログインしようとする人に表示され、root 以外の接続は拒否される。 このファイルは、誰でも読み取り可能である必要がある。
- /etc/ssh/shosts.equiv
- このファイルは hosts.equiv と全く同じように使用されるが、rlogin/rsh によるログインを許可せずにホストベースの認証を可能にする。
/etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key
- これらのファイルには、ホスト鍵のプライベートな部分が含まれている。 これらのファイルは、root によってのみ所有され、root によってのみ読み取り可能で、他者からアクセスできないようにする必要がある。 これらのファイルが group/world-accessible である場合、sshd は起動しないことに注意すること。
/etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh/ssh_host_rsa_key.pub
- これらのファイルには、ホスト鍵の公開部分が含まれている。 これらのファイルは、世界中で読み取り可能で、rootのみが書き込み可能であるべきである。 これらのファイルの内容は、それぞれの秘密部分と一致しなければならない。 これらのファイルは実際には何のためにも使用されない。 ユーザの便宜のために提供され、その内容を既知のホストファイルにコピーできるようになっている。 これらのファイルは ssh-keygen を使って作成される。
- /etc/ssh/ssh_known_hosts
- 既知のホスト鍵のシステム全体のリスト。 このファイルは、組織内の全マシンの公開ホスト鍵を含むように、システム管理者が用意する必要がある。 このファイルの形式は前述したとおりである。 このファイルは、root/所有者のみが書き込み可能で、かつ、誰でも読み取り可能とすべきである。
- /etc/ssh/sshd_config
- sshd の構成データが含まれている。 ファイルの形式と構成オプションは sshd_config で説明されている。
- /etc/ssh/sshrc
- ~/.ssh/rc と同様に、マシン固有のログイン時の初期化をグローバルに指定するために使用することができる。 このファイルは、root によってのみ書き込み可能であり、かつ、誰でも読み取り可能である必要がある。
- /run/sshd
- chroot ディレクトリは、認証前の段階で sshd が特権分離を行う際に使用される。 このディレクトリは、いかなるファイルも含まず、root が所有し、group や world-writable でない必要がある。
- /run/sshd.pid
- 接続を待機している sshd のプロセス ID が含まれる (異なるポートに対して複数のデーモンが同時に実行されている場合、最後に起動したデーモンのプロセス ID が含まれる)。 このファイルの内容は機密情報ではなく、誰でも読むことができる。
SEE ALSO
scp, sftp, ssh, ssh-add, ssh-agent, ssh-keygen, ssh-keyscan, chroot, hosts_access, moduli, sshd_config, inetd, sftp-server
AUTHORS
OpenSSH is a derivative of the original and free ssh 1.2.12 release by Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt and Dug Song removed many bugs, re-added newer features and created OpenSSH. Markus Friedl contributed the support for SSH protocol versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support for privilege separation.
External Link
この記事は、Debianのmanpageの項目を翻訳一部改変しております。 |