インターネットスーパーデーモン inetd inetd(ネットワークデーモン) inetdの役割 inetdのシステム的な構造 inetdの機能(ポート監視) inetdの機能(入出力リダイレクト) inetdの設定ファイル/etc/inetd.conf /etc/inetd.conf (<flags> ・ <user>) my_echod.plの作成 my_echod.plの起動 inetdの利点 inetdの欠点 インターネットスーパーデーモン inetd inetdの役割 ネットワークデーモン(inetd)は、 Linux起動時に生 成され、自律的に動作するプロセスである. inetdは、スーパーサーバ(super server)とも呼ばれ, ①ポートを監視して, ②クライアントからの接続要求があった時に、 ③ポートに対応したサーバプログラム(これを、ア プリケーションデーモンと呼ぶ)を自動的に起動し て, ④そのポートのサーバプログラムの入出力と、ク ライアントの入出力とを、自動的に接続する、 サーバプログラムのためのサーバプログラムである. インターネットスーパーデーモン inetd inetdのシステム的な構造 クライアント側のシステム サーバ側のシステム ポートに対応 した、サーバ プログラム クライアント プログラム scanf() inetd printf() インターネットスーパーデーモン inetd inetdの機能(ポート監視) アプリケーションデーモンがネットワークサービスの 実行のために必要とする、bind、listen、accept など のポート監視作業を、inetdが、共通に受け持ってく れる。 inetdの働きにより、ポート監視の目的のために幾つ ものアプリケーションデーモンが常に動いている必 要がなくなる。 アプリケーションデーモンは必要な時にだけ動作す る様になる(プロセスの実稼動効率がよくなる)。 インターネットスーパーデーモン inetd inetdの機能(入出力リダイレクト) クライアントとアプリケーションデーモンのデータ通信 を、入出力リダイレクトにより、 inetdが、自動的に中 継する。 inetdは、クライアントからの出力を、アプリケーション デーモンの標準入力(ie. scanf()システムコール)に、 中継(リダイレクト)する。 inetdは、アプリケーションデーモンの標準出力(ie. printf()システムコール)を、クライアントに中継(リダイ レクト)する。 インターネットスーパーデーモン inetd inetd の設定ファイル/etc/inetd.conf ftp の設定部分 # <service_name> <sock_type> <protocol> <flags> <user> <server_path> [<server_args> …] ftp stream tcp nowait root /usr/libexec/ftpd ftpd –l 上記の設定ではinetd が、①ポート25(これは、ftpの Well-Known-Portで、<service_name>と一致する)を 見張っていて 、②ポート25にクライアントからの接続 要求があると、③/usr/libexec/ftpd を実行する。 接続終了後の実際の通信は /usr/libexec/ftpdが FTP クライアントと行う(inetd経由のリダイレクト通信 を利用する)。 インターネットスーパーデーモン inetd /etc/inetd.conf (<flags> ・ <user>) <flags> /etc/inetd.conf に nowait とすると、inetd は サーバがクライ アントの 対応をしている間に新たな接続があると、並行して サーバを 起動する。 もし /etc/inetd.conf に nowait ではなく wait と書くと、 一度に ひとつのクライアントの相手しかできなくなる。 ひとつのクライアントが接続中の間に接続してきたクライア ントは、前のクライアントの接続が 切れるまで待たされる。 <user> 「root」は、サーバを root 権限で実行する ことを表す。 root 権限でむやみにサーバプロセスを動かすことは危険。 root 権限が必要ないプログラムは、弱いユーザ権限の nobody 権限などで動かす 。 インターネットスーパーデーモン inetd my_echod.plの作成 プログラム(my_echod.pl)は、inetd を利用した echo サーバです。 #!/usr/bin/perl $|=1; # バッファリングしない while (<STDIN>){ print "my_echod.pl: $_"; } プログラムは、これだけです。ソケットもポートも、面倒なことは なにも出てきません。 inetdが、クライアントからの出力を、サーバの標準入力に、ま た、サーバの標準出力をクライアントにリダイレクトしてくれる bind、listen、accept などの面倒なポート監視作業を受け持っ てくれる プログラムは、標準入力から読み込んで、それを標準出力に書 き出しているだけです。 インターネットスーパーデーモン inetd my_echod.plの起動 実際に動かすには、/etc/inetd.conf で、次の設定を有効にす る。(/path/ の部分には、 my_echod.pl の置いてあるディレクト リをフルパス表記 ) echo stream tcp nowait root /path/my_echod.pl echod そして、inetd の再起動を行う。 インターネットスーパーデーモン inetd inetdの利点 サーバプログラムが簡単に書ける。 bind・listen・accept などめんどうな接続作業は全て inetd がやってくれる。 フィルター型のコマンドプログラムが、サーバプログラ ムとして再利用し易い。 inetd経由のリダイレクト通信によって、クライアント からのデータは、サーバプログラムの標準入力に 送られる。 また、サーバプログラムが標準出力に書き出した データは、自動的にクライアントに送られる。 簡単なサーバ、例えばecho サーバなどは inetd の内 部に組み込まれている。 /etc/inetd.conf に internal と書いてあるものは inetd の内部のサーバが起動されることを表す。 インターネットスーパーデーモン inetd inetdの欠点 inetd を使った場合はコネクションが終了すると、サー バプロセスも終了する。 頻繁にアクセスがあるサーバの場合、inetd による サーバの実行/終了に 時間がかかる。 この結果、サーバの反応速度が遅くなる。 sendmail・httpd などinetd を利用せずに、自前でポー トの監視をしているサーバソフトウェアも 存在する。 sendmail や httpd は実行速度を重要視して、 素早 く反応できるようにしてある。
© Copyright 2024 ExpyDoc