ほとんどのネットワークサーバはある種のサブプロセスを実行しません。 セキュリティ的な理由からそれらのパスは最小限に押さえられています。
重要な例外はネットワークからシステムにログインできるようにする サービスについてです。この章では、このケースにおける環境とは何かについて 解説していきます。rshを使ってリモートマシンでコマンドが実行されると sshで実行されるものとは違うパスになっていることなどを見ていきましょう。 同様にrlogin、telnet、sshでのログインの違いなども見ていきます。
ほとんどのネットワークサーバーは"常時リクエストを待っているプロセス
"を持っていません。この動作はinetdと呼ばれるInternet super serverに
一括して委任(delegated)されています。inetdは定義されたネットワークポートを
全て監視し、リクエストがあったときに適当なサーバーを開始します。この振る舞い
は/etc/inetd.conf
で定義されています。
inetdはシステム開始時のスクリプトから起動されていて、initプロセスの
パスを継承しています。このパスを修正する必要はありません。またinetdから
開始する全てのサーバはinitパスを使います。そのようなサーバの例はimapd
やIMAP post office protocol
のサーバといったものです。
inetdプロセスのその他の例はtelnetd, rlogind, talkd, ftp, popd
そしてhttpサーバなどです。
実際のサーバーを開始するために別々にtcpdプログラムを使う場合、inetdの使い方は 複雑です。tcpdは実際のアプリケーションを開始する前にそのセキュリティ をチェックするというプログラムで、パスに影響は与えません(確認していません)。
rshデーモンは_PATH_DEFPATH(/usr/include/paths.h)
からのパスを
セットします。これは通常ユーザーとしてloginプログラムが使うのと同じパスです。
rootは通常ユーザーと同じパスを得ます。
実際にはrshdはコマンドラインで
shell -c command-line
とします。
またシェルはログインシェルではありません。/etc/passwd
に書かれて
いる全てのシェルはコマンドラインで与えられる-c
オプションをサポート
しているほうが望ましいです。
rloginは実際のログイン処理を行うためにloginを実行します。rloginを使って ログインするとloginと同じパスを得ます。Linuxコンピュータにログインするための その他の方法ではloginを使いません。rshとの違いに注意して下さい。
実際に使うloginコマンドは
login -p -h host-name user-name
です。-p
オプションはHOME, PATH, SHELL, TERM, MAIL, LOGNAME
といった環境変数以外の環境を保存するオプションです。
-h
はログインするリモートホストの名前を指定するオプションです。
telnetはrloginに似ています。telnetはloginプログラムを使っていて コマンドラインも同じような方法で実行されます。
sshはそれ自身のパス設定を持っています。sshがあるディレクトリを追加した
ディレクトリです。これは/usr/bin
がパスに2度出てくるということを
意味しています:
/usr/local/bin:/usr/bin:/bin:.:/usr/bin
パスには/usr/X11/bin
ディレクトリはありません。またsshコマンドによって
実行されるシェルはloginシェルではありません。こうして
ssh remotehost xterm
では全く動作しません。/etc/profile
あるいは/etc/csh.cshrc
に書かれていることはこれを変更できてしまいます。そこで絶対パス
/usr/bin/X11/xterm
と入力しなければなりません。
sshは/etc/environment
ファイルかたVAR=VALUE
フォーム
の環境変数を検索します。残念なことにこれはXFree86で問題を生じます。