Provided by: manpages-ja_0.5.0.0.20161015+dfsg-1_all
名前
rshd — リモートシェルのサーバ
書式
rshd [-ahlnL]
説明
rshd サーバは、 rcmd(3) ルーチンのためのサーバであり、 結果として rsh(1) プログラムを実行す るためのサーバである。 このサーバは、信頼できるホストからの特権ポート番号に基づいた認証を使 い、 リモート実行機能を提供する。 rshd サーバは、``cmd'' サービスの仕様で指定されているポートで、 サービス要求を待つ。 services(5) を参照すること。 サービス要求を受信すると、以下の手順を開始する: 1. サーバは、クライアントの要求元ポートをチェックする。 要求元ポートが 512 〜 1023 の範囲 にない場合、 サーバは接続を中止する。 2. サーバは、ソケットからヌルバイト (`\0') を検出するまで文字を読み込む。 読み込んだ文字列 は、 ASCII 文字からなる 10 進数の数字として解釈される。 3. ステップ 2 で受信した数値が 0 でない場合、 標準エラー で使う 2 番目のストリームのポート として解釈される。 そして、2 番目の接続が指定されたポートでクライアントマシン上に生成さ れる。 この 2 番目の接続の要求元ポートも 512 〜 1023 の範囲である。 4. サーバは、クライアントの要求元アドレスをチェックし、 対応するホスト名を要求する (gethostbyaddr(3), hosts(5), named(8) を参照すること)。 ホスト名が特定できない場合、 ドット表記法によるホストアドレスが使われる。 ホスト名がサーバと同じドメイン名のものであ る場合 (ドメイン名の後ろから 2 つが同じ場合)、 または -a オプションが指定されている場 合、 ホスト名に対応するアドレスが要求され、 ホスト名とアドレスが対応しているかを確認す る。 アドレス確認が失敗した場合、 ``Host address mismatch.'' というメッセージを出し て、接続を中止する。 5. ヌル文字で終端された最大 16 文字のユーザー名を、 最初のソケットから取得する。 ユーザー 名は、 クライアント マシン上でユーザーを識別するために解釈される。 6. ヌル文字で終端された最大 16 文字のユーザー名を、 最初のソケットから取得する。 ユーザー 名は、 サーバ マシン上でユーザーを識別するために解釈される。 7. ヌル文字で終端されたシェルに渡されるコマンドを、 最初のソケットから取得する。 コマンド の長さは、システムの引き数リストの上限に制限される。 8. rshd は ruserok(3) を使ってユーザーを確認する。 このプログラムは /etc/hosts.equiv ファ イルと、ユーザーのホームディレクトリにある .rhosts ファイルを使う。 -l オプションは、 ruserok(3) に、ユーザー ``.rhosts'' ファイルに基づいた確認を行わせない (ユーザーがスー パーユーザーである場合と、 -h オプションが使われた場合を除く)。 -h オプションが指定され ない場合、 スーパーユーザーアカウントは、このサービスでは全く使われない。 -l オプションは、 システムにインストールされている特定のバージョンの libc で 動作するか を確認せずに信用すべきではない (また、libc を更新した後もテストすべきである)。 なぜな ら、libc のいくつかのバージョンでは rshd が使うフラグが信用できない。 また、 .rhosts システムの設計は、慎重にファイアウォールで囲まれた プライベートネット ワーク以外では、 「全くもって安全でない」ことに注意すること。 それ以外の環境では rshd を完全に無効にすべきである。 9. ヌル文字のバイトが最初のソケットから返され、 コマンド行がユーザーの通常のログインシェル に渡される。 このシェルは rshd によって確立されたネットワーク接続を拒否する。 トランスポートレベルのキープアライブメッセージは、 -n オプションが指定されない限り、有効であ る。 キープアライブメッセージを使うと、 クライアントがクラッシュしたり到達不能になった場合 に、 セッションをタイムアウトすることができる。 -L オプションを使うことで、 全ての正常なアクセスを syslogd(8) を経由して auth.info メッセー ジとしてログに記録できる。 また、全ての失敗したアクセスを auth.notice としてログに記録でき る。
返り値
以下にリストしたもののうち最後のものを除き、 全ての診断メッセージを最初のソケットを使って返 した後、 全てのネットワーク接続を閉じる。 エラーは、先頭に値 1 のバイトをつけることで示され る (ログインシェル実行前の全てのステップが正常に完了した場合、 上記のステップ 9 で 0 が返さ れる)。 Locuser too long. クライアントマシン上のユーザー名が、16 文字を超えている。 Ruser too long. リモートマシン上のユーザー名が、16 文字を超えている。 Command too long. 渡されたコマンドラインの長さが、(システムで設定された) 引き数リストのサイズを超えて いる。 Remote directory. ホームディレクトリへの chdir コマンドが失敗した。 Permission denied. 上で説明した認証手続きが失敗した。 または、要求されたユーザー要求が存在しなかった (これらの条件は、故意に組み合わせた)。 Can't make pipe. 標準エラー に必要なパイプが作成できなかった。 Can't fork; try again. サーバによる fork が失敗した。 <shellname>: ... ユーザーのログインシェルを起動できなかった。 このメッセージは、 標準エラー に関係づ けられた接続を経由して返されるので、 フラグバイトが前に付かない。
関連項目
rsh(1), rcmd(3), ruserok(3)
バグ
ここで使われているユーザー認証手続きは、 クライアントマシンと接続媒体が完全であることを仮定 している。 これは安全ではないが、「オープンな」環境では便利である。 通信する全てのデータを暗号化する機能が提供されるべきである。 (Telnet のような) もっと拡張性のあるプロトコルが用いられるべきである。
翻訳者謝辞
この man ページの翻訳にあたり、 FreeBSD jpman project <http://www.jp.freebsd.org/man-jp/> に よる翻訳を参考にさせていただいた。