多数の無線 NIC を設定 209 HACK # 44 5-1 から 5-3 に、それぞれの場合について適切な設定を示す。 表 5-1 ホームネットワークで DHCP と WEP を使用 オプション名 セクション名 SSid authmode nwkey IP アドレス dhome myhome shared 0X123456789a dhclient を使用して IP アドレス、ネットマスク、 ムサーバを取得 表 5-2 ホームネットワークで静的な旧アドレスと WEP を使用 オプション名 セクション名 SSid authmode nwkey IP アドレス netmask ゲートウェイ ネームサーノヾ S home myhome shared 0X123456789a 192.168.1.21 255.255.255.0 192.168.1.1 24.204.0.4 、 24.204.0.5 表 5-3 姉妹の家で DHCP と WEP を使用 オプション名 セクション名 SSid authmode nwkey IP アドレス 値 dsister sisterhome shared 0X987654321a dhclient を使用して IP アドレス、 ムサーバを取得 ネットマスク、 ゲートウェイ、ネー ゲートウェイ、ネー スクリプトのコード ネットワーク設定スクリプトのコードを以下に示す。
HAC K # 38 180 ー 4 章バックアップ # tar czvf - /usr/home ー 55h rembackup@10.0.0.1 "cat 〉 genisis usr h0爬 . tgz" usr/home/ usr/home/dru/ usr/home/dru/. cshrc usr/home/dru/mail/ usr/home/mail/sent-mail Password : この tar コマンドは、圧縮した (z) バックアップを作成し ( ( ) 、その出力をファイル (f) に送 り、詳細情報を表示する ( v ) 。送り先のファイルとしてマイナス文字 ( - ) を指定しているが、 れは標準出力を意味する。こうすれば、標準出力をパイプで ssh コマンドに送ることができ る。バックアップをとるディレクトリ階層として、すべてのユーザのホームディレクトリが 入っている / us ツ home を指定している。 そのバックアップの結果を、パイプ (l ) を通して ssh に送る。 ssh はその出力を、 (cat を介 して ) remba ( kup ユーザのホームディレクトリの圧縮ファイル genisis usr ho 爬 . tgz に送る。筆 者は、このディレクトリにネットワーク上のバックアップを格納しているので、ホスト名 genisis とバックアップ自体の内容がわかるファイル名を付けた。 バックアップを自動化 以上で、ユーザのホームディレクトリのバックアップを安全にとることができるように なったので、こからスクリプトを作成できる。そのスクリプトは、例えば以下のように、と ても簡単だ。 # more /root/bin/backup #!/bin/sh # バックアップサーバに / usr / home のバックアップを送るスクリプト tar czvf - /usr/home ー ssh て emba ( kup@10.0.0.1 "cat 〉 genisis usr home. tgz" ただし、このスクリプトを実行するたびに、以前のバックアップを上書きしてしまう。そ うしたくなければ、バックアップファイル名の一部に日時を入れるとよい。 tar czvf - /usr/home ー ssh て emb 託 kup@10.0.0.1 "cat > \ genisis usr home. 、 date + % d. % m. % y 、 . tgz" こでは、バッククオートを使用して、 date コマンドの出力をファイル名に挿入した。バッ クアップファイルの名前に日、月、年をドットで区切りながら付けて、 genisis usr home. 21. 12.03. tgz といったファイル名になる。 結果に満足したら、そのスクリプトは ( ron で定期的に実行する作業の優れた候補になる。
HAC K # 63 512 Jan 22 12 : 37 bin/ 512 Jan 22 12 : 38 etc/ 512 Jan 22 12 : 37 lib/ 512 Jan 22 12 : 37 usr/ このスクリプトは、以下のようなディレクトリ構造を作成する。 chroot をテスト creating /usr/home/rembackup/incoming directory f0 て uploading files ls: /lib/libnss compat*: N0 such file or directory lnstall f0 て what username? backup /usr/home/rembackup/ enter the home directory you wish t0 set for this user: afterwards, it will chdir t0 incoming. when scponly chroots, it will only chroot t0 chroot path and set the home dir t0 / ( h て 00t path//incoming f0110WS : can specify this when you specify the user's home directory as automatically change t0 this incoming subdirectory upon login' you the scponly user can write int0. if you want the scponly user t0 f0 て this reason, an 'incoming" subdirectory will be created that cannot subvert the . ssh configuration parameters. by the scponly user. this is important so that the scponly user please note that the user' s home directory MUST NOT be writable Next we need t0 set the home directory for this scponly user. # . /setup chroot. sh # chown + x setup ( h て 00t. sh # cd wo て k / 5 ( ponly - 3.8 / 引 6 ー 6 章システムのセキュリティ # 15 -1 /usr/home/rembackup total 10 drwxr-xr-x 2 て 00t wheel drwxr-xr-x 2 root wheel drwxr-xr-x 2 backup wheel drwxr-xr-x 2 root wheel drwxr-xr-x 7 root wheel 512 Jan 22 12 : 38 incoming/ # 15 -1 /usr/home/rembackup/bin/ total 1868 -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x -rwxr-xr-x 1 て 00t 1 て 00t 1 て 00t 1 て 00t 1 root 1 root 1 root 1 て 00t 1 て 00t wheel wheel wheel wheel wheel wh eel wheel wheel wheel 88808 Jan 22 12 : 37 chmod* 14496 Jan 22 12 : 37 ech0* 72240 Jan 22 12 : 37 ln* 567772 Jan 22 12 : 37 ls* 73044 Jan 22 12 : 37 mkdir* 437684 Jan 22 12 : 37 mv* 80156 Jan 22 12 : 37 pwd* 439812 Jan 22 12 : 37 rm* 69060 Jan 22 12 : 37 rmdir*
ワンタイムバスワードを使用 157 HAC K # 33 レスポンスを生成 現在のカウント ・秘密のパスフレーズ パスワード計算器を使用するには、ユーザは以下の 3 つのことを知っておく必要がある。 ログインのときにエコーするのは、誰もがパスワードを盗み見ることができるので、通常 して、自分が入力したものを見ることができる。 に、 OTP チャレンジに応答することを要求される。 CEnter] キーを押せば、エコーをオンに FreeBSD 5.1 システムで OPIE を設定すると、そのシステムにログインしようとするたび Password [ech0 on] : LEAD ] 鮖 MUCH MADE NONE WRIT 0tp-md5 498 dh0391 ext . にこで CEnter] を押した ) Password ・ 0tp-md5 498 dh0391 ext login : dru 現れたカウントに一致するレスポンスを使用する。 な安全な場所にしまい込んでおくべきだ。次回にログインするとき、ログインプロンプトに のレスポンスは、次の 5 回分のワンタイムパスワードなので、どちらの場合も、財布のよう この出力をプリンタで印刷してもよいし、手作業でレスポンスを記録してもよい。これら 498 : LEAD JAG MUCH MADE NONE WRIT 497 : RENT ARM WARN ARC LICE DOME 496 : WICK BALI MAY EGO INK TOOK 495 : LYLE HOLD HIGH HOME ITEM MEL 494 : MEAN ADD NEON CAIN LION LAUD Enter secret pass phrase: Reminder: Don't use opiekey from telnet or dial-in sessions. Using the MD5 algorithm t0 compute response. % opiekey -n 5 498 dh0391 と、現在のカウントとシードを指定する。 レスポンスの一覧を生成するには、数値スイッチ ( - n ) を使用し、望ましいレスポンスの値 ることができる。 いと、誰でもレスポンスを計算することができるし、そのユーザのアカウントでログインす かし、そのユーザだけが自分の秘密のパスフレーズを知っていることが重要だ。そうしな ログインプロンプトのところで、チャレンジとして現在のカウントとシードが現れる。し
HACK # 9 use constant SKELDIR = > '/usr/share/skel' ・ PREFIX() . $dotfile ) ; 34 ー ] 章ユーザ環境のカスタマイズ # 15 /usr/home dru test このシステムには既存のユーザが 2 人しかいないので、カスタマイズした . cshrc をコピー するのは簡単だ。筆者は無精なので、 / usr / home と入力する代わりに ~ と入力することもある。 また、手作業で所有者を変更しなければならないことに注意してほしい。 # cp / て 00t /. ( sh て ( Ndru/ # chown dru ~ d て u /. ( sh て ( # cp / て 00t /. ( shr ( ætest/ # chown test ætest/. cshrc システムにすでに多数のユーザが存在する場合、おそらくスクリプトを書いたほうが望ま # 自分のシステムに合わせて以下の定数を変更すること - ファイルの所有者を変更 - テフォルトファイルをユーザのディレクトリにコピー # copydotfiles. pl #!/usr/bin/perl -w しいだろう。例えば以下のようなスクリプトを作成すればよい。 use Fi1e: :Copy; use StriCt; use constant PREFIX use constant HOMEDIR = 〉 '/usr/home' ・ my $source = catfile( SKELDIR(), for my $dotfile (@ARGV) for my $user ( get users() ) die "Usage: $ 0 く files> く t0 > く COPY>\n" unless @ARGV; use FiIe: :Spec: :Functions; = catfile( $user->{homedir}, my $dest if ()e $dest) warn "Skipping existing dotfile $dest.. next ; $dotfile ) ;
IP フィルタのルールセットをスクリプトで切り替え 7688 Jan 22 12 : 37 id* -xr-x 1 0t wheel xr-x 1 Ot wheel xr-x 1 て 00t wheel # 15 -1 /usr/home/rembackup/usr/bin/ - rwxr -rwxr- -rwxr- 7016 Jan 22 12 : 37 chgrp* total 48 7688 Jan 22 12 : 37 groups* total 8 # 15 -1 /usr/home/rembackup/usr/sbin/ -rwxr-xr-x 1 root wheel 22616 Jan 22 12 : 37 scp* SSH セッションの間にアカウントが使用できるのは、上記のコマンドだけだ。 -rwxr-xr-x 1 root wheel 7016 Jan 22 12 : 37 chown* ー 317 HAC K # 64 また、指定のユーザアカウントが作られていることも確認するとよい。 backup アカウント 次のステップ の ( は chroot を設定していることを示す。 このアカウントが使用できるのは scponlyc シェルに限られることに注意してほしい。末尾 &:/usr/home/rembackup//incoming:/usr/local/sbin/scponlyc backup:*:1015:1015::0:0:User \ # grep backup /etc/master. passwd については、次のようにして調べる。 H A C K ・一一ファイアウォールのルールセットが常に 1 つだけでは不十分だ 旧フィルタのル - ルセットをスクリプトで切り替え scponly のホームページ (http://www.sublimation.org/scponly/) ・ man scponly 参照 リモートバックアップを自動化」と組み合わせてみるとよい。 この Hack を、「 [Hack#381 ネットワークを越えて安全にバックアップ」および日 Hack # 39 ] べースの認証を設定する必要がある。 トアップすることを忘れてはいけない。アカウントにパスワードを設定するか、または鍵 ーで、認証方式をセッ 制限付きのアカウントを設定し、 SSH スクリプトでテストした ファイアウォールの管理者は、 ルールセットを作成するために、少し独創的な才能が必要になることを知っているだろう。 ネットワークセキュリティの必要性を最大限に反映した
HACK # 35 168 ー 4 章バックアップ hie てと実行してマニュアルページを見てほしい。 #!/bin/sh # 以下の 4 つのディレクトリのバックアップをとるスクリプト tar cvvpzf b00t. tar. gz /b00t tar cvvpzf etc. tar. gz /etc tar cvvpzf home. tar. gz /home tar cvvpzf usr 10Ca1 etc. tar. gz /usr/local/etc このスクリプトは、最初の例として役立つだろう。 ta 「には使い方がたくさんあ る。 man 1 tar と実行し、マニュアルページを注意深く読んで、自分の必要性を 満たすようにスクリプトを調整してほしい。 tar: Removing leading / from absolute path names # . /bkup このスクリプトを実行してアーカイプを作成する。 # chmod 755 bkup このファイルを実行可能に設定する。 drwxr-xr-x root/wheel drwxr-xr-x root/wheel -r--r--r-- root/wheel -r--r--r-- root/wheel ( 省路 ) in the archive. 10957 May 11 19 : 46 2002 boot/defaults/loader. conf 512 Jun 23 18 : 19 2002 boot/mbr 0 May 11 19 : 46 2002 boot/defaults/ 0 Jun 23 18 : 19 2002 b00t/ カイプファイルができあがる。 # 15 ー more bkup b00t. tar. gz etc. tar. gz home. tar. gz usr 10 ( al etc. tar. gz 手作業でシェルスクリプトをテストし、その結果に満足したら、定期的に実行したい日時 を on スケジューラに追加すればよい。 重要なのはバックアップの実装方法ではなく、定期的にバックアップをとることだ。デー タの削除や破壊が「起こるかどうか」が問題なのではない。「いつ」起こるかが問題なのであ る。これが、適切なバックアップが重要な理由だ。 スクリプトの実行が終了すると、選んだディレクトリごとに、 *. tar. gz という名前のアー
こみ箱ディレクトリを作成 % echo $PATH PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/Iocal/sbin:/usr/ 10ca1/bin:/usr/X11R6/bin:/home/dru/bin ます、簡単なコードから始めてみる。これは、筆者が Google で検索して見つけたスクリプ る。幸い、ごみ箱用のスクリプトは単純な 1 行で書くことができる。 けの単純なコマンドの場合もあれば、コマンド、変数、条件を複雑に組み合わせる場合もあ 3 行目以降に、スクリプトの本体、つまり実際に実行するコマンドが入る。これは、 1 行だ ある。 てしまうのだ。この理由から、スクリプトには機能を思い出せるような名前を付けるべきで クリプトをたくさん作成したときには特にそうであるが、驚いたことに、半年もたっと忘れ スクリプトにはコメントを書いておくべきだ。コメントを書くときは # 文字で始める。ス 筆者は Bourne シェルのスクリプトを使用している。 ラムを指定する。すべての Un ⅸシステムで利用できるのは Bourne シェル ( B シェル ) なので、 最初の行はスクリプトのタイプを示し、スクリプトを実行するときに用いるシェルプログ コマンドを実行 # スクリプトが何を実行するかを説明するコメント #!/bin/sh スクリプトには、少なくとも以下のような 3 種類の行を書くべきだ。 できる。 ディレクトリに格納するパーミッションを持っていないので、互いによい関係を保つことが の他のディレクトリに格納するパーミッションがないからだ。幸い、他のユーザは筆者の bin 筆者は、スクリプトを作成するたびに、 / home / d て u / bin に格納することにしている。パス上 % mkdir bin % cd がある。 探すわけではない。 bin はデフォルトでは存在しないので、あらかじめ作成しておく必要 能プログラムを探す。しかし、ホームディレクトリ / home / dru から直に実行可能プログラムを この出力によると、シェルは、 dru のホームディレクトリの bin サプディレクトリで実行可 29 HACK # 8 ごみ箱スクリプトのコード
NetBSD バッケージのビルドを自動化 ー 427 HACK # 87 表 8-2 pkg_comp の変数 DESTDIR NETBSD RELEASE REAL PKGSRC REAL DISTFILES REAL PKGVULNDIR DISTRIBDIR REAL SRC REAL PACKAGES SETS SETS X11 サンドボックスの場所。完全な NetBSD システムを格納するので、大量の ディスクが必要になる。この例では /var/chroot/pkg_comp/default を使用 する。 NetBSD のインストールセットの場所。ロ、 P サイトからダウンロードしたも のか、または build. sh pkg ( omp でビルドしたものを置く。実際のディレク トリは、設定した値に文字列 / bina て y / sets を追加したパスになる。そのディ レクトリに SETS 変数と S ETS X11 変数のリストに入っているファイルがある。 この例では /home/NetBSD/NetBSD-1.6.2/i386 を使用する。 サンドボックスに展開する NetB SD のバージョン。このバージョンは pkgtools/libkver と互換性のあるものでなければならない。この変数に no を設定すると、 pkg ( omp はビルドシステムとサンドボックスシステムが同じ バージョンだと仮定する。この例では 1.6.2 を指定する。 pkgsrc の distfiles の場所。この例では /home/NetBSD/distfiIes を使用する。 ノヾイナリバッケージのインストール先。この例では /home/NetBSD/packages/ 1.6.2 を使用する。 システム上の pkgsrc ツリーの場所。この例では /usr/pkgsrc を使用する。 システム上の NetBSD ソースツリーの場所。この例では / usr / src -1.6 を使 こでは 1.6.2 をビルドするし、ビルドマシンでは最新バージョン 用する。 を動かしているので、 /usr/src にしてはいけない。 サンドボックスの中に取り出す NetBSD セットのリスト。デフォルト値を変 更してはいけない。 サンドボックスの中に取り出す X11R6 セットのリスト。 XWindowSystem の パッケージをビルドしたくなければ、この変数の値を no に設定する。ただ し、デフォルトのリストを変更しないほうがよい。この例ではサーバに X WmdowSystem をインストールすることはないと仮定して、 no を指定する。 自分のシステムで pkg-vulnerabilities ファイルがある場所。この例では /usr/pkg/share を使用する。 audit-packages を使用していない場合は USE AUDIT PACKAGES に no を設定する。 audit-packages があれば既知のセ キュリティ問題のあるパッケージをインストールしなくてすむので、 audit- packages を使用することを強く勧める。 こで、ビルドしようとしているパッケージについて、コンパイル時の最適化を有効にす る。 CF LAGS 変数と CXXFLAGS 変数を変更するときは設定ファイルがシェルスクリプトだという ことを思い出してほしい。そして、値を引用符で囲むことを忘れないでほしい。
HACK 368 ー # 74 法 手 な 度 高 7 # perl -wc batcher; perl -wc cleantmp; perl -wc copier おそらく足りない依存関係は 10 : : S 0 c k et : : M u lt i ( a s t だけだろう。このモジュールを FreeBSD システムの /usr/ports/net/p5-IO-Socket-Mu1ticast からインストールするか、 CPAN サイト (http://www.cpan.org/) から入手する。 次に、標準のログと平行して batcher にもログを送るように、 httpd.conf を設定する。 batcher のコマンドラインに、インスタンス (site 、 virtual 、 secure) とログのタイプ (access 、 error 、 ssl ) を指定しなければならないので注意してほしい。 LogFormat "%h % 1 %u %t \ " % ハ " %>S %b \"%{Referer}i\" "%{User-Agent}i\" \ \"%{C00kie}i\" %v" full CustomLog " l/home/www/bin/batcher site access" full " l/home/www/bin/batcher site e Ⅱ 0 て " ErrorLog 自分の必要性や、ログを要約するソフトウェアの必要性に応じて、ログに記録すべき情報 を LogFormat ディレクテイプで調節するとよい。 最後に Apache を再起動し、 batchers がバッチを作成していることを確認する。 # apachectl configtest # apachectl graceful # cd $ home / 10g5 / # 15 tmp batcher の各インスタンスことにエラーログファイルがあることを確認 # 15 wo ⅸ / 0 batcher の各インスタンスことにバッチがあることを確認 # 15 save/0 5 分のバッチ間隔の後で、保管用ディレクトリにバッチが移動した ことを確認 # 15 wo て k / 0 そして、新しいバッチが作られたことを確認 ログホストを準備 最初に、ログを受け取る 10g ユーザを作成し、ホームディレクトリを用意する。 10g ユーザ になり、 Web サーバから公開鍵を ~10g/. ssh/authorized keys2 にコピーする。次に、 10g ユー ザとして、ログ収集ツールで使用するディレクトリを作成する。 # su 10g % cd ~ 10g % mkdir -p bin web/{work, save}/{o,l} web/tmp web/{current,archive} 設定をテスト Web サーバ上で Web サーバのユーザになり、 ssh を使って手作業でログホストにログイン し、 authorized keys2 の設定を確認する。