所有権と権限

この章の前半で、root のログインディレクトリへの cd を試したときに、以下のような友情のこもったメッセージが表示されました。

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

これが、Linux の持つセキュリティ機能の 1 つの実例です。UNIX のように、Linux はマルチユーザシステムであり、ファイル権限は、故意あるいは偶発的な不正操作に対する防御としてシステムが使用する 1 つの方法です。

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

[newuser@localhost newuser]$ su
Password: root のパスワード
[root@localhost newuser]# cd /root
[root@localhost /root]#

ただし、スーパーユーザへの切り換えが常に便利で、洗練された方法とは限りません。なぜなら、誤まって重要な設定ファイルをだいなしにする可能性が大きいからです。

すべてのファイルやディレクトリは、それを作成したユーザによって「所有」されます。ファイル sneakers.txt は、個人のログインディレクトリ内に作成したものなので、sneakers.txt は個人のものとなります。

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

読み込み、書き込みおよび実行は、権限付与における 3 つの主要設定です。

システム上のすべてのユーザは、登録時に一つのグループに加入させられるため、ファイルに対する読み込み権限、書き込み権限、または実行権限を一定のグループに与えるかどうかを指定することもできます。

ls コマンドで -l (long) オプションを使用して、sneakers.txt をより詳しく見てみましょう。

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

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

デフォルトグループ: デフォルトでは、選択したログイン名がグループ名であることを思い出してください。

Figure 15-16. sneakers.txt に対する権限

グループの権利に関する他の情報には、ファイル名、その作成日時およびサイズが含まれます。

これらすべてのダッシュ (-) や文字はどのような意味で一緒にされているのでしょうか?解読するのは、見た目ほど難しくありません。確認してみましょう。

-rw-rw-r--

この列には 10 のスロットがあります。最初のスロットは、ファイルのタイプを表します。残りの 9 つのスロットは、実際には、3 種類のユーザカテゴリに対する 3 つの権限のセットです。

これら 3 つのセットは、次のようになります。ファイルの所有者 (owner)、ファイルが属するグループ (group) およびその他 (others)。その他とは、「ファイルの所有者 (newuser) と newuser のグループ (これも newuser) に属するユーザ」以外のユーザとグループを意味します。

これらのファイル設定を少し広げてみましょう。

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

ファイルタイプを指定する最初の項目は、以下のいずれかを表します。

最初の項目に続く 3 つのセットの中には、以下のいずれかが表示されます。

owner、group、あるいは others の中にダッシュ (-) が表示されている時は、特定の権限が付与されていないことを表します。

sneakers.txt の最初の列を再度確認して、その権限を確認しましょう。(Figure 15-17を参照)。

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

Figure 15-17. 権限の詳細

ファイルの所有者である newuser は、このファイルに対する読み込みと書き込みの権限を持っています。このファイルはプログラムではないので、newuser はその実行権限を持っていません。グループ、newuser も、同じように sneakers.txt に対する読み込みと書き込みの権限を持っています。所有者 newuser の場合と同じく、このファイルはプログラムではないので、newuser グループも実行権限を持っていません。

最後のセットを見ると、newuser ユーザでもなく newuser という名のグループのメンバーでもないユーザは、ファイルを読みこむことは可能でも、そのファイルへの書きこみあるいはファイルの実行はできないことが分かります。

chmod コマンド使用して、ファイル権限を変更することができます。

sneakers.txt をもう少し使用し、chmod コマンドで権限を変更してみましょう。

初期の権限設定を持つオリジナルファイルは、次のようになっています。

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

自分がファイルの所有者であるか、root アカウントでログインしていれば、owner、group、および others に対する設定を好きなように組み合わせて、権限を変更することができます。

現在は、所有者 (つまり、自分) および自分のグループ (newuser) はファイルの読み込みおよびファイルへの書き込みが可能です。

自分のグループに属さないユーザは、ファイルの読み込みのみが可能です (r--)。

権限が必要です

ファイル権限がセキュリティ機能であることを思い出してください。すべてのユーザにファイルの読み込み、書き込みおよび実行を許可したら、不正操作のリスクが増加する可能性があります。そのため、概して、ファイルの作成者はすべてのユーザにファイルの読み込みと書き込みを許可することを恐れるはずです。

ただし、ここでは、すべてのユーザにファイルへの書き込みを許可して、誰もがそれを読み込み、注釈を書き込んで保存できるようにしましょう。つまり、ファイルの「others」セクションを変更しなければなりません。

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

ls -l sneakers.txt

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

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

ここで、次のように入力します。

chmod o+w sneakers.txt

その結果をチェックするために、ファイルの詳細を再度リストすることができます。ファイルは以下のようになります。

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

これが、その結果です。すべてのユーザがこのファイルの読み込みと書き込みを行うことができます (Figure 15-18)。

Figure 15-18. sneakers.txt に対する権限の変更

[o+w] と入力したということは、「others に対して、ファイル sneakers.txt への書き込み権限を追加する」ように指示したことになります。

たとえ、このファイルが簡単な買い物リストであっても、sneakers.txt から読み込みおよび書き込み権限を削除するのであれば、chmod コマンドを使用し、次のように入力して読み込みと書き込みの両方の権限を削除することができます。

chmod go-rw sneakers.txt

その結果は、次のように表示されます。

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

[go-rw] と入力することにより、「group と others に関する、ファイルの読み込と書き込みの権限を削除する」ように指示しました。

これらの設定を、chmod で権限を変更するときの速記法の1つと考えることができます。なぜなら、実際に必要なことは、chmod コマンドで使用する 2、3 の記号と文字を覚えておくことだけだからです。

以下が、速記法で表される内容の一覧です。

ID

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

g -- そのユーザが属するグループ (group)

o -- その他 (others: 所有者でも所有者のグループでもない)

a -- 全ユーザ (u, go)

権限

r -- 読み込み権限

w -- 書き込み権限

x -- 実行権限

アクション

+ -- 権限の追加

- -- 権限の削除

= -- 唯一の権限とする

実際に試してみませんか?sneakers.txt から、すべてのユーザに対する権限を削除してみましょう。

chmod a-rw sneakers.txt

以下のようにして、このファイルを読みこめるか試してみましょう。

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

思ったとおりの結果で、作成したユーザさえファイルにアクセスすることができません。ただし、ファイルは作成者に属しているため、作成者は常にその許可を変更して作成者自身が読み込みと書き込みのアクセスを行えるようにできます。(Figure 15-19を参照)。

[newuser@localhost newuser]$ chmod u+rw sneakers.txt
[newuser@localhost newuser]$ cat sneakers.txt
buy some sneakers
then go to the coffee shop
then buy some coffee
bring the coffee home
take off shoes
put on sneakers
make some coffee
relax!
[newuser@localhost newuser]$

Figure 15-19. 権限の削除と復元

chmod で使用することができる、一般的な設定の例をいくつか説明します。

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

ただし、少しだけ無理があります。つまり、実際にはディレクトリをアプリケーションとして「実行する」ことはできません。その代わり、ディレクトリに対する実行権限を追加あるいは削除すると、実際にはそのディレクトリに対する検索権限を付与 (あるいは剥奪) することになります。

ログインディレクトリに含まれる tigger ディレクトリに対する読み込みと書き込みのアクセスを、すべてのユーザに許可するには、次のように入力します。

chmod -R a+rw tigger

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

たとえば、次のように、

chmod a-x tigger

と入力して、すべてのユーザに対する実行アクセスを削除します。

ここで tigger に対して cd を試すとどうなるでしょうか。

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

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

chmod ug+x tigger

ここで、ls -dl でその結果をチェックすると、その他 (others) のみが tigger へのアクセスを拒否されることが表示されます。