BSDアクセス権と所有権


根本的なレベルでは、Mac OS XはBSDシステムです。この土台の一部となるのが、ファイルシステムにおけるファイルとフォルダの所有権、およびこれらのためのアクセス権【permissions】をBSDが実装するやり方です。

このモデルは、どのユーザが読み、書き、名前を変更し、ファイルを実行することができるのかを制御するのと同様に、どのユーザがファイルをフォルダからフォルダへと、コピーおよび移動できるのかを制御します。

ファイルの所有権モデルは慣例的にUFS、または同様のファイルシステムと関連していましたが、Mac OS XはこれをMac OS 標準(HFS)およびMac OS 拡張(HFS+)を含めた、対応しているすべてのファイルシステムへと拡張しました。

以下のセクションでは、ファイルの所有権モデルの基本について述べており、Mac OS Xにおいて異なる領域を指摘します。またこれらのセクションでは、ルートおよび管理者ユーザアカウントが、ファイル管理にどのように影響を与えるかの論点も含んでいます。

BSDアクセス権の概要

ファイルシステムの各フォルダとファイルに対して、BSDはユーザの三つの区分を持ちます。オーナー【owner】、グループ【group】、すべてのユーザ【other】です。

これらのユーザの種類のそれぞれに対して、三つの特定のアクセス権がファイルやフォルダへのアクセスに影響を与えます。読み出し【read】、書き込み【write】、実行【execute】です。

もし、ユーザがあるファイルに対して、どの区分の読み取りアクセス権も持たない場合には、ユーザはそのファイルを読むことはできません。同様に、あるアプリケーションに対して、ユーザが実行のアクセス権を持たなければ、そのユーザはそのアプリケーションを実行できません。

  • フォルダやファイルのオーナー【所有者】とは、一般的にはそれを作成したユーザのことです。オーナーは一般的に、そのファイルやフォルダに対するすべての特権(読み出し、書き込み、実行)を持ちます。ファイルのオーナーは、他のクラスのユーザに対するアクセス権を設定することができます。ルートユーザはファイルの所有権を移すことのできる、唯一のユーザです。
  • システム上のユーザは誰でも、一つ以上のグループに属することができます。グループは、何か共通のものを持っているユーザの集まりである、ということから名付けられました。すべてのファイルは、それに関連付けられたグループ オーナーを持ちます。グループ オーナーは特定のユーザの集まりに、追加のアクセス権を与えることができます。たとえば、もしあなたが特定のプロジェクトのための技術者を含むグループを持っていたら、あなたはそのプロジェクトのコード リポジトリの中のソースファイルに対して、グループ全体に書き込みアクセス権を与えることが考えられるでしょう。

    システム管理者が、グループの準備に責任を持ちます。

  • すべてのユーザの区分に含まれるユーザとは―ファイルのオーナーでも、ファイルに関連付けられたグループのメンバでもない、全員です。この種類のユーザに対するアクセス権は、一般的に最も制限されています。

ファイルのアクセス権を見る

ターミナルのウインドウで、あなたがファイルシステムのどこかの場所(仮に、~steve/Documents)で ls -l コマンドを入力すると、あなたはこのような結果を得ます…

total 3704
drwxrwxrwx 5 steve staff 264 Oct 24 20:56 General
drwxrwxr-x 5 steve admin 264 Oct 21 21:47 ProjectDocs
drwxr-xr-x 6 steve staff 160 Oct 25 12:00 Planning
drwx--x--x 6 steve staff 160 Oct 21 15:22 Private
-rwxrwxrwx 1 steve staff 0 Oct 23 09:55 picture clipping
[sponge:~/Documents] steve%

この結果は、他の事柄に混じって、ファイルやフォルダのオーナーと優先グループ、そしてユーザの種類ごとのアクセス権を示しています。ファイルのオーナーは3番目の列に、そして優先グループは4番目の列に示されています。従って、前述の一覧では、Generalフォルダはsteveというユーザに所有されており、グループはstaffとなります。

詳細ファイル一覧における最初の列は、10個の文字の集まりです。

最初の文字は項目の種類を示しています。ハイフンは普通のファイルを示し、d はフォルダ(ディレクトリ【のd】)を示し、l はシンボリックリンクを示します。

残りの9文字は、オーナー、グループ、すべてのユーザ、の種類のアクセス権を表現している、暗示された三つのグループに分類されます。

もし r、w、x の文字が表示されていたら、読み取り、書き込み、実行のアクセス権が、対応するビットの立っている種類のユーザに対してオンであることを示します。

ファイルのアクセス権の読み方の例として、以下の一覧は~steve/Documentsにある、Planningフォルダについてのアクセス権を示しています。

drwxr-xr-x 6 steve staff 160 Oct 25 12:00 Planning

この例では、項目はフォルダです。オーナーのアクセス権は rwx であり、従ってオーナーはこのディレクトリの内容を見て、ファイルやフォルダをこのディレクトリへコピーすることができ、このディレクトリを彼または彼女の現在の作業ディレクトリに(cdコマンドを通じて)することができ、この中のどのプログラムも実行することができます。

staffグループとすべてのユーザに対するアクセス権は共に r-x であり、これらのユーザはこのディレクトリの中のファイルを読むことができ、このディレクトリを彼らの現在の作業ディレクトリにすることができることを意味しています。ですが、彼らはこのディレクトリへファイルを書き込んだり、その中のファイルを変更したり削除することはできません。

ファイルのアクセス権を変更する

もしあなたに適切なアクセス権があれば、あなたはオーナー、グループ、個々のアクセス権を、ターミナルのシェルから、それぞれ chown、chgrp、chmod コマンドを用いて変更することができます。(詳細は、関連する man page を参照してください。)

また、あなたは選択したファイルやフォルダに対する、同じ所有権とアクセス権の情報を、Finderの情報ウインドウの「所有権とアクセス権」ペインで見ることができます。もしあなたがそのファイルかフォルダのオーナーであれば、情報ウインドウから直接アクセス権を変更することもできます。

ファイルの個々のアクセス権を変更するには、あなたは求めるアクセス権を、3桁の整数として指定できる必要があります。この筋書きでは、読み出し、書き込み、実行のそれぞれの三つ揃いは、0から7の間の十進数として表現されます。表 1はそれぞれの数字と三つ揃いの間の関係を一覧にしています。

表 1 ファイルのアクセス権の対応

十進数 アクセス権
0 --- アクセス権なし【訳語は要確認】
1 --x 実行のみ
2 -w- 書き込みのみ
3 -wx 書き/実行
4 r-- 読み出しのみ
5 r-x 読み/実行
6 rw- 読み/書き
7 rwx 読み/書き/実行

たとえば、内容がオーナーだけに見えるディレクトリがあったとします。この場合、ディレクトリの一覧はこのように見えるはずです…

drwx--x--x 6 steve staff 160 Oct 21 15:22 Private

ここで指定されたアクセス権を得るには、オーナーはこのようなコマンドを実行する必要があるでしょう…

chmod 711 ./Private

このコマンドを噛み砕くと、chmodコマンドは特定の項目の個々のアクセス権を変更します。711という数字はディレクトリに対する全体的なアクセス権を表現しています。最初の数字(7)は rwx の三つ揃いを表しています。二番目、三番目の数字(共に1)は、 --x の三つ揃いを表しています。

アプリケーションと書類のためのアクセス権

あなたがXcodeでアプリケーションをビルドするとき、ビルド サブシステムは自動的に実行ファイルに -rwxr-xr-x のアクセス権を設定します。この設定はオーナー―つまり、アプリケーションをインストールした人物―に、アプリケーションの実行と書き込みをできるようにして、他すべては実行だけをできるようにします。他のIDEも実行ファイルのビルド時に同様のアクセス権を設定します。

-rwxr-xr-x の設定は、アプリケーションが特権(ルート)アクセスを要求するような、まれな状況を除けば十分なものでしょう。例としては、カーネルを通じて低レベルのハードウェアアクセスを必要とする、ディスク修復などのアプリケーションが挙げられるでしょう。

このような場合、あなたはアプリケーションのためのルートアクセスを獲得するために、setuidコマンドを使用することができます。次にあなたは、あなたに管理者の認証を行えるようにする、NetInfo Kit および System frameworks の機能を使用することができます。setuidの詳細は、setuid (2) および chmod (1) の man page を調べてください。

アプリケーションのアクセス権のセットは、誰がアプリケーションを起動できるかを決定しますが、一度それが起動されると、そのアプリケーション プロセスはそれを起動したユーザによって所有されます。これが意味しているのは、アプリケーションはログインしたユーザと同じアクセス権【access rights】を持ち、そのユーザアカウントのアクセス権を引き継ぐということです。

こうしたアクセス権は、アプリケーションはどこにユーザの書類を保存できるのかといった、アプリケーションの多くの方向性に影響を与えます。アプリケーションは、ユーザが適切なアクセス権を持っている場所にのみ、ファイルを保存することができます。

Carbon、Cocoa、Javaアプリケーションが書類を保存するとき、それぞれのアプリケーション環境は、ユーザのumask値によって決定される、書類のアクセス権を自動的に設定します。ユーザ書類に対して、この値はデフォルトでは(-rw-r--r--)に設定されており、オーナーには読み/書きの権限を与え、他のユーザには読み出しのみのアクセスに制限しています。

もし、あなたのアプリケーションが作成した書類に、これとは異なるアクセス権を与えたいのであれば、あなたは適切なファイル管理インタフェースを用いてこれらのアクセス権を設定する必要があります。Carbonについては、File Managerのインタフェースを使用してください。Cocoaについては、NSFileManagerクラスを使用してください。

管理者とルートアカウント

Mac OS Xにおいて、管理者およびルートアカウントは、あなたにファイルシステムを変更するための拡張されたアクセスを与えます。

ルートユーザとスーパーユーザのアクセス

BSDシステム上には、システム上のフォルダとファイルへの無制限のアクセスを持つ、ルートユーザアカウントが存在します。ルートユーザは、このアカウントに対して利用できる優先アクセスのために、しばしばスーパーユーザとして知られています。たとえば、ルートユーザは以下の作業を行うことができます…

  • あらゆるファイルへの読み出し、書き込み、実行
  • あらゆるファイルやフォルダのコピー、移動、名前の変更
  • あらゆるユーザに対する所有権の移動とアクセス権のリセット

BSDシステム上では、ルートレベルアクセスは、wheelグループのメンバにも可能にされています。このグループのメンバの地位は、一時的にスーパーユーザになる能力をユーザに授けます。この能力を発揮するには、ユーザはコマンドラインに su を入力し、これに対するプロンプトが現れたら、次に彼または彼女のパスワードを入力します。

スーパーユーザアクセスは、ユーザにログアウトしてからrootとしてログインしなおすことを必要とせずに、一時的なルートアクセスを許可します。

Mac OS Xでは、システムの安全性を向上させるために、ルートユーザアカウントはデフォルトでは利用不能とされています。ルートアカウントの禁止は、su コマンドの使用を通じたものを含めて、ユーザをスーパーユーザの特権が許可されることから保護します。

管理者アカウント

ルートアカウントは使用不可であるものの、Mac OS Xはシステムの初回インストール時に管理者ユーザアカウント【admin user account】を発行します。管理者ユーザは、通常、ルートユーザに関連付けられている操作のほとんどを行うことができます。管理者ユーザに防止されている唯一の事柄は、システムドメインへの直接のファイルの追加、変更、削除です。けれども、管理者ユーザはこの目的のためにインストーラ または ソフトウェア アップデート アプリケーションを使用することができます。

システム上のどのユーザも、管理者権限を持つことができます。つまり、adminという名前のアカウントは特に必要ないということです。管理者ユーザはadminグループへ追加されることにより、特権を行使することができます。非管理者ユーザはstaffグループに属します。管理者ユーザは、システム環境設定のアカウント ペインを用いて、システムのほかのユーザに管理者権限を認めることができます。

ルートユーザの有効化

デフォルトではルートユーザは使用不可ですが、管理者ユーザはこれを有効化しなおし、スーパーユーザ状態となることができます。

  1. /Applications/Utilitiesにある、NetInfoマネージャ アプリケーションを起動します。
  2. セキュリティ > 認証(必要に応じて)を選択し、あなた自身を管理者ユーザとして認証します。(あなた自身を認証するために、ドメインウインドウを開いておく必要があります。)
  3. セキュリティ > ルートユーザ有効化を選択します。(このメニュー項目は、あなたがローカルadminグループの認証されたメンバである場合にのみ、使用可能です。)

ルートユーザパスワードはデフォルトでは空欄です。あなたがアカウントを有効化するときには、自動的にルートパスワードが要求されます。安全上の理由のために、あなたは常にルートパスワードを与えるべきです。

警告:絶対に必要な状況を除いて、ルートユーザを有効にしてはいけません。ルートアカウントの誤用は、あなたのMac OS Xインストール環境にデータの消失や、破壊をもたらすことがあります。

あなたがルートアクセスを必要とする作業を完了したら、NetInfoマネージャ アプリケーションのセキュリティ > ルートユーザ無効化を選択して、すぐにスーパーユーザ特権を放棄すべきです。