次のページ 前のページ 目次へ

8. ネットワークサーバ

ほとんどのネットワークサーバはある種のサブプロセスを実行しません。 セキュリティ的な理由からそれらのパスは最小限に押さえられています。

重要な例外はネットワークからシステムにログインできるようにする サービスについてです。この章では、このケースにおける環境とは何かについて 解説していきます。rshを使ってリモートマシンでコマンドが実行されると sshで実行されるものとは違うパスになっていることなどを見ていきましょう。 同様にrlogin、telnet、sshでのログインの違いなども見ていきます。

8.1 inetd

ほとんどのネットワークサーバーは"常時リクエストを待っているプロセス "を持っていません。この動作はinetdと呼ばれるInternet super serverに 一括して委任(delegated)されています。inetdは定義されたネットワークポートを 全て監視し、リクエストがあったときに適当なサーバーを開始します。この振る舞い は/etc/inetd.confで定義されています。

inetdはシステム開始時のスクリプトから起動されていて、initプロセスの パスを継承しています。このパスを修正する必要はありません。またinetdから 開始する全てのサーバはinitパスを使います。そのようなサーバの例はimapdIMAP post office protocolのサーバといったものです。

inetdプロセスのその他の例はtelnetd, rlogind, talkd, ftp, popd そしてhttpサーバなどです。

実際のサーバーを開始するために別々にtcpdプログラムを使う場合、inetdの使い方は 複雑です。tcpdは実際のアプリケーションを開始する前にそのセキュリティ をチェックするというプログラムで、パスに影響は与えません(確認していません)。

8.2 rsh

rshデーモンは_PATH_DEFPATH(/usr/include/paths.h)からのパスを セットします。これは通常ユーザーとしてloginプログラムが使うのと同じパスです。 rootは通常ユーザーと同じパスを得ます。

実際にはrshdはコマンドラインで

shell -c command-line

とします。 またシェルはログインシェルではありません。/etc/passwdに書かれて いる全てのシェルはコマンドラインで与えられる-cオプションをサポート しているほうが望ましいです。

8.3 rlogin

rloginは実際のログイン処理を行うためにloginを実行します。rloginを使って ログインするとloginと同じパスを得ます。Linuxコンピュータにログインするための その他の方法ではloginを使いません。rshとの違いに注意して下さい。

実際に使うloginコマンドは

login -p -h host-name user-name

です。-pオプションはHOME, PATH, SHELL, TERM, MAIL, LOGNAME といった環境変数以外の環境を保存するオプションです。 -hはログインするリモートホストの名前を指定するオプションです。

8.4 telnet

telnetはrloginに似ています。telnetはloginプログラムを使っていて コマンドラインも同じような方法で実行されます。

8.5 ssh

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で問題を生じます。


次のページ 前のページ 目次へ