Mac業界の最新動向はもちろん、読者の皆様にいち早くお伝えしたい重要な情報、
日々の取材活動や編集作業を通して感じた雑感などを読みやすいスタイルで提供します。

Mac Fan メールマガジン

掲載日:

root権限やroot化…、「root」って一体何?

著者: 千種菊理

root権限やroot化…、「root」って一体何?

「何でもできる」権限を持つ

「root(ルート)」とは、古来よりUNIXに存在する特権ユーザの名称です。通常、キーボードからコマンドを入力したりGUIからマウスでダブルクリックして起動したプログラムは、それぞれ起動したユーザの権限の中で実行され、そのユーザの権限で読めるファイルだけが読め、書けるファイルだけが書き込めるようになっており、ほかのユーザのファイルは読み書きできないようになっています。しかし、rootユーザならば誰のファイルでも読んだり書いたり、消したりもできます。また、OSを構成するプログラムや設定ファイルのほとんどはrootが所有しているため、これらのファイルを変更することも簡単にできてしまいます。

結果、なんらかの方法でrootというユーザでプログラムを実行できるようになると、そのOSの上では何でもできるようになります。何でもできるというと便利に思えますが、つまりはうっかりファイルを消してしまったり、悪意ある改ざんも行えるようになるので、これは大変なことになるわけです。

簡素な仕組みになったわけ

ではなぜ、rootにそのような無制限な権限が割り当てられているのでしょうか? ユーザ間のプライバシーを守ったり、セキュリティを保つ必要はありますが、厳密にすればするほど、やりたいことが試せななくなる面倒なシステムになっていきます。

OS Xでも用いられているUNIXというOSは、元々技術者向け、言い換えれば「よくわかった人が自分のために使うもの」として作られたこともあり、OSの利用者(ユーザ)は自分が何をやっているか、その操作が何を引き起こすかは、わかっているものという前提に立って作られている節がありました。なので、普段使いのユーザアカウントには、必要かつ十分な権限が割り当てられるようにしつつ、それを超える場合はrootという何でもできるユーザの権限で動かす、という簡素な仕組みになったのです。

UNIXが技術者向けのOSの間はそれでよかったのですが、ビジネスでも使われ始めると、この簡素な仕組みは問題になっていきます。

システムのプログラムは何でもかんでもrootで動かすのではなく、機能ごとにユーザを作ってそのユーザの権限で動かすようにすることでrootの権限を使う事態を最小限にしたり、ファイルのアクセス権を従来の簡素なものに加えてより細やかに権限を与えたり、rootでも簡単にはアクセスできなくするACL(Access Control List)や、MAC(Mandatory Access Control)という、たとえroot権限を持って実行されているプログラムでも、あらかじめ指定された機能しか使えない、指定されたフォルダやファイルしかアクセスできないように限定する仕組みなどが開発され、取り入れられてきました。

とはいえ、今でもUNIXにおいて、rootが強大な権限を持っていることには変わらず、「普段はめったに使わないけどソフトウェアのインストールやシステムのメンテナンス時に使いたい」というユーザのために、rootというユーザでログインして操作できるようになっています。rootのパスワードがバレてしまったら、何でもし放題になってしまうのです。

rootはあるけど使えないOS X

OS Xではどうなっているのでしょう? 実は、最初のOS Xの頃からrootというユーザはいて、OSが必要とするソフトウェアはrootで動作していましたが、rootユーザではログインできないようになっていました。というのもOS Xのrootにはパスワードが設定されていません。パスワードが設定されていないとは「どんなパスワードを入力しても一致することがない」ので、ログインできないわけです。

OS Xでは、最初に作られるユーザは「管理者」という役割になっていますが、この管理者は別になんら特別な権限は持っていない、UNIX的には一般のユーザになります。ただ、OS Xで管理者とされているユーザは、ソフトウェアのインストール時など、必要があった際に、自身のパスワードを入れることで一時的にrootでのコマンドの実行ができるようになっています。この仕組みのおかげでrootユーザでログインできなくてもまったく困らないのです。

もちろん、UNIXもsudo コマンドなど、「限定されたroot権限を提供する仕組み」は存在しました。しかし、長年の慣習から「いざというときrootになれないと困る(かもしれない)」という懸念から逃れられませんでした。rootユーザの無効化には、UNIXを使っているけど決してUNIX文化の中で育ったわけではないアップルならではの英断だったのです。

iOSではどうなる?

OS Xと異なり iOSではシステムの詳細があまり公にされていません。しかし、OSの仕組みとしてはほぼOS Xと同じで、やはりシステムの重要なプロセスのみrootで実行、通常のアプリケーションは一般ユーザとして実行されていると考えられます。そのため、アプリケーションがOSの提供していない機能を使おうとしても権限の壁に阻まれるのです。アプリケーションの不都合でシステムが壊されないためには、これは必要な仕組みです。

Linuxをベースとしたアンドロイドでも、アプリケーションは一般ユーザ権限で動作していることは同じです。「root化」という作業は、この原則を破り、アプリケーションがrootの権限を常時、あるいは一時的に利用できるようにするものです。SIMロックの解除などはシステムにより防御されていますので、root化をする必要がある次第です。

root化されているデバイスでは悪意あるアプリケーションも特権的な機能を使えてしまいます。許可をしていないのに電話帳やメールの中身をどこかに送信したりできるわけなので、必要がない限りはroot化などは避けたほうがいいでしょう。

?rootと一般ユーザの違い

rootはさまざまなアクセス権限を無視できるようになっていて、たとえば暴走した他人やサービスのプロセスを強制終了できるのはrootだけで、一般ユーザは自分の起動したプロセスしか終了できません。WEBサーバで使われている80番ポートを使用できるのもrootだけとなっていて、一般ユーザが勝手にWEBサーバをでっち上げて80番ポートを使うということができないようになっています。これも1つのセキュリティです。

?管理者権限の行使

サファリはrootの持ち物になっており、どの一般ユーザも削除できないようになっています。これらのファイルを削除したり、新しくファイルを加える際は、管理者ユーザのパスワードを聞いてきます。これに正しくパスワードを入力すると、一時的にrootの権限を得て、ファイルを操作できるようになっているのです。インストーラでのソフトウェアのインストール、アクティビティモニタでの強制終了など、本来rootでないとできない作業を要求するソフトウェアではこの機能がついています。

【 ACL 】

Access Control Listの略。UNIXでは「所有者」「グループ」「それ以外」という大雑把な分類での「読み込み」「書き込み」「プログラムとしての実行」の権限を割り当てるようになっています。これは簡単でわかりやすいのですが、適切な権限が割り当てられないことがあります。ACLでは、ファイルやフォルダごと、個別にユーザやグループを指定してより細かな権限を付けられるようにするもので、その権限がいくつも並びリストになるため「アクセスを制御するリスト」という名称になっています。

【 MAC 】

Mandatory Access Controlの略。強制アクセス制御と呼ばれ、あらかじめ指定した機能しか使えないように権限を制約する仕組みです。一度制限が付けられると解除することができないという強制的なもので、プログラムが起動時などにあらかじめ宣言することで、あとから脆弱性を襲われて乗っ取られても、乗っ取ったユーザがMACで許された範囲を超えて何か悪いことをできなくしてしまいます。

【 Sandbox 】

ソフトウェアがアクセスできるファイルや、使える機能に自主的に制限を設けるものです。「メール」を例にとると、メールボックスの読み書きや指定された通信の機能だけが使えます。もし「メール」の脆弱性が突かれ乗っ取られても、たとえばユーザの「書類」フォルダのファイルを全部消してしまうなど、通常のアクセス権ではできてしまう行為が行えないわけです。

【難解】

LinuxのカーネルにMAC機能を付けるモジュール「SELinux」は強力な仕組みですが、使い方が難しいため、よくオフにされてしまいます。それに対し、OS XのMAC機能であるサンドボックスは簡単で、ユーザが気にしなくて良いようになっているのとは大きな違いがあります。

【UID】

UNIXの中ではユーザは「UID」という数値で区別されていますが、rootのUIDは常に「0」になります。逆に、UIDが0のユーザは名前がrootでなくてもrootと同じ特権を持ちます。

文●千種菊理

本職はエンタープライズ系技術職だが、一応アップル系開発者でもあり、二足の草鞋。もっとも、近年は若手の育成や技術支援、調整ごとに追い回されコードを書く暇もなく、一体何が本業やら…。