所有権と権限

この章の前半で、cdを使ってrootのログインディレクトリに移ろうとしましたが、そのとき次のようなメッセージが表示されました。

[newuser@localhost newuser]$ cd /root
bash: /root: Permission denied
[newuser@localhost newuser]$

これは、Linuxの持つセキュリティ機能の一例です。UNIXと同様、Linuxはマルチユーザーシステムであり、ファイルの権限は、故意あるいは偶発的な不正操作を防ぐシステム機能の1つなのです。

この章の前半で見たように、アクセスが拒否されたときにアクセス権限を得る方法は、suによってrootとなることです。つまり、rootのパスワードを知っているユーザーは誰でも完全なアクセス権限を持てることになります。

[newuser@localhost newuser]$ su
Password: your root password
[root@localhost newuser]# cd /root
[root@localhost /root]#

しかし、スーパーユーザーへの切り替えがいつでも簡便な方法だとは限りません。誤って重要な設定ファイルを壊してしまう可能性があるからです。

すべてのファイルやディレクトリは、作成したユーザーによって「所有」されています。ファイルhaiku.txtはユーザーのログインディレクトリに作ったものなので(リダイレクトを参照)、作ったユーザーが所有者です。

所有者は、ファイルに対する読み込みや書き込みの権限と、実行の権限(テキストファイルではなくアプリケーションの場合)をユーザーに与えることができます。

権限のうちおもなものは、読み込み権限、書き込み権限、実行権限の3つです。

システム上のすべてのユーザーは、そのアカウントが作成されたときに、少なくとも1つのグループに所属しています。したがって、ファイルに対する読み込み/書き込み/実行の権限は、グループに対して与えることもできます。

では、haiku.txtを詳しく調べてみましょう。lsコマンドに-l(long)オプションを付けて実行します(図10-13を参照)。

[newuser@localhost newuser]$ ls -l haiku.txt
-rw-rw-r--    1 newuser newuser     150 Mar 19 08:08 haiku.txt

ファイルの属性が詳細に表示されます。ファイルの読み込み(r)や書き込み(w)の権限を与えられたユーザー、ファイルの作成者(newuser)、この所有者が属しているグループ(newuser)などが表示されます。

ティップデフォルトグループ
 

デフォルトでは、選択したログイン名と同じ名前のグループに所属しています。

図 10-13. haiku.txtに関する権限

表示された情報から、権限以外にも、ファイル名、作成日時、サイズがわかります。

-rw-rw-r--

表示の先頭の列が、現在設定されている権限を表しています。この列には10文字ありますが、最初の1文字はファイルのタイプ(type)です。実際に権限を表すのは残りの9文字で、3種類のユーザーカテゴリに対してそれぞれ3つの権限が表示されています。

ユーザーカテゴリは、左から、ファイルの所有者(owner)、ファイルが属するグループ(group)、その他のユーザー(others)の3種類です。「その他のユーザー」とは、「ファイルの所有者(newuser)でもなく、ファイルが属するグループ(これもnewuser)に属するユーザーでもない」ユーザーとグループを意味します。

-    (rw-)   (rw-)  (r--)    1 newuser newuser
|      |       |      |
type  owner   group  others

ファイルタイプ(type)を表す最初の項目には、以下のいずれかが表示されます。

最初の項目に続く3つの組(所有者、グループ、その他のユーザーに対応する、それぞれ3つの項目)には、それぞれ以下の3種類の権限が表示されます。

それぞれの文字が表示されていれば、対応する権限が与えられています。ハイフン(-)は、その権限が与えられていないことを意味します。

haiku.txtの最初の列をよく見て、権限を確認してみましょう(図10-14を参照)。

[newuser@localhost newuser]$ ls -l haiku.txt
-rw-rw-r--    1 newuser newuser     150 Mar 19 08:08 haiku.txt
[newuser@localhost newuser]$

図 10-14. 権限の詳細表示

ファイルの所有者(この場合はnewuser)は、このファイルに対する読み込みと書き込みの権限を持っています。このファイルはプログラムではないので、newuserはその実行権限を持っていません(4文字目の「-」)。newuserグループも、同じように読み込みと書き込みの権限を持っています(5文字目と6文字目の「rw」)。所有者の場合と同じく、このファイルはプログラムではないので、newuserグループも実行権限を持っていません(7文字目の「-」)。

最後の3文字を見ると、newuserユーザーでもなくnewuserという名のグループのメンバーでもないユーザーは、ファイルを読み込むことは可能(8文字目の「r」)でも、そのファイルへの書き込みあるいはファイルの実行はできないことがわかります(9文字目と10文字目の「-」)。

ファイルの権限を変更するには、chmodコマンドを使います。

現在の権限設定は、次のようになっています。

-rw-rw-r--    1 newuser newuser     150 Mar 19 08:08 haiku.txt

所有者またはrootでログインしていれば、所有者、グループ、その他のユーザーに対するすべての権限を変更することができます。

ここで、所有者とそのグループはファイルの読み込みとファイルへの書き込みができます。このグループに属さないユーザーは、ファイルの読み込みだけが可能です(r--)。

注意権限の設定は重要です
 

ファイル権限がセキュリティ機能であることを思い出してください。すべてのユーザーにファイルの読み込み、書き込み、実行を許可すると、そのファイルを変更あるいは削除されてしまうというリスクが増大します。ですから、一般に、そのファイルを本当に必要としているユーザーにだけ読み込みと書き込みを許可すべきです。

ここでは、試しにすべてのユーザーにファイルへの書き込みを許可して、誰もがそれを読み込み、コメントを書き込んで保存できるようにしましょう。つまり、このファイルに対する権限のうちの「その他のユーザー」セクションを変更する必要があります。

自分自身がファイルの所有者であるため、rootへsuする必要はありません。最初にファイルを確認します。シェルプロンプトから、次のように入力してください。

ls -l haiku.txt

このファイルに関する情報が表示されます。

-rw-rw-r--    1 newuser newuser     150 Mar 19 08:08 haiku.txt

それでは、次のように入力してみましょう。

chmod o+w haiku.txt

ファイル情報を再度表示して、結果を確認してみましょう。次のようになっているはずです。

-rw-rw-rw-    1 newuser newuser     150 Mar 19 08:08 haiku.txt

これで、すべてのユーザーがこのファイルを読み込んだり書き込んだりできます(図10-15を参照)。

図 10-15. haiku.txtに関する権限

o+wというオプションは、ファイルhaiku.txtに対する、その他のユーザーによる書き込み権限を追加するようシステムに指示します。

haiku.txtに対する読み込み/書き込み権限を削除するときは、chmodコマンドを次のように使います。

chmod go-rw haiku.txt

結果は、次のようになります。

-rw-------    1 newuser newuser    150 Mar 19 08:08 haiku.txt

go-rwというオプションは、ファイルhaiku.txtに対するグループとその他のユーザーによる読み込み権限と書き込み権限を削除するようにシステムに指示します。

この設定方法は、chmodで権限を変更するときの「暗記法」と考えることができます。この方法を使えば、実際に必要なことは、chmodコマンドで使用するいくつかの記号と文字を覚えておくだけで済むからです。

この暗記法で使う記号を一覧にしておきましょう。

対象

u—ファイルを所有するユーザー(owner:所有者)

g—所有者が属するグループ(group)

o—その他のユーザー(others:所有者でもなく、所有者のグループにも属さない人)

a—全ユーザー(ugoすべて)

権限

r—読み込み権限

w—書き込み権限

x—実行権限

操作

+—権限の追加

-—権限の削除

=—これを唯一の権限とする

注意その他の権限
 

権限を表す記号には、もう1つ、tという記号もあります。これは、スティッキービット(sticky bit)を表します。このスティッキービットを立てると、ファイルを削除したり名前を変更したりできるユーザーを、そのファイルの所有者とそのディレクトリの所有者と書き込み権限を持つユーザーとrootだけに限定することができます(ファイルのプロパティ項第11章を参照)。

実際に試してみましょう。haiku.txtから、すべてのユーザーに対する権限を削除してみましょう。次のように入力します。

chmod a-rwx haiku.txt

この状態で、ファイルが読み込めるか試してみましょう。

[newuser@localhost newuser]$ cat haiku.txt
cat: haiku.txt: Permission denied
[newuser@localhost newuser]$

予定どおりの結果です。作成したユーザーさえファイルにアクセスすることができません。しかし、所有者ですから、いつでも権限を元に戻すことができます(図10-16を参照)。

[newuser@localhost newuser]$ chmod u+rw haiku.txt
[newuser@localhost newuser]$ cat haiku.txt
靴屋に行った
スニーカーを買った
コーヒー豆屋に行った
コーヒーを買った
コーヒーを持って家に帰った
靴を脱いだ
スニーカーをはいた
コーヒーをいれた
あー、リラックス
[newuser@localhost /]$

図 10-16. 権限の削除と復元

chmodでよく使われる代表的な設定を説明しておきましょう。

-Rオプションを追加すると、ディレクトリツリー全体に対する権限を変更することができます。

ここで、ディレクトリに対する実行権限の意味に注意してください。ディレクトリはアプリケーションと異なり「実行」することはできません。ディレクトリの場合の実行権限は、そのディレクトリ内に移動する権限を意味します。

たとえば、現在いるディレクトリにtigerというディレクトリがあり、このディレクトリに対する読み込みと書き込みのアクセスを、すべてのユーザーに許可するときは、次のように入力します。

chmod -R a+rw tigger

ただし、tigerに対する実行権限をその他のユーザー(others)に付与せずにおけば、誰が読み込み権限と書き込み権限を保有するかは問題になりません。なぜなら、誰もそのディレクトリの中に入っていくことはできないからです(アクセスしたいファイル名を正確に知らない限りは)。

別の例も示しておきましょう。次のように入力してください。

chmod a-x tigger

すべてのユーザーの実行権限を削除します。

ここでtigerに対してcdを実行してみるとどうなるでしょうか。

[newuser@localhost newuser]$ cd tigger
bash: tigger: Permission denied
[newuser@localhost newuser]$

それでは、所有者自身とグループの権限を復元しましょう。

chmod ug+x tigger

ここで、ls -dlでその結果をチェックすると、その他のユーザー(others)だけがtigerディレクトリへのアクセスを拒否されることがわかります。