月: 2005年10月

Nessusがクローズドソースにライセンスを変更

このニュースは随分前(10月はじめ)のアナウンスですが先週末知りました。

Nessusはセキュリティ脆弱性スキャナーとして最も人気が高いオープンソース製品(GPL2)です。現在はVersion2系が最新リリース版ですが、多くの機能、性能が向上しているとされているVersion3系のソースコードは公開されないようです。

Nessus 3 is major enhancement of the key components of the Nessus engine – the NASL3 intepreter has been rewritten from scratch, the process management has changed to reduce the overhead of executing a plugin (instead of creating NxM processes, nessusd now only creates N processes), the way plugins are stored has been improved to reduce disk usage, etc…

Nessus 3 also contains a lot of built-in features and checks to debug crashes and mis-behaving plugins more easily, and to catch inconsistencies early.

As a result, Nessus 3 is much faster than Nessus 2 and less resource intensive. Your mileage may vary, but when scanning a local network, Nessus 3 is on average twice as fast as Nessus 2, with spikes going
as high as 5 times faster when scanning desktop windows systems.

Nessusはセキュリティ確保の為のスキャナーとして利用されますが、個々の脆弱性を検査するプラグインには度々不備が見つかっています。中にはコマンド実行を可能とする物も少なくありません。Nessus3のエンジン部分は1から書き直され、Nessus3ではスキャン性能が向上し動作がおかしいプラグインをより容易く検知できるようになっているようです。

Nessus 3 will be available free of charge, including on the Windows platform, but will not be released under the GPL.

Nessus 3 will be available for many platforms, but do understand that we won’t be able to support every distribution / operating system available. I also understand that some free software advocates won’t want to use a binary-only Nessus 3. This is why Nessus 2 will continue to be maintained and will stay under the GPL.

To make things simple :

  - Nessus 2 : GPL, will have regular releases containing bug fixes
  - Nessus 3 : free of charge, contains major improvements

問題のNessus3がクローズドソース製品になってしまう、という部分です。要旨は次の通りです。

  • Nessus3はWindow版も含め無料で利用できる
  • Nessus3のライセンスはGPLではない
  • Nessus2とNessus3はほとんどのプラグインを共有する
  • Nessus2はGPL版としてメンテナンスされる

Nessus2のメンテナンスも継続されるようですが新しい機能を利用するにはNessus3が必要になるようです。

何故クローズドソースにライセンスを変更するか?という部分ですが作者(セキュリティ系の製品・サービスを提供しているらしい)競争相手との競争に負けないようにするためだそうです。ソースを公開すると競争相手に取り込まれてしまい…. と言った状況になっている(なる?)らしいです。

Nessus2とNessus3はオープンソースの新しいビジネスモデルとしても興味深い点が多くあります。これからどうなっていくか注目ですね。

PHPで記述されたnanoftpd

PHPで記述されたWebサーバ、nanowebが公開されたのは随分前で確かsoket関数に地雷が沢山埋まっている頃だったと思います。地雷にもめげずよく作ったものだ、と関心した事を覚えています。

PHPで記述されたFTPサーバ(nanoftpd)公開されていたんですね。PHPは使えるけどFTPは使えないサーバに便利かも知れないですね。

MySQL5リリース

#ちょっと遅いのですが自分用のメモとして。

10/24にMySQL5が正式リリースされました。

新しい機能として

  • ストアドプロシージャ
  • トリガ
  • カーソル
  • スキーマ
  • XAトランザクション

サポートされています。

FEDERATED Tablesと呼ばれる他のMySQLサーバのテーブルとリンクする機能も追加されたようですがこれはPostgreSQLのdblinkと同類の機能ですね。

dblink/
ここには2つの関数が提供されています。1つ(dblink())はリモートデータベースに 対して実行したいSQLのクエリーの結果をポインタを受け取るものです。引数を2つ (接続するデータベースを標準のlibpq形式で記述したものと実行したいSQL文)渡すだけで リモートデータベースから結果を受け取ることができます。もう1つはdblink()の結果から 各フィールドの結果を文字列で返すものです。構文や使用例は、このディレクトリにある README.dblinkを参照してください。

http://www.sraoss.co.jp/PostgreSQL/7.2/contrib.html

Wikiの場所を移動しました

前からWiki(http://www.ohgaki.net/wiki/)をhttp://wiki.ohgaki.net/に移動しようと思っていたのですがやっと移動しました。

Web管理者には珍しい話でも機能でもなんでもありませんが、新しいホストで前のコンテンツが表示できるようにした後、Apacheのmod_rewriteを使ってwww.ohgaki.netのバーチャルホスト設定に次の設定を入れるだけです。

RewriteEngine on
RedirectMatch ^/wiki/(.*) http://wiki.ohgaki.net/$1

引越はmod_rewriteで。

# 何故こんな事を書くかというと今日某ISPサイトのお知らせサービスに
# 登録したのですが登録後のリンクが切ていたので…
# ちなみにIISでも同様の事が可能です。

Weblog Usability: The Top Ten Design Mistakes

最近「ブログデザイン10の間違い」というページが結構人気らしい、原文は英語なので10項目だけ意訳するとこんな感じでしょうか?

  • 著者の略歴が無い
  • 著者の写真が無い
  • 本文の内容を推測できない投稿タイトル
  • リンク先が明示されていない
  • 古い人気投稿を埋もらせない
  • カレンダーのみのナビゲーション
  • 不定期な投稿
  • ごちゃまぜなトピック
  • 未来の上司に対して記述している事を忘れている
  • ブログサービスのドメイン名が入ったブログを使っている

少なくともb2evolutionがデフォルトで提供してくれている機能+最後の独自ドメインというのはクリア :)

PHPのlintモード

エラーハンドラでE_ERRORを処理できるようにして関数名などのタイポに対応できても、タイポによる構文エラーに対処できなければ意味が無いよね?と言う事でlintモードの紹介です。

随分前のPHPからlint(構文をチェックするモード)はあったのですがあまり使われていない(?)ような気がします。実際、かなり長い間壊れていた事もあります。最近のPHPのlintモードは壊れていないので-lオプションを使ってチェックすれば思わぬ構文エラーによるスクリプトの停止も免れます。

いくらエラーハンドラでエラーをwebmasterに通知していても構文エラーには無力です。特にアプリの新規作成時や大量の変更がある場合にはlintモードを使う方が良いでしょう。詳しくはWikiに書きました。

ユーザ定義エラーハンドラの拡張パッチ

最近のPHPはE_ERROR(未定義の関数呼び出しなどで発生)をユーザ定義エラーハンドラで処理できません。これはE_ERRORが発生した場合、必ずeixtを呼び出しスクリプトの実行を停止しないと誤作動する問題に対処した為です。

随分前(PHP 4.3がリリースされた頃)からこんな感じでパッチを書けばよいです、と紹介はしていたのですがWikiに書きました。よろしければご利用ください。ユーザ定義エラーハンドラに問題(E_ERRORが発生する等)が無ければE_ERRORでexitすれば問題は発生しないはずです。万が一、関数名をタイポしていてもエラーページを表示しwebmasterに通知する処理などをエラーハンドラに定義できるので有用です。

php内部でのmmapの使い方

遅ればせながらPHP 5.0.5使っていて直しているだろう、と思い込んでいたバグが直っていない事に気が付きました。

PHP内部のphp_stream_passthru()関数はreadfile()やfpassthru()関数に利用されているのですがmmapの使い方がいい加減です。PHP 4.3.xのバグレポートでreadfile()で大きなファイルが読めない旨のバグレポートがあったので全てのブランチで直っている、と思っていたのが間違いでした。

mmapは名前通りファイルをメモリにマップする関数です。メモリマップすることにより典型的なファイルI/Oコードに必要なバッファへのコピー、その後の出力、というステップがメモリからの読み出しと同時に出力、とバッファコピーが減るメリットがあります。

メモリにマップするので色々制限があります。特に32bitシステムでは小さいファイルしか(と言っても2GBくらいのファイルなら取り扱えますが)取り扱えない、メモリ圧迫する(2GBのファイルをマップすると、2GB mallocが失敗するなど)の問題があります。さらに比較的大きなファイルを実際に読み出すとスワップの嵐になるシステムも… 当たり前といえば当たり前の制限です。

と前置きしたのでPHP 5.0.5でどうなっていたかと言うと「mmapをサポートするシステムの場合、ファイル全体をマップする」ようになっています。当然前述のような問題が発生します。そこで2MB以上のファイルはmmapできないようにしています…

PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_operation_t mode, size_t *mapped_len TSRMLS_DC)
{
SNIP
/* For now, we impose an arbitrary 2MB limit to avoid
* runaway swapping when large files are passed thru. */
if (length > 2 * 1024 * 1024) {
return NULL;
}

別にこれ自体はそれほど悪い事(2MBなどと非常に小さい値にしている事は除いて)ではないのですがこのおかげでphp_stream_mmap_range()を利用する、恐らく、ほとんどの関数で2MB以上のファイルを正しく取り扱えなくなっているようです。

中途半端に使える物は使わない方が良いのでmmapを使わせないようにするには

– PHPのランタイムからはstreamのオプションでmmapを使わないよう全てのスクリプトで設定する(iniオプションが無い!)
– 次のパッチを当ててPHPをリビルドする

等として回避する必要があります。

diff -ur php-5.0.5.orig/main/streams/php_stream_mmap.h php-5.0.5/main/streams/php_stream_mmap.h
— php-5.0.5.orig/main/streams/php_stream_mmap.h 2004-02-20 17:22:12.000000000 +0900
+++ php-5.0.5/main/streams/php_stream_mmap.h 2005-10-23 10:23:56.492890384 +0900
@@ -62,7 +62,7 @@

/* Returns 1 if the stream in its current state can be memory mapped,
* 0 otherwise */
-#define php_stream_mmap_possible(stream) (!php_stream_is_filtered((stream)) && php_stream_mmap_supported((stream)))
+#define php_stream_mmap_possible(stream) 0

BEGIN_EXTERN_C()
PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_operation_t mode, size_t *mapped_len TSRMLS_DC);

きちんと直すの事も簡単(チャンク単位でmap, unmapを繰り返す)なのですがとりあえず情報として…

# この問題、開発者が理解してないかも…

アンチウィルスソフトには優先度制御が必須…

最近Windowsマシンとして使っているPCのHDDが壊れてHDD交換&再インストールしたのですがアンチウィルスソフト(Noton AntiVirus:以下NAV)プロセスの優先度を下げる為にインストールしていたAutoGearと言うプログラムはまだインストールしていませんでした。AutoGearはアンチウィルスソフトには必須かも知れませんね。

メールクライアントにはThunderbirdを利用しています。NAVがメールをスキャンしてくれるのは良いのですが一生懸命スキャンしすぎて他のプロセスが遅くなりすぎです。IMEさえまともに反応しなくなります。AutoGearをインストールしてccApp.exeの優先度を「低」に設定して一件落着です。しかし元々もう少しお手柔らかにスキャンするように設定しておいた方が良いような気がします。PentiumM 1.3GhzなのでそれほどCPUが遅い訳でもでも無いですが、スキャン時の遅さは耐え難い物があります。

VMware Playerを使ってみる

やっとVMware Playerがダウンロードできました。
Windowsバイナリ、Linux RPM、Linux tarがダウンロードできるようになっていました。
マニュアルのページを見るとPDFマニュアルには日本語版もありましたがVMware Playerの日本語マニュアルはまだのようでした。

VMwareのWebサイトによると基本機能(Key Features)としては以下であるとしています。

* Run any virtual machine. Run virtual machines created by VMware Workstation, GSX Server or ESX Server. VMware Player also supports Microsoft virtual machines and Symantec LiveState Recovery disk formats.
* Revert to previous state. Revert virtual machines to a previous ‘clean’ state within seconds.
* Access host PC devices. Use host CD/DVD drives, network adapters, and plug-and-play USB devices.
* Copy and paste. Copy text and files between the virtual machine and the host PC.
* Drag and drop. Drag and drop files between a Windows host PC and a Windows virtual machine.
* Shared folders. Use shared folders to easily share files between virtual machine and the host PC.
* Multiple networking options. Virtual machines can share or obtain new IP addresses or be isolated from the network and host.
* 32- and 64-bit host and guest operating system support. Run a wide variety of virtual machines containing 32- and 64-bit operating systems simultaneously on the same physical PC. Compatible 64-bit guest operating systems include select Microsoft Windows, Red Hat, SUSE, and FreeBSD distributions.
* Adjustable memory. Tune virtual machine memory for optimal performance.
* Configurable shutdown. Power down or suspend the virtual machine when closing VMware Player.

普段はLinux版VMwareしか使っていないのですが、実はこのPlayerのアナウンスが出る前日にVMware for Windowsを追加購入しています。VMware PlayerをWindows XPホスト、Windows 2000ゲストで使ってみた感想は「VMware Playerで十分だった orz」です。VM再起動時に自動的に初期状態に戻るような事もありません。Snapshotは取れないようですがVMのファイルを保存しておけばsnapshot代わりになるのであまり困らないでしょう。

気を付けないとならないのはFDD、CDROMなどのデバイスです。VMware Playerの名前の通りVMの設定をメモリ以外は全く変更できないようです。当然ですがWindowsとLinuxではデバイスの取り扱いが異なるのでLinuxで作成した仮想マシンはWindows上でも動作するのですがデバイスの再作成が必要になります。(Linuxで作成したVMのFDD,CDROMを削除してWindows上でFDD,CDROMを追加するなど)今時FDDは必要も無いかもしれませんがCDROMが使えないと困ると思います。VMware Player用にVMを配る場合は、Windowユーザ用、Linuxユーザ用、2種類用意する方が良いと思います。デバイスが無いというエラーを表示させたくない場合は思い切りよく予めFDDとCDROMデバイスを削除しておいても良いと思います。

広く公開するにはメモリの大きさにも注意が必要かも知れません。試していないので何とも言えませんが1GBのメモリを割り当てているとメモリが少ないシステムでは困った事になるような気がします。「Adjustable memory. Tune virtual machine memory for optimal performance.」とあるので大丈夫なのかも知れません。一応 VMware Playerでも「Player->Troubleshoot->Change Memory Allocation…」からメモリサイズだけは変更できるようになっています。

VMwareToolsのインストーラはVMware Playerには付属していないように見えます。VMwareToolsをインストールしておいた方が良いと思いますが、Key FeaturesにはVMwareToolsがインストールされていないと利用できない機能が記述されているのでもしかしたらインストールする方法があるのかも知れませんね。どちらにしてもVMwareの機能を十分発揮するにはVMwareToolsのインストールは必須です。VMware Workstationでインストールしておくべきでしょう。

当り前と言えば当り前ですが画面サイズは自由に変更できます。少し驚いたのはVMware Playerウィンドウ右上あたりにあるVMwareアイコンをダブルクリックすると画面が最大化されWindowサイズも自動的に解像度に合わせて調整された事です。(1024×768->1400×1050) 最大化した画面でもVMware Playerのツールバーのような物が画面上に表示されていました。このツールバーは制御がホストOSにつながっています。ゲストOSのウィンドウを最大化してもツールバーの下にウィンドウが表示されて不便だなと一瞬思いましたが、このバーの左にある押しピンアイコンをクリックするとWindowsの「タスクバーを自動的に隠す」と同じ様な感じで隠れてくれるようになりました。この機能意外に便利です。このあたりの動作はVMware Workstationと動作が異なります。VMware Workstationでも似たような動作になると良いですね。

最後にWindowsホストではVMware WorkstationがインストールされているとVMware Playerはインストールできないようです。試す場合は予めVMware Workstationをアンインストールしておく必要があるようです。
# RPM版 LinuxはVMware Workstationとconflictするのかな?

ついに出た! 無料のVMware Player

VMwareからの案内メールが届きました。「ついに出た! 無料のVMware Player」が率直な感想。早速使ってみよう、と思ったらサイトが混んでいて….

しかし無料で使えるのは良いのですがMSさんは困ったことに… しかしVMware Playerが出なくても遅かれ早かれ同様の問題が出てきますからね。

しかしこれは企業にとって革命的なインパクトを持っていますね。今までレガシーシステム(Win95用アプリなど)を維持するためにVMware Workstationを購入していた所は多いと思います。

まだサイトが混んでいてダウンロードさえ出来ないのですが仮にスナップショットを利用した半読み込み(次回起動時には全ての記録が消える)ような物であっても使い道はありますね。例えば、SandBoxとしてブラウジングするのはVMware Player上のOSのみにするとスパイウェアやウィルスに感染するリスクを低減することができます。

多少の制限があるかもしれませんがVMの実行だけなら約189ドルが無料になるのですからVMware Playerを使いますよね。VTテクノロジが一般化する前に「VMware一人勝ち」の構図を作ることがVMware Player投入の意図かな?

TortoiseSVN – 気が利いていますね

Windowsでsubversionを利用されている方のほとんどはTortoiseSVNを利用されていると思います。私は今日初めて知ったのですがMS Word文書の差分をみると

word = WScript.CreateObject("Word.Application");
destination = word.Documents.Open(sNewDoc);
destination.Compare(sBaseDoc);

が実行されてあたかもMS Wordの履歴をとっていたかのように表示されました。
これでわざわざ差分を記録してなくても済みますね。WindowsでSubversionを使っていた方には常識(?)とは思いますが気が利いていますね。仕組みは単純な物ですが驚きました。

Linuxの利用者からライセンス料を徴収しようとしていた会社がどこを対象として訴えを起こすつもりだったか履歴機能からバレてしまった件は有名です。履歴機能を使わなくても良くなるのでセキュリティ面でも役に立ちますね。

PostgreSQL 8.1は”本当”に速い

@ITのDatabase Watch 10月版に「PostgreSQL 8.1は”速い”とうもっぱらのうわさ」と記事があります。

「うわさ」ではなく「本当」に8.1は速いです。

ミッションクリティカルなシステムでpgpoolを使用している所も多いと思いますが、8.1+pgpoolの相性は良いようです。pgpool無しで直接PostgreSQL8.1にアクセスした場合、pgpoolでPostgreSQL 8.1 2台でロードバランスさせてベンチマークするとINSERT、UPDATE、SELECT全てのケースで処理効率が向上している事が分かります。特に
SELECTのみクエリは100%以上の効率化となるベンチマーク結果(私が計測したケースでは102%)となる場合もあります。
# つまり2台にした場合、2台分よりも速くなるケースがある。
# 負荷を分散させたため各サーバがより効率良くクエリを実行できた
# ため論理値以上である102%の速度向上が見られたと考えられます。

私は試していませんが片岡さんに聞いたところ8.1では同時接続数が増えてもスループットの低下が少ないという情報も聞きました。500接続くらいではあまり速度低下が発生しないそうです。

私も8.1はまだまだテスト中ですがPostgreSQLの性能でお困りの方は8.1をテストしてみてはいかがでしょうか?

mixiからRDFが見えていませんでした..

mixiから日記の更新が見えないと言われました。そこで、見てみるとmixiのRSSリーダはUTCでの時間記述に対応していないため、カスタマイズしたRDFファイルを見るように設定していたのですがb2evolutionをアップグレードした際にカスタマイズしたRDFファイルを作成していませんでした。取り急ぎノーマルなRDFを参照するようにmixiの設定を変更しました。mixi側で問題を修正していなければ更新時間が-9時間表示になってしまいます。mixiは問題を修正したのかな?