Microsoft Windows 95良くも悪くも、コンピュータの歴史を変えたOS。もっとも、ネットワーク対応が行われたが本質はDOS+GUI シェルであり、ユーザー権限の概念もないなど原始的なOSであった。

かつては当たり前に使われていた…root権限クロニクル

  • このエントリーをはてなブックマークに追加

by [2013年9月09日]

今でこそ、腫れ物に触るような扱いを受けているroot権限ですが、実を言うと昔のOS、特に1990年代以前のOSではユーザーが当たり前に取得できる、いえ取得したのと同じ状態で利用するのが当然の権限でした。

▼現代に生きる人は必読! スマホにおけるroot権限についてはこちら
スマホのアンタッチャブル「root権限」のヤバい話

原始時代

複数のユーザーが利用する可能性があって、なおかつ個々のユーザーの個人情報保護の必要が特に重視される現在のWindowsやLinux、OS Xなどとは異なり、1980年代から1990年代まで広く利用されていたCP/MやMS-DOSといった原始的なDOS(Disk Operating System)環境では、そもそも複数のユーザーが1つのOSが動作するコンピュータに同時に「ログイン」する、といった利用法は(DOS上で動作していたノベルのNetwareのような特殊なケースを除き)全くと言って良いほど考慮されておらず、セキュリティという概念もほとんど想定外という状況だったからです。

これは、この当時のDOSがネットワーク接続されていないのが普通であったことや、複雑なユーザー権限管理機能を搭載できるほどハードウェアの性能に余裕が無かったことが理由の1つです。

ともあれ、これらのDOSではユーザーの利用権限は電源を投入してOSが起動したときのスーパーユーザーのまま、つまりユーザーがやりたい放題好き勝手にOSを扱える、ディスク上のOSシステムファイルを完全破壊することさえ自由なroot相当の権限を持った状態で、常時使用するのが当然でした。

ちなみにCP/MやMS-DOSより古くから存在したUNIX(およびその互換OS)の場合、ネットワーク接続も複数ユーザーによるOS環境の共有もこの時期には既に行われるようになっていたのですが、わざわざ使用に様々な制約のつくユーザー権限を作成しそちらに移行して利用するのが面倒だったためか、ユーザーが1人しかいない端末など、特にユーザー権限を設定する必要がない場合はこちらの場合でもrootアカウントでログインしてそのまま使用する、という乱暴な利用形態があちこちでまかり通っていました(※そのため、セキュリティがうるさくなってきた時期には「rootでのログイン禁止」の張り紙があちこちの研究室などで見られたりしました)。

また、Apple MacintoshのOSも、OS X以前では最後のバージョンとなるMac OS 9.2までは長らくユーザー権限の概念が存在しておらず、起動したらいきなりデスクトップ上にアイコンが表示されて即使用できる、という今考えるとセキュリティ面でかなり危ない設計になっていました。

インターネットの普及が状況を一変させた

Microsoft Windows 95
良くも悪くも、コンピュータの歴史を変えたOS。もっとも、ネットワーク対応が行われたが本質はDOS+GUI シェルであり、ユーザー権限の概念もないなど原始的なOSであった。

この状況が変化し始めるのは、1995年のWindows 95発売と、それに前後したインターネットの普及開始で、世間一般でセキュリティ対策の重要性が増して以降のこととなります。

これは、無防備にroot権限やNT系のWindows(Windows 2000やWindows XP以降)だとroot権限に相当するアドミニストレータ(Administrator)権限を持ったままログインすると、ウィルスの攻撃を受けてOSの本体が感染した場合、ウィルスのプログラムが全てのファイルを自由に読み書きできて全てのハードウェアを自由に扱える状態となってしまい、しかも高い自由度の代償として保護機能が十分働かないため、ウィルス感染の危険性も高まってしまうためです。

Microsoft Windows XP Professionalのログオン画面
Windows XPまではこのように、一般使用するユーザーアカウント名としてシステムでデフォルトの「Administrator」を使用することが一応できた。ただし、これはセキュリティ対策上は好ましい利用法ではない。

そのため、ウィルスに隙を見せないように、OSがroot権限(あるいはアドミニストレータ権限)で動作する時間を最小限に抑えるため、この時期以降のOSでは様々な対策が講じられるようになりました。

当然ながら、この時期以降のLinuxを基礎として開発されたAndroid OSや、Mac用OS Xを基本として開発されたiOSもその例外ではなく、少なくとも通常のユーザーが搭載端末でOSを操作する範囲では基本的にroot権限が使用できない/使用する必要がないように設計されています。

CPUでは昔からあったユーザー権限の管理

前述のとおり、OSのレベルでは20世紀一杯くらいまで、結構乱暴にroot権限でログインした状態のまま利用されることが多かった(そもそもWindows 95・98・Meにはユーザー権限の概念すらなかった)のですが、実を言うとOSよりも更に下のCPUのハードウェアレベルでは、こうしたユーザー権限のレベルごとに扱えるハードウェアを限定するための利用者モードの区分は、かなり古くから行われていました。

Apple Macintosh
1984年に発表された、伝説のGUIマシン。MC68000搭載で、ソフトウェアレベルでスーパバイザモード(システム)とユーザーモード(アプリケーション)を厳格に区分して使っており、そのためスーパバイザモードの互換性がない新型CPUに変更された後継機種でもアプリはほぼ問題なく利用できた。ただしOSにユーザーアカウントおよびユーザー権限の概念が欠落しており、その点では前近代的であった。

例えば、1980年代から1990年代までApple Macintoshシリーズに搭載されたモトローラ(現・フリースケールセミコンダクタ)のM68000シリーズと呼ばれる16ビット/32ビットCPUシリーズでは、1979年発表の初号機種であるMC68000から既にスーパバイザモードと呼ばれるroot権限相当の利用者モードと、ユーザーモードと呼ばれる権限が限定された利用者モードの2つのモードが用意されていて、不完全ながらユーザーモードで動作しているアプリがスーパバイザモードで動作するOSなどのシステムソフトウェアに悪影響を及ぼさないよう、ハードウェアに対するアクセス権限を制限することで、アプリが暴走してもシステムは落ちないように保護する機能が搭載されていました(※もっとも、この機能はアプリが暴走してもOSのカーネル部分が「落ちない」だけで、OSのフロントエンドにあるシェルプログラムやデスクトップ環境に正常に戻ってこれる保証がありませんでした。これが表面化したのが、この当時のMacintoshのOSで有名になった、いわゆる「爆弾」ダイアログでした)。

また、極端なケースでは1980年代中盤から日本のNECが開発したオリジナルCPUのVシリーズ(V60・V70・V80)のように、当時のUNIXでのユーザー権限細分化に対応して、スーパバイザモード込みで20種類以上もの利用者モードが用意されるなど、1980年代以降に開発された16ビット・32ビット・64ビットアーキテクチャのCPUでは、ハードウェアレベルでのユーザー権限管理機能の搭載が当然となっています。

シャープ X68000 ACE-HD(CZ-611C) 
Human 68Kという独自のDOSを標準でバンドルしていた、日本では最初で最後のモトローラMC68000(厳密にはセカンドソースの日立HC68HD000)搭載16ビットホビーパソコンシリーズの1機種。標準OSであったHuman 68Kでも一応、MacintoshのOSと同様にスーパバイザモードとユーザーモードが使い分けられていたが、ゲームでは何より処理速度を要求されるグラフィック関係のハードウェア(※スプライトや65536色のグラフィック画面を搭載)を直にアクセスできないというユーザーモードの制約を嫌い、起動後、問答無用でスーパバイザモードに切り替えてしまうゲームソフトが続出した。ある世代の日本のゲームプログラマを鍛え育てたマシンの一つである。

もっとも、こうしたハードウェアレベルでの権限保護のための機能は、マシンの性能を限界まで発揮させる必要があるような場合には障害にしかならないケースも(マシンの性能そのものが低かったこともあって)頻発していました。

そのため、例えば先に挙げたモトローラのM68000シリーズをCPUとして搭載した国産唯一のホビー向けパソコンシリーズであるシャープのX680x0シリーズでは、Human 68Kと名付けられたオリジナルのDOSがユーザー権限管理について甘い設計だったこともあって、ハードウェア性能を極限まで利用するゲームソフトを中心に、本来ならばユーザーモードで動作すべきアプリが強制的にスーパバイザ権限を取得してその状態でずっと動作するという、今のOS環境では考えられないような乱暴なプログラミングが横行していた(※ただし、これは当時のゲームソフトがフロッピーディスク(Floppy Disk:FD)に書き込まれたDOSから起動し、ゲームごとにFDを入れ替えてマシンをリセット、再起動して動作させる環境だったために許された利用形態であった、とも言えます)ことが知られています。

なぜrootアカウントが使われなくなったのか

ここまで「ウィルス対策として」権限の自由度が最も高いroot権限の利用が排除されるようになった、と書いてきましたが、それでは何故root権限が排除されるようになったのでしょうか?

その大きな理由の一つは、例えばBSD系UNIX互換OSだと「root」を逆に読んで「toor」など、各OSごとに標準で用意された、システム管理に用いるroot権限の付与されたスーパーユーザーのアカウント名が基本的に固定されていて、しかもその名は公開されているため、ネットワーク上でウィルスにマシンが発見されこのアカウントが標的とされた場合などに、パスワード総当たりによるクラッキング行為に対する防御が難しいためです。

ユーザーアカウントそのものが知られていなければ、それを総当たりで探し出すのに時間を要するため、攻撃を受ける側がそのことに気づいて対処する時間が稼げるのですが、アカウント名、それも権限レベルが最高位のスーパーユーザーのものが既知だと、それに絞ってパスワードだけを総当たりをすればよくなるため、それだけ攻撃側が有利になります。

もっとも、一般的なOSの場合、電源オンでファームウェアが初期化され、OSがブートしてゆく段階では、各種サービスの起動などのためにroot権限を持ったアカウントでログインしているのと同じ状態とならざるを得ない、というシステム的な制約が存在しており、OSブートに用いるシステムレベルでのroot権限付与アカウントを完全になくしてしまうことはできません。また、システムメンテナンス上、root権限の付与されたアカウントが存在しなければ例えばOSのアップデートなどの作業がユーザーレベルで全く実行できない、ということにもなってしまいます。

それゆえ、root権限を持ったシステムアカウントに対する総当たり攻撃を防ぎつつ、これらのアカウントを維持するには、こうしたシステムアカウントを起動シーケンス終了の時点で停止し、ユーザーログインの時点では特別な場合を除いてこの種のroot権限付与システムアカウントを一切利用できない状態にしておくのが手っ取り早くて確実だ、ということになります。わずかな隙間からドアをこじ開けて侵入しようとする賊がいるなら、ドアそのものをその場で埋めてつぶしてしまえばいい、そういうことなのです。

実際、現在の一般的なOSではroot権限の必要なOSブートシーケンスが終了した段階で、root権限の付与されたシステムアカウントからログアウトし、再度一般的な権限を与えられたユーザーアカウントで再度ログインすることで利用が可能になる、という手順を踏むようになっています。

Microsoft Windows 2000 Professional ログオン画面
特別な設定を行わない限り、Windows NT系のOSではバージョンによらずこのようなログオン(ログイン)のためのユーザー名やパスワードなどの入力を促すダイアログが表示される(デザインや手順は若干変わったが、これは最新のWindows 8.1でも変わらない)。

現在のWindowsを起動する際に、特別な設定を行わない限りユーザーアカウント名の選択とパスワードの確認が行われるのは、単にパスワードをチェックしているだけでなく、OS起動に使用したシステムアカウントからログアウトし、各ユーザーアカウントに用意された環境にログインするのに必要な手順の一つだからなのです。

コメントは受け付けていません。

PageTopへ