40.2. ファイルの所有者と権限

Linux や UNIX は、1 台のシステムに複数のユーザーが同時にログインして使用することができるマルチユーザー対応 OS です。そのために、ユーザーがファイルの読み込み、書き込み、あるいはコマンドを実行するには、そのファイルに対するアクセス権限を持っている必要があります。アクセス権限を持たないユーザーは、そのファイルの読み込みや書き込みを行うことはできません。このように、ファイルやディレクトリに対する許可属性(パーミッション)の設定は、システムのセキュリティを操作する最も基本的な機構を提供しています。ファイルやディレクトリは、他にも様々な属性を保持しています。それらの属性は、以下のように ls コマンドで確認することができます。

$ ls -l
total 40
drwxr-xr-x    2 taro     taro         4096  Sep  3 21:13 data/
-rw-r--r--    1 taro     taro        12809  Sep  3 21:08 sample1.txt
-rw-r--r--    1 taro     koba         9364  Sep  3 21:08 sample2.txt
-rw-rw-rw-    1 taro     taro         5489  Sep  3 21:08 sample3.txt

各フィールドの意味は左から以下の通りです。

ファイルタイプ

ファイルタイプとパーミッションを示すフィールドは 10 文字で構成されますが、最初の 1 文字がファイルタイプを表し、残りの 9 文字がファイルの許可属性(パーミッション)を表しています。ファイルタイプを表す文字には以下の種類があります。

表 40-2. ファイルタイプの種類

-普通のファイル
dディレクトリ
lシンボリックリンク
cキャラクタ型デバイスファイル
bブロック型デバイスファイル

c や b は、ハードウェアデバイスにアクセスするためのインターフェースとなるデバイスファイルです。シンボリックリンクは、深い階層に位置するファイルやディレクトリへのアクセスを簡単にしたい場合やソフトウェアバージョン間のディレクトリ配置位置の違いを吸収したい場合などに利用されます。

パーミッション

ファイルタイプに続く残りの 9文字がそのファイルやディレクトリのパーミッションを表しています。パーミッションは以下のように最初の 3文字は所有者、次の 3文字はグループ、最後の 3文字はその他のユーザーのパーミッションを表します。所有者とは、このファイルやディレクトリを作成したユーザーを意味します。グループについては、第25章 を参照してください。

つまり、上記の sample1.txt ファイルの場合は、所有者に rw- 、グループに、r-- 、その他のユーザーに r-- のパーミッションが設定されていることを表しています。これらのパーミッションで使用される文字(r、w、x、-)の意味は次の通りです。

表 40-3. ファイルのパーミッション

r読み込み可能
w書き込み可能
x実行可能
-権限なし

この例では、sample1.txt ファイルの所有者である taro は読み書き可能(rw-)ですが、その他のユーザーは読み込みだけが可能(r--)な権限が与えられています。また、x はシェルスクリプトやプログラムなどの実行ファイルに付与される権限で、そのプログラムの実行が可能であることを意味します。また、ディレクトリに x の権限が与えられている場合は、そのディレクトリへの移動が可能であることを意味します。なお、Turbolinux 10 Server で新規ファイルを作成すると、ファイルのパーミッションは 644(rw-r--r--)が標準で設定されます。ディレクトリの場合は 755(rwxr-xr-x)となります。パーミッションの変更は、chmod コマンドを使用します。

パーミッションには上記で解説した、r、w、x、-、の他にもスティッキービット、SUID ビット、SGID ビットと呼ばれる特殊な権限もあります。スティッキービットは、ファイルの所有者、もしくはディレクトリの所有者だけがファイルの削除を行えるようにするための権限です。例えば、/tmp ディレクトリのパーミッションを確認すると、次のように最後の文字が t であることがわかります。

drwxrwxrwt   18 root     root         4096  Sep  3 19:47 /tmp/

/tmp はすべてのユーザーに書き込み権限が与えられたディレクトリで、一時的なファイルを保存するためのディレクトリとして利用されています。しかし、単に書き込み権限を与えただけでは、他のユーザーのファイル上書きしたり、削除してしまうことも可能です。スティッキービットをディレクトリに設定すると他のユーザーがファイルを削除できなくなります。

SUID ビットと SGID ビットは、一時的に異なるユーザー権限でプログラムの実行を可能とするために使用されます。例えば、passwd コマンドを実行すると、一般ユーザーが自分のパスワードを変更することができますが、ユーザーのパスワード情報を管理している /etc/shadow ファイルには、root のみ読み書き可能な権限(rw-------)が設定されています。そこで、passwd コマンドには、一般ユーザーもパスワード情報の更新ができるように、一時的に root の権限を与える SUID ビットが設定されています。

-r-s--x--x    1 root     root        15600  Sep  3 14:52 /usr/bin/passwd*

このように、SUID ビットが指定されたファイルは、所有者の実行権限を表す文字に s が設定されます。また、SGID ビットが指定されたファイルの場合は、所有グループの実行権限に s が設定されます。SGID が設定されたファイルは、SUID と同様に、コマンド実行時に一時的に所有グループの権限が適用されます。このように、SUID と SGID は便利な機能ではありますが、root の権限を一般ユーザーに使用させることによるセキュリティホールの原因ともなり得るため、SUID、SGIDの使用は極力避けるべきです。

ハードリンクの数

リンクには、先に述べたシンボリックリンクとハードリンクの 2つの種類が存在します。シンボリックリンクとは、実体は別なところに存在するファイルへのパスを記録しているにすぎません。これに対して、ハードリンクはどちらのファイルも同じディスク領域を示しています。しかし、ハードリンクはファイルシステムをまたいで作成できないなどの制限があるため、リンクを作成する場合は、シンボリックリンクを使用するのが一般的です。

所有者/グループ

そのファイルを所持するユーザー名、グループ名が表示されます。一般ユーザーはファイルの所有者を変更することはできません。root ユーザーがファイルの所有者、またはグループを変更するには、chown や chgrp コマンドを使用します。

タイムスタンプ

そのファイルが更新された最新日時が表示されます。