「マルチユーザーなしに現代に必要なセキュリティを確保するのは困難すぎる」のか?

微妙に面白い話題がTwitterにあった。

スマホとか「俺」しか使わんもんね。

奥氏の主張一見正しいし実際正しいとは思うのだけど、「現実の問題」となると。微妙だ。

昔々、もう30年近く昔にこの問題に取り組もうとしたことがある。

世の中にはまだLinuxなんてものは存在せず、「パソコン」はハード的には32bitであったがOSはMS-DOSの時代。まだWindowsはVer 3が出る前くらい。

私はFM-TOWNSなんてものの上にGnuのいろんなものを移植していた。MS-DOSなんてゆー16bit OSであっても、CPUが32bitだとメモリ空間が1MB(GBではない)よりも大きく使える環境の上であった。

結構いろんなものが移植できたのだが、Gnu Emacsは容易ではなかった。コードのかなりの部分にマルチプロセスを前提とした部分があったので、シングルプロセスかつ単一空間のMS-DOS(およびその系統)ではうまく移植ができなかった。もっとも、後年Gnu EmacsであってもMS-DOS上で動くようになったのではあったが(マルチの部分はいい感じにごまかしてあった)。

その頃の私は

面倒臭いからOSごと作ればいいじゃないか

と思っていてkernelを書く始めようとしていた。Mach Ver 3.0が出回るちょっと前くらいだ。

MS-DOSがシングルユーザであったし、元ツイみたいなことは考えていたので(当然の帰結の一つではある)、

シングルユーザマルチプロセス

のOSをデザインしようと思っていた。

デザインを始めて、並行してデバイスドライバを書いて… とやっているうちにMach Ver 3.0のソースが手に入って、それから数ヶ月したらいろんなものが手に入るようになって… だったのだが、その時に気がついたのは

UIDがカーネル奥深くにまで存在している

ということだ。つまり、こういったもののカーネルはマルチユーザを前提にしているということだった。だから、UNIX系OSをいじってシングルユーザOSを作るというのは、結構大変そうだということがわかった。

いろんなコードを読んでいると、この「UIDを意識する」ということは結構重要なことであることに気がついた。使うユーザが1人しかいなくても、マルチユーザを意識するということは、いろいろ簡単でわかりやすいのである。

完全なシングルユーザの場合、「自分」はその世界では全てのことが可能になってしまう。Linuxの初期の頃、何でもかんでもrootでやる人がいたものだが、それと全く同じである。「自分」が一番偉いんだから、全ての権限が「自分」にある。

これはある意味当たり前なことなのであるが、ちょっと危ない。たとえば、

  • 「自分」が間違った時にも全てが実行される
  • こっそり誰かが使った時も「自分」になってしまうから全てが可能になる
  • 全てが可視になり全てに責任が発生する

等々、結構面倒臭い。

そこであくまでもシングルユーザに拘るのであれば、「セキュリティレベル」とか「セキュリティグループ」的なものを用意してやって、「普段の俺」と「特別な俺」を区別してやるといったことが必要となる。普段は基底状態にいて、「特別な何か」をする時には権限の昇格をする。

それはそれで正しいことなのであるが、実装を考えればそういったもののID的な何かをプロセスに振ってやって… ということが必要になる。とか考えると、

結局それはUNIXプロセスのUIDと同じことじゃね?

ってことに気がつく。

冒頭に挙げたツイの関連で「jail」とか「chroot」とかって話も出て来たのであるけれど、結局それは

「自分」と「それ以外」

の「ユーザ」の存在を仮定していることに他ならない。強いて言えば、「自分以外の奴がログイン出来るかどうか」が違うくらいの話になってしまう。

元ツイのような話の時の「シングルユーザ」は、/etc/shadowの有効なエントリが「自分」だけだというだけであって、/etc/passwordのエントリが1行しかないということとは違うのだ。

まぁ私はBeOSを使ったことがないので、「シングルユーザマルチプロセス」の環境でも問題なく使えるということもあるのだろうとは思うのだけど、その辺はわからない。でも、マルチユーザを仮定しない環境でセキュリティとか\権限とかを正しく扱うのは、容易ではないか、「/etc/shadowは1エントリ」と大差ないことか、どっちかでないと厄介だろうと思う。マルチユーザOSのシステム管理に毒された頭には、想像の外になってしまう。

同じことは「他のOS屋さん」も同じであって、大多数の「OS屋さん」はUNIX的(Windowsでも大差ない)なマルチユーザのパラダイムに毒されているので、「スマホはシングルユーザが基本」とは言え、「権限どうする」あたりになるとマルチユーザを仮定してしまうということになってしまいがちだろうと思う。もちろん

やれば出来る

ことではあるし、BeOSとかはやってた(らしい)のだけど。そういったわけで、表題の「マルチユーザーなしに現代に必要なセキュリティを確保するのは困難すぎる」というのは、「だいたいあってる」程度には正しいことだと思う。歴史もそうだしね。