アーカイブ:  « 2006年5月 | メイン | 2006年7月 »

2006年6月29日

NTPサーバーの奥深さ

NTPサーバーはインターネットの説明どおりに適当に設定すればうまく動くと思っていたが、複数台での構成で行う場合には、マスターのNTPサーバーだけが外部のNTPサーバーを見に行って、その他のサーバーはマスターのNTPサーバーを見に行くよう設定しようとすると少し考える必要がある。

まずマスターサーバー(192.168.0.2)はGPSの clock.nc.fukuoka-u.ac.jp
ntp.nc.u-tokyo.ac.jp
を見に行くように設定し、スレーブはマスターを見るようにntp.confで設定する。

マスターサーバーの設定状況
/usr/sbin/ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+clock.nc.fukuok .GPS. 1 u 127 128 377 21.200 -0.295 1.654
*ntp.nc.u-tokyo. .GPS. 1 u 3 128 377 1.651 0.102 0.348

*がついているものがマスター、+はスレーブとみなしている(stが同じ場合jitterが小さいほうを信頼する?)

スレーブサーバーの設定状況

/usr/sbin/ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.0.2 130.69.251.23 2 u 8 64 177 0.126 0.207 4.202

これを見れば分かるが、stが1つ大きくなっている。stが大きくなればなるほど、NTPサーバーの中係数が多くなって、信頼性が下がるので、NTPクライアントは信頼しないケースがある。

2006年6月27日

bonding

ディスクの冗長化ならRAID(ソフトウエア or ハードウエア)、電源の冗長化は二重化電源(ハードウエア対応)だが、ネットワークにおける冗長化はIEEE802.3adで定義されているリンクアグリゲーション(bounding)がある。boundingはkernel 2.4.12以降でサポートされている。

設定は簡単。
/etc/modprobe.conf

alias bond0 bonding
を記述して、
/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=static
BROADCAST=192.168.0.15
IPADDR=192.168.0.1
NETMASK=255.255.255.240
NETWORK=192.168.0.0
ONBOOT=yes
TYPE=Ethernet
冗長化したいネットワークディバイスの設定を
BOOTPROTO=static
BROADCAST=192.168.0.15
IPADDR=192.168.0.1
NETMASK=255.255.255.240
NETWORK=192.168.0.0

BOOTPROTO=none
#BROADCAST=192.168.0.15
#IPADDR=192.168.0.1
#NETMASK=255.255.255.240
#NETWORK=192.168.0.0 MASTER=bond0
SLAVE=yes
などにすればよい。

2006年6月26日

sambaによるパスワード共有

sambaでLinuxアカウントのパスワードと共有を行うにはどうしたらよいだろうか?
答えは、smb.confにてencrypt passwordsをYesに設定する。これはデフォルトなので、多くの環境においては問題ない。
問題は、パスワードの変更方法だ。passwdコマンドを使ってしまうと、Linuxアカウントのパスワードは変更されるが、sambaのログインパスワードは変更されない。
smbpasswdコマンドを代わりに利用することで、このコマンドがpasswdコマンドを実行してLinuxパスワードの変更を行ってくれる。
但し、注意事項があるので、こちらを参照されたい。
smb.confのsecurityオプションに関しても面白いドキュメントがあるので、こちらを参考に。

2006年6月15日

OP25B(Outbound Port 25 Blocking)

スパムメールによるネットワーク負荷を減らす取り組み。
プロバイダが加入者の動的IPから外部ネットワークのSMTPサーバーに25番ポートで接続できないようにフィルタリングする。これによってスパムメール配信業者は、固定IPを使わざるを得なくなるので事実上送信数を減らせる。
ただ、一般ユーザーが外部ネットワークのSMTPサーバーへ接続できないのは不便なのでサブミッションポート(587番ポート)への接続を行うことになる。
懸念材料としては、
・587番ポートで待ち受けしていないSMTPサーバーへは接続できなくなる方向に今後進んでいくので、メールサーバーを管理するサーバー管理者は587番ポートでの待ち受けを検討する必要がある。
・自宅サーバーを運営しているユーザーにおいてはSMTPサーバーの運用が事実上できなくなるので、固定IPアドレスで運用するように変更するか、OP25Bの取り組みを行わないプロバイダへ移行するか、587番ポートで待ち受けするSMTP中継サーバーの利用を検討しなければならない。


niftyのOP25B説明ページ

2006年6月14日

Paros

最新バージョンは、3.2.12である。
使ってみた感じでは、Script Insertionを中心的にテストを行っているようだ。実際に運用中のWebアプリケーションの不具合をチェックすることができたので結構使えると思う。

使い方はこちらを参考にされたい。

2006年6月11日

Webアプリケーションの脆弱性

Webアプリケーションには主に14の脆弱性が含まれるらしい。

・XSS(Cross Site Scripting)
不正なスクリプトを埋め込ませることでクッキー情報などを他サイトに送りつけ不正取得などを可能にする。
参考サイト:マルチバイトの落とし穴

・Script Insertion
リクエスト内容がそのまま表示されてしまう脆弱性を悪用し、Javascriptをはじめとするスクリプトを埋め込むことで掲示板などを訪れたユーザーのCookie情報を取得したり、フィッシングを仕掛けたりできる。

・SQL Injection
正規のSQLに不正なコードを埋め込むことで、異なる条件による問い合わせや、まったく予期されない問い合わせを可能にする攻撃手法。

・CSRF(Cross Site Request Forgeries)

・ヌルバイト攻撃
ヌルバイトは文字列の終了を示すC言語の仕様を悪用した攻撃手法。バイナリセーフでない場合には、ヌルバイト以降に不正なコードを仕込むことでコード内に含まれるチェック機構をバイパスできる。

・Directory Traversal
予期しないディレクトリへのアクセスを可能にする攻撃手法。チェックさえ正しくされていればこのようなことは起こらないが、上位ディレクトリへのアクセスを許してしまうことで、Webアプリケーション実行ユーザーが許可されているファイルを取得できてしまう。

・HTTPレスポンス分割攻撃

・インクルード攻撃
PHPが外部URIをインクルードできてしまうため、他サイトの悪意あるコードを実行できてしまう。includeファイルにユーザーが入力可能な文字列を含めてしまうということ自体がそもそも脆弱性である。

・eval利用攻撃

・外部コマンド実行攻撃

・ファイルアップロード攻撃

・セッションハイジャック
セッションキーを無理やり指定してプログラムを実行させ、実行してしまったユーザーのセッション情報を後ですべて取得する方法。

・スパムメール踏み台攻撃
メール送信フォームが任意のユーザーに送れる場合に利用可能な攻撃方法。メール送信フォーム自体がスパムメール送信装置となってしまう。


XSSとSQL Injectionはかなり有名だが、ほかにも多くの脆弱性が考えられるとは。
PHPサイバーテロの技法にはこれらがサンプルコードとともに掲載されているので非常に分かりやすい。

プログラマの三大美徳

ラリーウォール先生が著した三大美徳について。プログラマは、以下の気質を持つべきとされる。

・無精
無駄なことはしない。つまりめんどくさがり屋であること。めんどくさいと思えば、冗長化したコーディングは行わない。

・短気
短気は損気とも言うが、短気であることはより処理速度の速いコーディングをできるようになるものだ。ただ最近はマシンのコストも下がってきたので、マシン頼みにすることもできるわけだが、経済的にも環境的にもよくないだろう。

・傲慢
傲慢であれば他人にケチをつけられないコーディングをできるようになる。

いずれも参考ページをもとに自分なりの解釈でもって書いてみた。自分もラリーウォール先生の教えに近づけるよう努力したい。

2006年6月 5日

マスターブートレコーダーがとんだ場合は

Fedora Coreをインストールするとgrubというブートローダーがインストールされる。
このあとにWindowsでリカバリーをかけると、場合によってはMBRを初期化しないケースがある。
その場合、grubだけが起動してしまって、その次のステージに進むことができない。
このようなケースには次の方法を利用すると解決できた。
grub内で・・・
chainloader +1
boot

Windowsが立ち上がったあとで・・
Windows回復コンソールを使う。
fixmbrコマンドを利用してMBRを修復する。

次の文献を参考にされたい。
http://www.geocities.co.jp/SiliconValley-Bay/3897/grub/grub-3.html
http://support.microsoft.com/default.aspx?scid=kb;ja;314058

Linux 2GBの壁

Linuxのバックアップソフトcpioには2GB以上のファイルもしくは60kByte以上のユーザーIDをもつイメージを展開できない。
展開しようとすると「cpio: standard input is closed: Value too large for defined data type」のようなエラーが発生する。この理由は符号付きinteger(2の32乗/2-1)によるもの。
Fedora Coreでは3のパッケージ(cpio-2.5-7)でこの問題が発生するが4ではcpioのバージョンがアップグレード(cpio-2.6-7)されており、こちらでは問題が解決されている。

2006年6月 2日

富豪的?平民的?貧民的?

コーディングの仕方についてのもの。
最近はコンピュータリソースが昔ほどシビアでないので、多少無駄なことをやっても可読性を重視すべきだというのが平民的プログラミング。
平民的なプログラミングをする人間にとって見れば、組み込み系開発を行っている人間を貧民的と言う。ある意味古典的な職人芸だとも言う。
富豪的なプログラミングは、あきらかに無駄な処理を含むプログラミング。通常、logNのオーダーで処理すべきところをN2にするようなプログラム。
自分はどちらかといえば、平民的より貧民的に傾斜したプログラミングをするのであろう。