メインルーティンを攻略!

2008年7月26日(土)
石川 俊行

データシステムのスーパーユーザ

 Catch standard options before doing much else.

 「ほかにいろいろ行う前に標準オプションを捕獲します」

 Make sure we are not running as root.

 「rootでプログラムを実行していないかを確認します」

 PostgreSQLのRDBMSに対する思想ですが、システムのルートとデータベースシステムのルートの権限はその質が異なるとしています。システムのルートがデータベースシステムのルートも兼ねると、人事・給与などを含めいかなる重要なテーブルも参照できてしまいます。従ってPostgreSQLの起動を含めた管理者行為はシステムのルートでは行えないようになっています。そのチェックを行います。

 Place platform-specific startup hacks here. This is the right place to put code that must be executed early in launch of either a postmaster, a standalone backend, or a standalone bootstrap run.

 「プラットホーム特有の起動ハックをここに置きます。この場所は、postmaster、スタンドアロンバックエンド、あるいはスタンドアロンブートストラップ実行のいずれかの開始において、早期実行されなければならないコードを置く的確な場所です」

 "platform"というのはCPUのアーキテクチャとOSの組み合わせで、そのどれをPostgreSQLがサポートしているのかユーザによっては知りたい情報ですね。こちらは図2にまとめていますので、確認してください。

 Note that this code will NOT be executed when a backend or sub-bootstrap run is forked by the server.

 バックエンド、または従属するブートストラップがサーバーによりフォークされた場合、このコードは実行されないことに留意してください」

 XXX The need for code here is proof that the platform in question is too brain-dead to provide a standard C execution environment without help. Avoid adding more here, if you can.

 「XXX コードをここに置かなければならないのは、問題のプラットホームが手助けなしに標準C実行環境を提供するのに、あまりにも無能である証拠です。できることならここにこれ以上の追加は避けてください」

 "in question"は「問題になっている」、"brain-dead"は「脳死状態」転じて「無能」です。

メモリアクセスなどの注意事項

 On some platforms, unaligned memory accesses result in a kernel trap; the default kernel behavior is to emulate the memory access, but this results in a significant performance penalty. We ought to fix PG not to make such unaligned memory accesses, so this code disables the kernel emulation: unaligned accesses will result in SIGBUS instead.

 「いくつかのプラットホーム上では、不整列メモリアクセスはカーネルトラップとなります。デフォルトのカーネルの振る舞いはメモリアクセスをエミュレートするものですが、これは大幅に性能を劣化させます。このような不整列メモリアクセスをpostgresが行わないようにしなければならないので、このコードはカーネルエミュレーションを無効にします。不整列アクセスはSIGBUSになります」

 "result in"は「という結果に終わる」「ということになる」の意味です。 "significant performance penalty"は「性能上の深刻なペナルティー」ですから「性能が落ちる」ことです。"SIGBUS"になるとはバスエラーを引き起こすことで、アクセス違反が原因です。

 Make output streams unbuffered by default.

 「デフォルトで出力ストリームをバッファしないようにする」

 In case of general protection fault, don't show GUI popup box.

 「一般保護違反の場合はGUIポップアップボックスを表示しない」

 Help display should match the options accepted by PostmasterMain() and PostgresMain().

 「ヘルプ表示は PostmasterMain()とPostgresMain()で対応しているオプションに一致しなければなりません」

 Also make sure that real and effective uids are the same. Executing as a setuid program from a root shell is a security hole, since on many platforms a nefarious subroutine could setuid back to root if real uid is root.

 「同時に、実の、かつ実効uidは同じになっていることを確認します。多くのプラットホームで不正なサブルーチンは、実uidがルートの場合setuidは(プロセスの所有者を)ルートに戻してしまうことがあるので、ルートシェルからsetuidプログラムを実行するとセキュリティーホールになります」

 "real uid"は「実ユーザID」、"effective uid"は「実効ユーザID」です。"nefarious"は「不正な」です。

 (Since nobody actually uses postgres as a setuid program, trying to actively fix this situation seems more trouble than it's worth; we'll just expend the effort to check for it.)

 「(だれも実際にはpostgresをsetuidプログラムとして使用しないので、この状況を積極的に修正する試みは、その価値を見いだすよりも問題を含むように見えます。私たちはちょっとした検証努力をするようにします)」

 Allocate new memory because later getpwuid() calls can overwrite it.

 「後にgetpwuid()呼び出しが上書きできるように新規メモリを割り当てます」

 これまではbackendを主に、キーとなる項目のREADME、そしてソースコードのコメントから抜粋した文章を基に解説しました。最後にそのほかのトピックを紹介します。

NPO法人日本PostgresSQLユーザ会
昭和21年、東京都生まれ。小樽商科大学数理経済学専攻。PostgreSQLオフィシャルマニュアル和訳プロジェクトに深くかかわる。日本PostgreSQLユーザ会・組織運営担当理事。「ものつくり大学」データベース講座・非常勤講師。http://www.postgresql.jp/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています