セキュリティ&プログラミングキャンプ 2010 Linux組レポート
そこはコンピュータ版「精神と時の部屋」
富士通株式会社 Linux開発統括部
武内 覚
2010/9/14
「知識を身に付けろ!」の2日目、3日目
2日目と3日目は講義および演習が中心でした。Linux Kernelをハックをするための基礎知識をわずか2日の突貫工事で身に付けるという、ある意味キャンプ中で一番過酷な2日間でした。扱ったトピックは次のように多岐にわたりました。
- OSとコンピュータアーキテクチャの基礎
- git(*1)の使い方
- モジュールを使ったカーネルの学習
- デバッグ技術
みんな大変そうでしたが、例外なく、とにかく食らいついて学ぼうという姿勢が印象的でした。
各組に分かれて自己紹介。まだみんな表情が硬いですね |
3日目の夜には、キャンプ卒業生のチューター数人による、「いま、何をしているか」についての発表がありました。
Linux組にはチューターがいなかったので、特に目立っていたプログラミング言語組の林くんの発表について取り上げます。林くんは2009年の言語組に参加して、とあるRubyの処理を最大5倍高速化したという猛者です。キャンプ後の現在は、大学1年生にしてプログラミング言語の設計ばかりしている困ったちゃんに成長しています。
彼はなかなか突き抜けたプレゼンをしてくれました。「モナド」という概念を理解するために、モナドを実装できる軽量なプログラミング言語を設計、実装したという話をしてくれました……が、モナドとは一体何なのか、それを知りたいという動機、目的実現のための手段、どれをとっても常人には理解し難いものでした。明らかに、言語を作るという手段のために目的を選んでいるとしか思えません。プレゼンの最中、聴衆はみんな開いた口がふさがらず、講師陣からのコメントでも、Rubyコミッタの笹田講師および小崎講師から、
笹田「何をいっているのかさっぱり分からなかった」
小崎「みんながこの講義で理解したのは、君が変態だということだ」
といわれるなど、絶賛の嵐でした。初日の首藤先生に続き、多くのキャンプ生にとって生涯忘れられないプレゼンになったことでしょう。個人的には彼は超えてはいけない一線をとっくにぶっちぎってしまっているように思えるので、あとは行き着くところまで行ってほしいと期待しています。
Linux組の集合写真。だいぶなじんできました |
注1:Linux Kernelの開発コミュニティで主に使われる、ソースコードのバージョン管理システム。 |
「実践、カーネルハック」の4日目
4日目はいよいよ実戦、キャンプ本番のカーネルハックです。各自1つの課題に取り組み、場合によってはLinux Kernel 開発コミュニティ(Linux Kernel Mailing List、以下LKML)に投稿するというものです。
楽しそうにハックするキャンプ生たちと講師陣 |
10人のLinux組キャンプ生が取り組んだテーマについて、それぞれ簡単に触れたいと思います。
■warning/panicメッセージの改善
菊池くんと上田くんはシステムの動作が不安定になったとき、あるいは異常停止した場合に出るwarning/panicメッセージの改善に取り組みました。
これらのメッセージには大きな問題が2つありました。1つは文書量が多過ぎて画面外に流れてしまい、役に立たないことがある点です。菊池くんはこの問題の解決に取り組みました。
彼は本来出すべきメッセージを、画面上の表記可能文字、文字色、そして背景色という3つの視覚情報にエンコードして、1画面にたくさんの情報を含んだ図形を表示するというアプローチを取りました。現在は80×25文字の8色カラー画面で60%程度の文字数圧縮に成功しています。今後も、画面モードを変えて色数を増やしたり、圧縮ライブラリを使うなどして圧縮率を上げたり、エンコード後の図形を携帯電話でQRコードのように撮影すれば保守担当者に連絡が行くようにするなど、実用的な応用が考えられます。
上田くんがパニック時に召喚した死神。「死ぬ」と書いてあるが、すでにシステムが死んでいるのはご愛嬌 |
もう1つの問題は、そのメッセージが、カーネルに相当詳しい知識のあるエンジニアにしか理解できないという点です。上田くんはシステムが異常停止するときに死神が出てくるという、誰がどう見てもシステムが危機的状況にあると理解できるような前代未聞の改善を加えました。
今後も、死神がアニメーションするようになったり、システムが不安定になったときやメモリが不足したときにも状況に応じていろいろな画面が出るような改善を加える予定だそうです。余談ですが、菊池くんと上田くんの課題では、画面を制御する高度な命令を駆使しており、そのやり方はOS自作組の川合講師に教えを請うて分かったといういきさつがあります。こんなふうに、別分野で連携して成果を出せるというのも本イベントならではですね。
■シュレッダー機能の開発
中谷くんは、パソコンを使っている諸兄のストレージ上のあんなファイルやこんな動画、そして恥ずかしい自作ポエムを安全に削除するシュレッダー機能の開発に取り組みました。なぜこれが必要かというと、ファイルを単に削除しただけではHDDにそのまま内容が残り、復旧できる恐れがあるというコンピュータの都合があります。また、ユーザープロセスでシュレッダーを作ると、シュレッダー処理と同時にファイルの削除処理が動いたときに、中途半端にファイルの内容が残る可能性があります。
彼は身に覚えがあるのか、安全確実、かつ実用的なシュレッダーの設計に並々ならぬ情熱を注いでいました。インターフェイスは、open時にO_SHURRを渡すとファイル内容が破壊されるというものです。当初はO_SHURRがほかのopenフラグと重なってしまい、ごく普通のファイル操作によってファイルがシュレッダーされてしまうという世にも恐ろしいカーネルを作ったりしていましたが、最終的には、
- ファイルをゼロクリアする
- ファイルをランダム文字列で上書きする
- ファイルの中身をとても恥ずかしいポエムで上書きする
という3つのすてきな機能を備えたシュレッダーが完成しました。現在は実装上の都合で一部のログFSで上書きができませんが、彼の目は本気だったので、今後はそれもすぐに改善されることでしょう。
■eventfdの共有強化
青田くんはeventfdの共有強化に取り組みました。eventfdはプロセス間の同期に使う機能で、主にpollなどと組み合わせて使います。しかし現状では、eventfdを作ったファイルデスクリプタの受け渡し方法が、親子間の継承やUNIXドメインソケットのファイルディスクリプタを介して渡す方法などに限定されているため、やや不便です。
彼はSYSV IPC(共有メモリ、メッセージキュー)や名前付きパイプのようにeventfdに名前を付けて、共有しやすくしました。新規システムコールを追加し、ユーザーが指定するIDに対応するeventfdオブジェクトを検索してopenできる処理を追加しました。性能測定も行い、名前付きパイプを使った同期と比較してeventfdが十分に高速であることを証明してくれました。今後はスクリプト言語などから使いやすいmknodのようなインターフェイスを実装して手軽に使えるようにする必要があるでしょう。しかし、たった1日で新システムコールの仕様決定、実装、および性能測定までできたことは特筆に値します。
余談ですが、彼は最近独自のカーネルパッチを2つ作成し、どちらも次版のLinux kernelにマージの見込みです。いきなりキャンプの成果が出ているようで素晴らしいですね。
http://lkml.org/lkml/2010/8/30/278 |
■make localmodconfigの改善
矢倉くんはカーネルをビルドする方法の1つ、make localmodconfigの改善に取り組みました。実はキャンプ2日目に、一部のキャンプ生のマシンで、localmodconfigで作成したカーネルがブートしないという現象が起きたため、その原因究明、およびバグ修正するというこの課題が生まれました。調査の過程でビルドシステムのスクリプトにバグがあることが分かったので、修正パッチをLKMLに投稿しました。なんとこのパッチも、次版のlinux kernelにマージ見込みです。しかも、キャンプ後にパッチへのコメントに即座に反応して2つ目のパッチを作り、それも同じくマージ見込みというおまけ付きです。
また、OS自作組の天野講師が自作OSにJavaScript処理系を組み込んだというネタハックに対抗意識を燃やし、brainf*ckという極めて実用的な言語のインタプリタをカーネルモジュールで実装するというハックにも取り組みました。最終日にはそれなりに動作し、本稿執筆現在も絶賛開発中だそうです。恐るべき行動力ですね。
http://lkml.org/lkml/2010/8/15/1 |
2/3 |
|
||||||
|
Linux Square全記事インデックス |
Linux Squareフォーラム 仮想化技術関連記事 |
連載:実践! Xenで実現するサーバ統合 有力な仮想化技術として注目を集めるようになった「Xen」。このXenを活用してサーバ統合を実践していく手順を具体的に紹介します |
|
特集:サーバの仮想化技術とビジネス展開の可能性 jailからUML/VMwareまで 1台のマシンで複数のサーバを動かす「仮想化技術」。VMwareやUMLの登場により、WebサイトだけでなくOS自体を仮想化できるようになった |
|
特集:仮想化技術のアプローチと実装 VMwareから要注目技術Xenまで 1台のサーバで複数の仮想マシンを実行する仮想化技術は、空間コストを引き下げる可能性を持つ。最新の仮想化技術を概観してみよう |
|
特集:仮想OS「User Mode Linux」活用法 技術解説からカーネルカスタマイズまで Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
特集:仮想化技術の大本命「Xen」を使ってみよう インストール & Debian環境構築編 高いパフォーマンスで本命の1つとなった仮想マシンモニタ「Xen」。日本語による情報が少ないXenを、実際に動かしてみよう |
|
特集:仮想化技術の大本命「Xen」を使ってみよう Xen対応カスタムカーネル構築編 Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できる |
|
特集:IPv6、UML、セキュリティ機能の統合 全貌を現したLinuxカーネル2.6[第4章] 今回は、これまでに紹介し切れなかった機能を一気に紹介する。これを読めば、カーネル2.6の正式リリースが楽しみになるだろう |
|
Linux Squareプロダクトレビュー VMware Workstation 4 PC/AT互換機エミュレータとして不動の地位を築いたVMware。その新バージョンがリリースされた。新機能を早速試してみよう |
|
古くて新しい「サーバ仮想化技術」の行方 サーバ仮想化を実現するための技術がソフトウェア、ハードウェアの両面で出そろってきた。ハイパーバイザーのさらなる高速化に向けた動きを紹介する |
|
Linux Squareフォーラム全記事インデックス |
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|