クライアントからの接続依頼を受けて、入出力をネットワーク経由で行なう プログラムをネットワークサービスデーモンという。 サービスデーモンのうち、つねに起動していて直接クライアントからの 接続を待ち受けするものと、接続要求が発生してから起動されるものの 2つがある。
簡単なプログラムを作成し実際にサービスデーモンとして動かしてみる。
標準入力から1行読み取り、その行に "GET" が含まれれば Hello と、そうでなければ "Bye bye" とメッセージを出すだけのものを作る。
#!/usr/bin/env ruby cmd = gets if /GET/ =~ cmd then puts "Hello!" else puts "Bye bye" end
これを保存し chmod +x で実行属性をつけた後、 自分専用のポート番号でサービスデーモンとして起動する。 tcpserver コマンドを使うと標準入出力を使うだけのプログラムを ネットワークサービスデーモンプログラムに転換できる。
hostname # このホスト名を覚えておきブラウザでアクセスするときに使う chmod +x server.rb ./server.rb # 一度試しに起動してみる tcpserver 0 ポート番号 ./server.rb
※ポート番号 の部分は学籍番号の3桁目から7桁目を指定する。
例: C1234567 → 23456
tcpserverプログラムが起動したら、Webブラウザで自分の指定した ポート番号にアクセスしてみる。
http://ホスト名:ポート番号/
ホスト名の部分は上記 hostname コマンドの実行結果(ピリオドより前)を 入力する。
クライアントから特定のポートに接続要求が来たことを検知して、 対応するネットワークサービスデーモンを起動するデーモンを スーパーデーモンといい、代表的なものとして inetd, xinetd, tcpserver がある。
セキュリティ上の問題から、悪意あるホストから 特定のネットワークサービスに対する接続を拒否する必要が出ることがある。 スーパーデーモンには特定のクライアントアドレスに対して接続拒否したり、 最大同時接続数を制限したりする機能がある。
伝統的なスーパーサーバ。/etc/inetd.conf
から定義を読み込む。
アクセス制御を行なう tcpwrapper のライブラリ(libwrap)を 組み込んだinetd。PC-Unixでは一般的。
Linuxで主に使われている改良版inetd。
高速大量のアクセス制御機能を持つスーパーサーバ。1つの tcpserverプログラムで1つのネットワークサービスデーモン起動を 受け持つ。
リモートホストとの通信全般を暗号化できるのがSSHである。 リモート管理をするには必須ツールである。
ssh [オプション] リモートホスト [リモートコマンド]
覚えておくべきオプション -l, -C, -p, -A, -a, -f, -X, -x, -o,
-L, -R
。
-L と -R でポートフォワードを行なうことで、様々なサービスを 暗号化トンネルに通すことができる。
例1: リモートホスト rem で上がっているSMTPサービス(25 番ポート)へローカルホストの10025番ポートをフォワードする。
% ssh -L 10025:rem:25 rem
例2: ローカルホストで上がっているPOPサービス(110 番ポート)へリモートホスト rem2 の10110番ポートをフォワードする。
% ssh -R 10110:localhost:110 rem2
リモートホスト間でファイルの同期を取るツールである。 ホスト間の通信にSSHを利用するため、 リモートバックアップ、リモートコピーを安全に行なうことができる。
-L オプションに与えるホスト名はリモートホストから見たホスト名、 -R オプションに与えるホスト名は、ローカルホストから見たホスト名。
覚えておくべきオプション -a, -v, -z, -H, -x, --delete,
--exclude
。
例: ローカルホストの ./foo
ディレクトリを
リモートホスト rem の ~/bak/foo
と同期させる。
% rsync -azH --delete foo rem:bak