所有権と権限

 この章の前半で、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]#

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

 すべてのファイルやディレクトリは、それを作ったユーザーによって「所有」されています。ファイルsneakers.txtは読者が自分のログインディレクトリに作ったものなので(the section called リダイレクトの使用を参照)、読者に「属します」。

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

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

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

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

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

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

Tipデフォルトグループ
 

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

Figure 10-12. sneakers.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つ組)には、それぞれ以下の3種類の権限が表示されます。

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

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

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

Figure 10-13. 権限の詳細

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

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

 sneakers.txtのファイル権限は、chmodコマンドを使って変更することもできます。

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

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

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

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

Caution権限の設定は重要です
 

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

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

 自分自身がファイルの所有者であるため、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 10-14を参照)。

Figure 10-14. sneakers.txtに対する権限の変更

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

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

chmod go-rw sneakers.txt

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

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

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

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

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

対象

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

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

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

a —全ユーザー(ugo

権限

r —読み込み権限

w —書き込み権限

x —実行権限

操作

+ —権限の追加

- —権限の削除

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

Noteその他の権限
 

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

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

chmod a-rwx sneakers.txt

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

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

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

[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 10-15. 権限の削除と復元

 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ディレクトリへのアクセスを拒否されることが表示されます。