RSHD
Section: Maintenance Commands (8)
Index
JM Home Page
roff page
BSD mandoc
Linux NetKit (0.17)
 
名前
rshd
 - リモートシェルのサーバ
 
書式
rshd
[-ahlnL
]
 
説明
rshd
サーバは、
rcmd(3)
ルーチンのためのサーバであり、
結果として
rsh(1)
プログラムを実行するためのサーバである。
このサーバは、信頼できるホストからの特権ポート番号に基づいた認証を使い、
リモート実行機能を提供する。
rshd
サーバは、``cmd'' サービスの仕様で指定されているポートで、
サービス要求を待つ。
services(5)
を参照すること。
サービス要求を受信すると、以下の手順を開始する:
- 
サーバは、クライアントの要求元ポートをチェックする。
要求元ポートが 512 〜 1023 の範囲にない場合、
サーバは接続を中止する。
 - 
サーバは、ソケットからヌルバイト (`\0') を検出するまで文字を読み込む。
読み込んだ文字列は、
ASCII
文字からなる 10 進数の数字として解釈される。
 - 
ステップ 2 で受信した数値が 0 でない場合、
標準エラー
で使う 2 番目のストリームのポートとして解釈される。
そして、2 番目の接続が指定されたポートでクライアントマシン上に生成される。
この 2 番目の接続の要求元ポートも 512 〜 1023 の範囲である。
 - 
サーバは、クライアントの要求元アドレスをチェックし、
対応するホスト名を要求する
( gethostbyaddr(3)
 
hosts(5),
named(8)
を参照すること)。
ホスト名が特定できない場合、
ドット表記法によるホストアドレスが使われる。
ホスト名がサーバと同じドメイン名のものである場合
(ドメイン名の後ろから 2 つが同じ場合)、
または
-a
オプションが指定されている場合、
ホスト名に対応するアドレスが要求され、
ホスト名とアドレスが対応しているかを確認する。
アドレス確認が失敗した場合、
``Host address mismatch.'' というメッセージを出して、接続を中止する。
 - 
ヌル文字で終端された最大 16 文字のユーザー名を、
最初のソケットから取得する。
ユーザー名は、
クライアント
マシン上でユーザーを識別するために解釈される。
 - 
ヌル文字で終端された最大 16 文字のユーザー名を、
最初のソケットから取得する。
ユーザー名は、
サーバ
マシン上でユーザーを識別するために解釈される。
 - 
ヌル文字で終端されたシェルに渡されるコマンドを、
最初のソケットから取得する。
コマンドの長さは、システムの引き数リストの上限に制限される。
 - 
rshd
は
ruserok(3)
を使ってユーザーを確認する。
このプログラムは
/etc/hosts.equiv 
ファイルと、ユーザーのホームディレクトリにある
.rhosts
ファイルを使う。
-l
オプションは、
ruserok(3)
に、ユーザー ``.rhosts'' ファイルに基づいた確認を行わせない
(ユーザーがスーパーユーザーである場合と、
-h 
オプションが使われた場合を除く)。
-h
オプションが指定されない場合、
スーパーユーザーアカウントは、このサービスでは全く使われない。
-l
オプションは、
システムにインストールされている特定のバージョンの libc で
動作するかを確認せずに信用すべきではない
(また、libc を更新した後もテストすべきである)。
なぜなら、libc のいくつかのバージョンでは
rshd
が使うフラグが信用できない。
また、
.rhosts
システムの設計は、慎重にファイアウォールで囲まれた
プライベートネットワーク以外では、
「全くもって安全でない」ことに注意すること。
それ以外の環境では
rshd
を完全に無効にすべきである。
 - 
ヌル文字のバイトが最初のソケットから返され、
コマンド行がユーザーの通常のログインシェルに渡される。
このシェルは
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/>
による翻訳を参考にさせていただいた。
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
 - 返り値
 - 
 - 関連項目
 - 
 - バグ
 - 
 - 翻訳者謝辞
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 16:46:45 GMT, November 24, 2023