4.3. 許可属性

FreeBSD は BSD UNIX® の直系の子孫であり、 いくつかの鍵となる UNIX® 思想にもとづいています。 まず最も際だった特徴として最初に言えるのは、FreeBSD がマルチユーザのオペレーティングシステムだということです。 FreeBSD は同時に働いている複数のユーザすべてを、 完全に分離したタスク上で処理する能力を持っています。 また FreeBSD は、ハードウェアデバイス、周辺装置、メモリ、 CPU 時間等への要求を、各ユーザが平等に利用できるように適切に共有し、 管理する役割を担っています。

システムがマルチユーザをサポートしているため、 システムが管理する資源はすべて、 誰がその資源を読み・書き・実行できるかを支配する、 一組の許可属性を持っています。 これらの許可属性は 3 つの部分からなる 3 桁の 8 進数の形で格納されています。 それはそのファイルの所有者 (owner) に対するもの、 そのファイルが所属するグループ (group) に対するもの、 その他 (others) に対するものの 3 つです。 これを数字を使って表現すると、次のようになります。

許可属性ディレクトリの表示
0読み込み不可、書き込み不可、実行不可---
1読み込み不可、書き込み不可、実行可能--x
2読み込み不可、書き込み可能、実行不可-w-
3読み込み不可、書き込み可能、実行可能-wx
4読み込み可能、書き込み不可、実行不可r--
5読み込み可能、書き込み不可、実行可能r-x
6読み込み可能、書き込み可能、実行不可rw-
7読み込み可能、書き込み可能、実行可能rwx

ls(1) に対してコマンドライン引数 -l を使うと、 詳細なディレクトリリストを見ることができ、 ファイルの所有者、グループ、その他への許可属性を示す欄があるのがわかります。 例えば、ls -l を実行して、 適当なディレクトリを表示させると以下のようになります。

% ls -l
total 530
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
-rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
...

以下に示すのは、 ls -l の最初の行を抜き出したものです。

-rw-r--r--

最初の (一番左の) 文字は、それが 普通のファイルなのか、ディレクトリなのか、 キャラクタ型のデバイス特殊ファイルなのか、 ソケットなのか、 その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。 この場合、- という文字は、 普通のファイルであることを示します。 この例でその次に来る rw- と書かれた 3 文字は、 そのファイルの所有者に許可を与えるものです。 その次の r-- の 3 文字は、 そのファイルが所属しているグループに許可を与えます。 最後の r-- の 3 文字は、 システムに存在するその他のユーザに許可を与えます。 - は許可が与えられていないことを示します。 このファイルの例では、ファイルの所有者はこのファイルを読み書きでき、 ファイルの所属しているグループに属するユーザはファイルを読むことだけでき、 そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。 上の表によれば、このファイルに与えられた許可属性は 644 となります。 ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。

ファイルについてはここまでの説明で十分です。 しかし、 デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? FreeBSD は、大部分のハードウェアをファイルとして取り扱います。 そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。 これらのデバイス特殊ファイルは /dev ディレクトリに収められています。

ディレクトリもまた、ファイルと同様に扱われます。 それは読み込み/書き込み/実行の許可属性を持ちます。 ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。 ディレクトリが実行可能になっているとき、 そのディレクトリに移動することができます。 つまり、そのディレクトリに cd (change directory) することが可能です。 また、実行可能属性がついているディレクトリでは、 名前が分かっているファイルにアクセスすることもできます (もちろんそのファイル自体の許可属性によります)。

特に、ディレクトリの中の一覧を表示するには、 そのディレクトリに読み込み属性が設定されていなければなりません。 一方、名前が分かっているファイルを削除するには、 そのファイルが含まれているディレクトリに 書き込み属性実行属性 の両方が必要です。

この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。 ファイルの許可属性そのものについて、 また、それらの設定のしかたに関する詳しい情報は、 chmod(1) マニュアルページを参照してください。

4.3.1. シンボリック表記

寄稿: Rhodes Tom [FAMILY Given].

シンボリック表記と呼ばれる許可属性を表す方法では、 ファイルやディレクトリの許可属性を、 8 進数ではなく記号を用いて設定します。 シンボリック表記では、(who), (action), (permissions) という書式が用いられます。 利用できる値は以下の通りです。

オプション文字意味
(who)uユーザ
(who)gファイルを所持しているグループ
(who)oその他
(who)aすべて (world)
(action)+許可属性を与える
(action)-許可属性を取り除く
(action)=許可属性を指定したものにする
(permissions)r読み込み
(permissions)w書き込み
(permissions)x実行
(permissions)tSticky ビット
(permissions)sUID または GID を設定する

これらの値は、これまでと同様に chmod(1) コマンドで用いますが、文字で指定します。 たとえば、FILE に対して自分以外のユーザからアクセスを一切受け付けたくない、 というときには以下のコマンドを実行してください。

% chmod go= FILE

カンマ区切りで設定することで、 ファイルの属性を一度に 2 つ以上変更できます。 以下の例では、FILE に対して自分以外のユーザから書き込みの権限を取り上げ、 かわりにすべてのユーザが FILE を実行できるようにします。

% chmod go-w,a+x FILE

4.3.2. FreeBSD のファイルフラグ

寄稿: Rhodes Tom [FAMILY Given].

先ほど説明したファイルの許可属性に加え、 FreeBSD では ファイルフラグ を使えます。 これはファイルにセキュリティや管理上の属性を追加するものですが、 ディレクトリには追加しません。

これらのファイルフラグはファイルに管理上の属性を追加し、 root ユーザでさえ誤ってファイルを消去、変更してしまうことを防ぎます。

ファイルフラグは、chflags(1) を使って、簡単なインタフェースで設定できます。 例えば、file1 というファイルにシステムレベルで消去不可のフラグを設定するには、 以下のコマンドを実行してください。

# chflags sunlink file1

また、消去不可のフラグを削除するには、 以下のように先ほどのコマンドの sunlink の前に no をつけるだけです。

# chflags nosunlink file1

ファイルにどのフラグが設定されているのかを見るには、ls(1) コマンドを -lo オプションと一緒に使ってください。

# ls -lo file1
  

出力は以下のようになります。

-rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

いくつかのフラグの追加、削除は root ユーザしかできません。 他のフラグは、ファイルの所有者が変更できます。 システム管理者は chflags(1)chflags(2) から、 より詳細な情報を得ることをおすすめします。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。