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