aka LWN JAPAN
[ C H A N G E L O G ]
[Tux]

ChangeLog
カーネル
[1999/11/18〜12/06]
Section Editor: Jonathan Corbet
ChangeLog
[ Kernel ]  

最新開発カーネルは、2.3.29

最新開発カーネルは、2.3.29 です。

最先端でいたい方のために、 testing ディレクトリに 2.3.30 のプレパッチがあります。 主に、Alpha と PowerPC の変更や、 ZR36120/ZR36125 ベースのフレームグラバー/オーバーレイボード用の 新しいドライバ、それに、さらなる IPC 関連の更新や 新しい i386 セマフォの実装などが含まれているようです。

※ 翻訳の時点では、2.3.31 までが出ているようです。 カーネルリリースの最新情報はこちら(日本語)をご確認下さい。


補足情報・御感想をお待ちしております。) (メール版登録
[ Kernel ]  

最新安定カーネルは 2.2.13

最新安定カーネルは 2.2.13 です。

2.2.14 へ向けての進展が 2.2.14pre9 (英語)をもって続行しています。

※ 翻訳の時点では、2.2.14pre12 までが出ているようです。 カーネルリリースの最新情報はこちら(日本語)をご確認下さい。


補足情報・御感想をお待ちしております。) (メール版登録
[ Kernel ]  

次期 2.4 カーネルの機能を 2.2 でちょっとだけ先取り「ケーパビリティ設定リスト」

※話の流れとして時系列に理解されたい方は、 このページ下部へ引用した、 今年4月〜5月頃の議論(日本語。ChangeLog 訳は初公開) から先に読んだ方が、理解しやすいかも知れません。

「ケーパビリティ設定リスト」で遊んでみよう!

今週は、次期 2.4 カーネルの機能を 2.2 でちょっとだけ先取りした、 「ケーパビリティ設定リスト」で遊んでみましょう。 (大変危険です。実際にやる方は、もちろん、ご自分の責任の元にやってください。)

「ケーパビリティ」(capability … 能力。特権。)は、比較的粒度の高いアク セス管理の一方式です。2.3 開発シリーズの Linux カーネルに追加されまし た。

※ ケーパビリティは、アクセス制御の観点から Linux のセキュリティを 高める機能です。

現状の Linux システムでは基本的に、ご存じのように、何かちょっとした (ある一つの)権限を持たせたいためだけに、そのプロセスに 全権限(root 権限)を渡してしまう、ということを行っています。 例えるなら、ある部屋への入室許可を与えるためだけに、ビル全体の 共通の万能カギを渡してしまっているようなものです。

(実際的には、部屋単位の管理というよりも、ビルの、 電源管理権限、水道管理権限、ネットワーク管理権限、 駐車場管理権限、エレベータの管理権限、を別々の 管理単位にするという方が、例えとして的を得ているかも知れませんが、 まあ、いずれにせよ、例えということで…。)

これは、その人が(他の部屋へも入ってしまうかも知れないという ような)信頼のおけない人であったり、アルコールが入った時や 満月の夜に人が変わってしまうという場合には、 少々厄介なことになります。

一方、ケーパビリティに基づくシステムでは、 ある部屋への入室許可を与えるために、 その部屋のカギだけを渡すことができるようになります。 したがって、万が一、その人がどうかしてしまった(あるいは、 どうやらカギを落としてしまった!)場合にも、 被害を最小限に押えることができます。

これにより、例えば、自分が所有者でないプロセスにシグナルを送ることがで きたり、ファイルパーミッションをバイパスしたり、1024 以下のネットワー クポートにバインドしたりすることができます。 ケーパビリティの背後にある考え方は、 標準的な Unix の「すべてか無か」というアプローチよりも あと少しだけ識別力のある方法で、特権を少しだけ分け与えようというものです。 VMS のようなシステムを覚えていらっしゃる(そしてそのことを白状しようと いう :-)方は、「ケーパビリティ」の代わりに「特権 (privilege)」を思い 浮かべても、何が起っているのかを良く理解することができるでしょう。

2.2 カーネルはケーパビリティを理解するものの、まだシステム管理やユーザ レベルにまで本当に達しているわけではありません。 本当にケーパビリティベースのシステムが現れ始めるまでには、 まだまだ解決すべき問題がたくさんあります。 LWN 1999/4/8 号(英語。 日本語は下記に引用LWN 1999/4/15 号(英語。 日本語は下記に引用) で、それらの問題がいくつか取り上げられています。

そうこうしているうちに、 システム管理の仕事にケーパビリティを使えるようにし始める ちょっとしたものが、(ほとんどアナウンスされることもなく) 2.2.11 パッチにこっそりと忍び込んでいました。 このバージョンは、「ケーパビリティ設定リスト (capability bounding set)」 という概念を追加したものです。 これは、システム上のすべてのプロセスに対して等しく影響を与えます。 システム上のすべてのプロセスは、 このリストの値に応じて、 対応するある特定のケーパビリティの設定がオン・オフされます。 どんなに特権を持たされているプロセス(例えば、root が所有者のプロセス) であっても、あるケーパビリティがこの設定リストの中でオフになっていると、 そのケーパビリティに関する行為を実行することはできません。

この設定リストは、sysctl 経由でエクスポートされるので、 /proc/sys/kernel/cap-bound に見ることができます。 デフォルト値は、すべてのビットを立てた (すべてのケーパビリティがオンの)状態なので、 cap-bound の内容を見ると -1 が与えられています。

設定リストは、 cap-bound 疑似ファイルの中に新しい値を書くことで 変更することができます。 けれどもここに意外な点があります。 ケーパビリティを設定リストでオフにすることは root ユーザ(プロセス)によって行うことができますが、 ケーパビリティをオンにすることはただ一つのプロセス (init) にのみ許されています。 つまり実際上は、 一度、設定リストでケーパビリティをオフにすると、 それは次のリブートまでそのままの状態(オフのまま)になります。

この特徴はどう利用されるのでしょうか? 想像してみてください。あなたはセキュアなシステムを走らせていて、 ローダブルモジュールのことを気にかけています。 (カーネルのローダブルモジュールはセキュリティ上の弱点となり得ます。 また、実際に攻撃の手段として悪用されているという報告(日本語)があります。) けれども、カーネルからモジュールを完全に 取り除いてしまいたくはありません。 ブート時にシステムを繋ぎあわせるのに、便利すぎるからです。 あるいは、モジュールとしてのみ動くドライバがあるから、 ということもあるかもしれません。

もしシステムがそれ自身で必要なモジュールをすべてロードして初期化し、 その後モジュールのロードを永久に不可にすることができれば、 ステキだと思いませんか? カーネルモジュールのロードやアンロードは、 CAP_SYS_MODULE というケーパビリティ一つで設定が可能です。 設定リストで CAP_SYS_MODULE をオフにすれば、 その後もうモジュールはロードされません。--- お医者さまの命令どおりに。:-)

CAP_SYS_MODULE は、16番めのケーパビリティです。 (完全なリストは こちら(英語)にあります。全部で26のケーパビリティの一覧があります。) 設定リストは、ビットマスクとして表現されます。 必要なことは、16 番目のビットをオフにする値を書くことだけです。 ですから、この芸当を行うには、

echo 0xFFFEFFFF > /proc/sys/kernel/cap-bound
のようなコマンドで OK ということになります。 もちろん、設定リストに変更を加えるときは、 注意深く行ってください。 誤った値を書いてしまうことで、 システムを使い物にならなくしてしまうというのは、 ありふれて簡単なことです。 けれども注意すれば、 cap-bound は、 よりセキュアなシステムを作るのに役立てることができます。
[ Kernel ] Capability

実行ファイルの「ケーパビリティ」はどのように表現されるべき?

※ 以下は、ケーパビリティに関する過去の記事からの抜粋 (ChangeLog 訳は初公開)です。
[LWN: 1999/04/08]

実行ファイルのための「ケーパビリティ」は、 どのように表現されるのが最も良いのでしょうか? 「ケーパビリティ」とは、 (最初は何年も前に他の OS で使用された) 古い「特権」の概念を Linux で実装したものです。

この概念は、 --- root なら何でもできるという --- 現在の権限の仕組みを、 より適切な粒度の仕組みで置き換えるものです。 従って例えば、若い番号のソケットを バインドできなければならないネットワークデーモンは、 ただそれだけを実行するケーパビリティが与えられるようになります。 もし誰かがそのデーモンを 攻撃する方法を見つけたとしても、 そのシステム自体へ、 それ以上のアクセスを得られる可能性は非常に低くなります。

今週、次期 ext3 ファイルシステムに ケーパビリティマスクを統合する作業が 進行していることが伝えられました。 従ってファイルシステムは、 setuid スキームを「setcapability」メカニズムへ 拡張することをサポートすることになります。 これにより 信用された実行ファイルは、必要なケーパビリティとともに インストールされることができるようになります。 これは、 UNIX の世界で何年にも渡り行われてきた方法を 論理的に拡張したものだと考えることができます。

でも本当にそれで良いのでしょうか? Albert Cahalan 氏を筆頭とする反対意見を持つ方々によって、 違ったスキームが提案されています。 「ケーパビリティヘッダ」を、 実行ファイルそのものに埋め込むという方法は、どうでしょうか? カーネルは、プログラムを実行する前に、 ケーパビリティをそのヘッダから読み取ることになります。 ただしこれは、プログラムが setuid が root としてインストールされている場合に限り 行われます。

このスキームには、支持者が指摘する多くの長所があります。 ファイルシステムをハックするのは、 いつだってちょっとビビらされますが、 このアプローチでは、 ファイルシステムを変更する必要はありません。 また、ケーパビリティヘッダは、 自動的にバックアップされ、 dump や tar のようなプログラムによって 変更されることなく復元されます。 そして、 ケーパビリティ対応以前の古いカーネルからシステムがブートされている場合でも、 setuid バイナリは、古いモードで機能できるはずです。 さらに、この方法は NFS を介しても機能します。 等々の長所があります。

逆向きの議論は少し曖昧になりがちです。 ケーパビリティヘッダには、 いくらか「ボルト止め的なバグ修正」っぽい性質があり、 一部の人には嫌われています。 また、安全に行なえるようであっても、 実行ファイルがシステムにそれ自体のケーパビリティを伝える、 という概念には、いくらか気持ち悪さがあります。

結局、もちろんこれは 2.3 の問題です。 2.2 にはいくらか基本的なケーパビリティのサポートがあるとはいえ、 ファイルシステムと実行ファイルローダの両方(または、どちらか一方)に 変更が必要だとなると、 安定カーネルシリーズに受け入れられる可能性が高いとは言えません。 (John Wojtowicz氏の ケーパビリティの働きについての説明 (英語) もご覧下さい。)

[ Kernel ] Capability

ケーパビリティを巡る2つの派閥

※ 以下は、ケーパビリティに関する過去の記事からの抜粋 (ChangeLog 訳は初公開)です。
[LWN: 1999/04/15]

「ケーパビリティ」は、数多くの議論を巻き起こし続けています。 意見の不一致を概観するには、 先週の記事(英語。日本語(上記記事))をご覧下さい。 状況は大きくは変わっていません。

けれども、徐々に進展はしているようで、 Linux システムにおけるセキュリティがどのように機能するべきかについての、 より一般的な意見の違いが浮かび上がってきました。 「純ケーパビリティ・システム」派が目指す世界とは、 これ以上「特権ユーザ」を増やさずに済み、 root アカウントはもはや存在せず、UID 0 は単にユーザ ID の一つであるような ものです。 この世界では、すべての特権 (「ケーパビリティ」) は特定のプログラムに帰属します。 ユーザは、これらのプログラムへのアクセス権をどの程度持っているかによってのみ、区別されます。

root ユーザが存在しないため、root に setuid されたファイルに依存するケーパビリティ方式は機能しません。

※ setuid - 一般のユーザが root 権限を必要とする処理を行えるようにするための 仕掛け。setuid されたプログラムは、プログラムを実行したユーザの権限ではなく、 プログラムの所有者 (root 等) の権限で動作します。
そのためこの「純ケーパビリティ」派の方々は、 ケーパビリティ情報の保存場所とプログラムの分離を支持し、 ファイルシステム内にメタデータとして(ケーパビリティ情報の保存場所を) 追加しようとしています。

※ メタデータ - ファイルそのものに含まれるもの以外のデータ。 例えば Linux におけるテキストファイルは、文字の列としてのデータそのものと別に、 ファイルの更新日付やパーミッション, 所有者等の情報を持っています。 これらは「メタデータ」の一種と考える事が出来ます。
ケーパビリティを基本としたシステムは (※ 現在の UNIX とは)、 かなり違った世界になるでしょう。 多くのプログラムがこのモデルのもとでは動かなくなるということさえも、 実現のためには我慢しなければならない困難の一部でしかないでしょう。

対する別の派の方々は、ケーパビリティのことを (サーバプログラムなどが持つ特権を減らすことにより) セキュリティを向上させる手段、といったように考えています。 彼らは、 root アクセスを廃止する必要はない、 また、本当に必要である以上に、 システムを非互換にするような方式を導入する必要もないと考えています。 こちらの方々は、ケイパビリティ情報を それを適用するプログラムの実行ファイル自体に埋め込むことを主張しています。 そして、setuid または sticky protection ビットを、 システムにケイパビリティ情報を示すフラグにしようとしています。

※ sticky ビット - /tmp ディレクトリ等、複数ユーザの間で共有される ディレクトリにおいて、ファイルの作成者以外に削除を禁止するフラグ。 初期の UNIX では、プログラムをスワップファイル中に貼りつかせる (stick) ことで、プログラム起動を高速化する為に用いられましたが、 そんな小技を必要としなくなった現在では全く異なる用途に使用されています。

これは Linux の未来への道標となる、重要な討論です。 結論が出そうにないのは、残念です。 そろそろ Linus にも土俵に上がってもらって、 風がどちらに向かっているのかを示してもらう頃でしょう。

[ Kernel ] Capability

ケーパビリティの議論は白熱

※ 以下は、ケーパビリティに関する過去の記事からの抜粋 (ChangeLog 訳は初公開)です。
[LWN: 1999/4/22]

ケーパビリティの議論は乱戦模様を呈しています。 ここではその詳細についてさらに触れることはしません。 本当に興味のある方は、たぶん直接議論に参加されているでしょうから。 しかしながら、Ted T'so 氏が、いつも通りその明解な切り口でまとめた、 議論の概要 (英語) を見ておくことは有益です。 ケーパビリティについて、いくつかの異なる見方をまとめた上で、 ケーパビリティ情報はファイルシステムに保存されるべきであることが 主張されています。

[ Kernel ] Capability

ついに Linus の登場

※ 以下は、ケーパビリティに関する過去の記事からの抜粋 (ChangeLog 訳は初公開)です。
[LWN: 1999/05/20]

ついに Linus がケーパビリティの議論に参入しました。 ケーパビリティに関する議論を覚えておいででしょうか? これは、ケーパビリティ(特権)情報を、 ファイルシステムに保存することを望む方々と、 ELF 実行形式ファイルのヘッダ情報に埋め込むことを望む方々との 間で起こっている議論です。

※ ELF (Executable and Linkable Format) - 現在 Linux で主流の実行ファイル形式。 プログラムはこの形式のファイルとしてディスクに格納されています。 フリー/商用を問わず、ほとんどの UNIX で採用されています。 ELF ファイル形式は柔軟性に富み、新しい情報をヘッダに埋め込む事が比較的容易です。
Linus は、 長期的に困難だと思われるにも関わらず、 ファイルシステムに格納する案に傾きつつあるようです。 彼の論拠はいくぶん新しいものです。 ELF ヘッダーに格納する案への彼の主な憂慮は、 これが ELF 実行形式のみで機能するという点でした。 ケーパビリティをスクリプトに適用しようとする場合には、 (特権を増やすのと同様に減らす方向にも適用可能です) ELF 方式は機能しません。 このノート (英語) に、彼が考えていることについて、いくつかの例が示されています。

カーネルの分野では、一般に物事は Linus が望んでいる方向に進むので、 ELF ヘッダー方式がこれ以上進展することはないかもしれません。


補足情報・御感想をお待ちしております。) (メール版登録
[ Kernel ]  

Linux システムの全イベントの記録が可能に

Linux Trace Toolkit 0.9.0 が アナウンス(英語) されています。 このツールキットにより、 一定の期間に起るすべてのイベントを記録し調査するというような ことが Linux システムに関してできるようになります。 それだけでも、 数知れぬシステム開発の仕事のための便利なデバッグツールになるはずです。 それに加えて、 このパッケージにはイベントトレース等を見るための グラフィカルなフロントエンドも含まれています。 注目すべきものがたくさんありますので、詳細は LTT のページ (英語) をご覧下さい。
補足情報・御感想をお待ちしております。) (メール版登録
[ Kernel ]  

QNX ファイルシステム絶滅の危機?

Linux ファイルシステム関連の仕事をたくさん行っている Alexander Viro 氏の linux-kernel への最近のノート (英語)です。 どうやら QNX ファイルシステムは 2.3 では絶望的に壊れており、 管理されていないようです。 何か変化が起らない限り、 QNX は 2.4 に生き残ることはなさそうです。 そういうわけで、もしこのファイルシステムを気にかけていらっしゃるなら、 手伝う方法を考え始める時が来たかもしれません、、、
補足情報・御感想をお待ちしております。) (メール版登録
[ Kernel ]  

今週のその他のパッチとアップデート

今週のその他のパッチとアップデートです:
  • H.J. Lu 氏による Nfs-utils 0.1.3 (英語)。

  • Richard Gooch 氏による永久不滅の devfs パッチは、 バージョン 144 (英語)。

  • Keith Owens 氏が Modutils 2.3.7 (英語)をリリース。

  • Kirk Reiser 氏が Speakup v-0.08 (英語)をリリース。

    Speakup は、「スクリーンレビューパッケージ」です。 コンソール上のデータを、音声オーディオ出力に変換します。

  • Hans Reiser が reiserfs 3.5.11 を アナウンス(英語)。 動的ファイルシステムリサイザーが含まれています。 (reiserfs について、より詳しい情報は LWN 11/11 号カーネルセクション(英語。日本語)) をご覧下さい。

補足情報・御感想をお待ちしております。) (メール版登録
[ Kernel ]  

ISA プラグ&プレイが 2.2 カーネルで利用可能に

2.3 カーネル(次期 2.4 カーネルの開発版)で開発が続けられていた ISA プラグ&プレイ・モジュールが2.2 系列のカーネルへとバックポートされました。
※バックポート - 開発系カーネルで追加された機能が、一つ前の 安定系カーネルへと移植されること。通常は、開発系カーネルで 追加された機能は、(現在のではなく)次の安定系カーネル(今 でしたら 2.4)で初めて利用できるようになります。
Jaroslav Kysela 氏によって 2.3 系列のカーネルで実装されたものを、Ed Okerson 氏が 2.2 系列のカーネルへとバックポートしました。その他詳しくは、こちら(英語)をご覧下さい。

(Thanks to Greg Herlein)

※次期安定カーネル 2.4 の新機能は、素晴らしき Linux 2.4 の世界(日本語)をご覧下さい。

補足情報・御感想をお待ちしております。) (メール版登録
[ Kernel ]
[ Kernel ]

関連 URL

LWN
カーネル(原文)
Kernelnotes
他のカーネル関連リソース(英語)
Kernel traffic
他のカーネル関連リソース(英語)
Kernel Newsflash
他のカーネル関連リソース(英語)


ChangeLog メール版登録(無料)
情報提供(御意見、御感想、補足・更新情報、新規ニュース)はお気軽にどうぞ
About Us  ChangeLog Mail  Mail To ChangeLog  Linux 野郎  DISCLAIMER
"Linux 野郎 なら ChangeLog" (^-^) is a catch phrase for ChangeLog, courtesy of Hideyuki Higa.
Linux (R) is a registered trademark of Linus Torvalds.
Copyright (C) 1999 Metachannel Systems Corp. all rights reserved. ChangeLog
Copyright (C) 1999 Eklektix, Inc. all rights reserved. Linux Weekly News
If we fail, we WILL lose the war. Dave Whitinger (Mozilla Project)