- ベストアンサー
inetdとTCP Wrapperについて
inetd及びTCP Wrapperは「inet.conf」「hosts.allow」「hosts.deny」の設定ファイルを参照してアクセス制御を行うとの事ですが、ここでいくつかの疑問があります。 (1)上記の3つのファイルを編集後、設定を反映させるにはデーモン等の再起動が必要かどうか。 (2)hosts.allow及びhosts.denyに記述した内容は、inetを経由しないサービスについても有効かどうか。 (3)inetd経由のデーモンはどのタイミングで停止するのか。 (1)についてですが、実験の結果、ファイルを編集後にすぐに反映される事はありませんでしたので、再起動などの作業が必要だと思いました。inetdを再起動しても反映されないようでしたので、killall -HUP inetd というコマンド(ネットで調べました)を行った所、反映されたようでした。この作業が正しいかどうか分かりませんので、ご意見頂きたいと思います。 また、killall のオプションである「-HUP」が何を示すのか分かりませんので、ご教授ください。 (2)についてですが、inetd.confに記述してあるサービスについてはhosts.allow及びhosts.denyの設定に従ってアクセス制御されている事は間違いないようです・・・が、inetdを経由しないサービスについてはアクセス制御されていないような気がします。inetd.confに記述していないサービスもアクセス制御の対象になるとも聞いた事がありますので、この点もご教授いただきたいと思います。 (3)についてですが、inetd経由でサービスを受ける場合には、そのサービスのセッションを確立後にデーモンが起動すると思います(間違いでしょうか??)。例えば、ftpサービスをinetd経由で提供しているとして、他のマシンからFTP接続するとデーモンが起動する・・・その後、クライアントがFTPを切断してからどのくらいでftpデーモンは停止するのでしょう? 間違い等は指摘お願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> inetdの場合は「inetd restart」と「kill -HUP inetd」は > 同じ意味をなす、という理解で大丈夫でしょうか? 後者はより直接的に前者の動作をこなすものだと 思っておいてください。動作は同様になりますが 前者はいったんintedを停止し、起動するというプロセスを スクリプトで実行するのに対し、killコマンドは 現在起動しているjobに対し直接再起動する信号を送り 設定の読み直しを行います(リハッシュ)。 > libwrapd.aライブラリという言葉を始めて聞きました。 あいすみません、スペルミスです。libwrap.aライブラリです。 libwrap.aライブラリ、hosts.allow、hosts.deny この三つがTCPWrapperの実体です。 デーモンがコンパイルされる際にパスを指定しない (=組み込まない)のであれば制御は出来ません。inetd側で 制御させるように指定することは出来ます。通常 libwrap.aライブラリを組み込んでいないサービスに関しては そういった対策を施すことが多いです。 > 完了後に直ぐに切断するか、いくらか待つかと > いう点はどうでしょうか? う~ん、申し訳ありませんがこれは終了したのち すぐにソケットを閉じて終了されているだろう、としか 申せません。topコマンドなどでFTPプロセスを 確認してみてください。 推測ですが、FTPクライアント側で正常な 終了動作を行っていない場合、proftpd側の設定、 TimeoutIdle分だけ待った後に子プロセスを 消しているのかもしれません。
その他の回答 (4)
- entree
- ベストアンサー率55% (405/735)
> (1)上記の3つのファイルを編集後、設定を反映させるにはデーモン等の再起動が必要かどうか。 普通は不要だったような気がしますが・・・。というのも、inetd を使用した場合、tcpd (TCP Wrapper) 経由でデーモンが起動されるのは接続があった時点なので、接続があるまでは tcpd 自体、動作することはないわけですから。 ちなみに、kill -HUP inetd の -HUP (ハングアップ) は SIGHUP を表しています。 シグナルにはいくつかの種類があって、特によく使われるものとしては、 1 : SIGHUP 9 : SIGKILL (強制終了) 15 : SIGTERM (kill コマンドのデフォルト) があり、詳細については、/usr/include/signal.h から include されているファイルを見てください。(たとえば、Red Hat Linux の場合は /usr/include/bits/signum.h で定義されています) また、kill -HUP は kill -1 と書いてもかまいません。 > (2)hosts.allow及びhosts.denyに記述した内容は、inetを経由しないサービスについても有効かどうか。 TCP Wrapper をはじめとする hosts.allow、hosts.deny に対応しているアプリケーションは、これらのファイルを参照しますが、それ以外のアプリケーションは当然ながらこれらのファイルを参照しません。 > (3)inetd経由のデーモンはどのタイミングで停止するのか。 アクセスを受けた時点で接続され、切断された時点で停止します。クライアントが終了するとき、オープンしたソケットをクローズするのが普通なので・・・。
お礼
回答ありがとうございます。 シグナルの件は非常に参考になりました。 (2)に関して TCP Wrapper に対応しているかどうかを判断するざ材料は何でしょうか?また、後から対応するように追加する事はできないのでしょうか? (3)に関して 回答者の方々の意見がほぼ一致しているのがこの問題ですが、私の勘違いかもしれません。私が疑問に思ったのは、以下の手順を行った後です。 1.クライアントからサーバへSSHで接続する 2.proftpdをinetd経由で動作させるように設定する 3.クライアントからFFFTPで接続する 4.FFFTPを切断する 5.接続しているSSHから、psコマンドでプロセスを表示させてみる この手順で、プロセスを表示させると、FFFTP切断後もproftpdが動作していました。ポートも21が開いていました。以上の点から、質問したような疑問を抱いた次第です。
- Liqueur
- ベストアンサー率51% (52/101)
(1) inetdまたはxinetdのトップレベルの設定ファイル及び 各サービスの設定ファイルの変更を行った場合、デーモンの 再起動が必要となります。killまたはkillallは信号を 送るコマンドで、その信号の強さは様々な種類があります。 kill -lかman kill、man signalなどで確認してみて ください(たとえば、何も引数を与えない場合に実行 されているのは15番のTERMですし、shutdown(halt)の 際にもkill信号が送られています)。kill -1 または kill -HUP でterminal line hangup、デーモンプロセスの 場合は再起動の動作になります。inetdの場合も同様で、 SIGHUPを受けとると、inetd は設定ファイルを再度 読み込ます。この際にサービスを追加・削除・変更も出来ます。 また、hosts.allowとhosts.denyの設定は、記述後 即座に適用され、サービスの再起動などは不要です。 (2)hosts.allow及びhosts.deny(TCP Wrapper)で 制御出来るサービスには、inetd経由のサービス、ssh、 portmapperにより提供されるサービス、加えてsftpdが あります。TCP Wrapperはlibwrapd.aライブラリで 提供され、TCP Wrapperにより制御を行いたいサービスは コンパイルオプションとしてlibwrap.aライブラリへの パスを指定することでTCP Wrapperによる制御が可能と なります。つまり、inetdを経由しないサービスも 対象になるということです。 (3)はサービスの完了後またinetdがソケットを監視します。 inetd独自のログタイプの設定にlog_on_success時に 記録できるDURATIONがサービスの継続時間になりますから、 そちらを確認すると正確な時間が割り出せると思います。
お礼
回答ありがとうございます。 (1)に関して >kill -1 または kill -HUP でterminal line hangup、デーモンプロセスの場合は再起動の動作になります。 inetdの場合は「inetd restart」と「kill -HUP inetd」は同じ意味をなす、という理解で大丈夫でしょうか? (2)に関して libwrapd.aライブラリという言葉を始めて聞きました。パスを指定する事でTCP Wrapperによる制御が可能と ななる、との事ですが、パスを指定しない場合には、制御できないという事でしょうか? (3)に関して syslogにinetdのログを書き出してみれば、接続時間は分かりそうですね。xinetdの設定の仕方はWeb上にたくさん情報があるのですが、inetdはあまり多くないですね・・・。 >サービスの完了後またinetdがソケットを監視します。 完了後に直ぐに切断するか、いくらか待つかという点はどうでしょうか?
- notnot
- ベストアンサー率47% (4900/10358)
(1) inetd.confについてはinetdを再起動すれば反映されます。されなかったように感じたのは勘違いでしょう。 -HUP は通常は端末セッションの切断(HangUP)を意味します。例えばtelnetでログインしてviを使っている最中にネットが切れれば、vi とログインシェルに -HUPシグナルが送られ、各プログラムは終了します。 ただし、デーモンプロセスは端末を持たないため上記の意味での -HUPシグナルを受け取ることはありえません。つまり -HUPの意味が空いているのでそれを利用して、「設定ファイルを再読み込みする」という全く別の意味を与えることが多いです。整理すると、 ・通常プロセス→端末切断→終了 ・デーモンプロセス→設定ファイル再読み込み 行った作業は正しいです。 hosts.allow/denyについてはTCPwrapperが動作の都度読むはずなので特に対処はいらないでしょう。 (2) プログラムによるとしか言いようが無いです。あと、正しくはinetdがhosts.allow/denyを読んでいるわけじゃなくてinetdから起動されるTCPWrapperが読みます。TCPWrapperと無関係にこの2つのファイルを読むプログラムはあります。 (3) 「デーモン」とはサービスしていないときも稼動してサービス要求を待ちつづけるものを指します。したがって、inetdはデーモンですが、inetdから起動される各プログラムはデーモンとは呼びません。ソフトによっては設定で、(その1)デーモンとして起動 (その2)inetdから起動、といった区別があると思います。 クライアントがinetd.confに書いてあるポートに接続するとinetdは対応するプログラムを起動してそのクライアントとのセッションを渡します。その後はinetdはその処理に全く関知せず別のリクエストを待ちます。起動されセッションを受け取ったプログラムはセッションが閉じれば終了します。
お礼
回答ありがとうございます。 (1)に関して ・inetdは再起動すればinetd.confが反映される ・hosts.allow/denyはTCPwrapperが動作の都度読むので編集終了後に直ぐに反映される この2点でしょうか。 (2)に関して >TCPWrapperと無関係にこの2つのファイルを読むプログラムはあります。 どんなプログラムがTCPWrapperと無関係にファイルを読み込むか、といった事が書いてある文書はあるのでしょうか?
- anmochi
- ベストアンサー率65% (1332/2045)
(1)再起動はどうやりましたか? 停止してから起動しましたか? 場合によっては再起動というアクションが意味を成さず、停止→起動のアクションを行わなければならないものもあります。HUPは、ハングアップシグナルという意味で、大抵のプログラムではこのシグナルを受け取ると最初からプログラムを開始します。KILLはキルシグナル、INTはインタラプトシグナルです。シグナルで検索してみましょう。 (2)それは当然でしょう。hostsファイルを使うプログラムと使わないプログラムがあり、それはプログラム次第です。Windowsにもレジストリというデータ保存機構がありますが、使うソフトと使わないソフトがあります。ソフトの作成元に問い合わせるしかありません。 (3)前半はその解釈で問題ないと思います。後半は、これまたソフトによる、としか言えませんね。一般的には、セッション管理をInetdに任せる場合はクライアントから切断されたらさっさと終了するものが多いように思います。
お礼
回答ありがとうございます。 私が行ったのは、restartでした。 停止→起動と、再起動の違いは初耳でした。調べておきたいと思います。
お礼
ありがとうございます。 勉強させていただきました。