パーミッション:ファイルごとに持ち主を管理

 前回,一般ユーザーとスーパーユーザーでは,閲覧・編集,あるいは実行できるファイル/ディレクトリに違いがあると述べた。では,LinuxをはじめとするUNIX系OSでは,どのようにして,ファイルやディレクトリへのアクセスに制限を加えているのだろうか。

 あるディレクトリ内で,ファイルやディレクトリの情報を表示するlsコマンドを引数“-l”を付けて実行してみよう。図3のように,ファイル名(あるいはディレクトリ名)とその属性情報(ファイル・サイズ,持ち主など)が表示される。ファイルやディレクトリには,それぞれ持ち主(オーナー)が存在する。

図3●ファイルの情報を表示する
図3●ファイルの情報を表示する
lsコマンドに引数“-l”を付けて実行した結果。行頭の文字が“-”のものはファイル,“d”のものはディレクトリである。

 図3の行頭に,“r”,“w”,“x”,“-”という文字・記号で表記されているブロックがある。行頭の文字が“-”のものはファイル,“d”のものはディレクトリである。そして,各行とも2文字目以降は“r”が読み出し可能,“w“が書き込み可能,“x”が実行可能,そして“-”が読み出し/書き込み/実行のいずれも不可であることを表している。

 
図4●アクセス権限
  図4●アクセス権限
ユーザー,グループ,その他の一般ユーザーという順番でファイルのアクセス権が表示される。

 図3から分かるように権限(パーミッション)は,ファイルやディレクトリ単位に設定されている。権限を列記したブロック(各行の2文字から10文字目)に,そのファイル/ディレクトリにだれがどのようなアクセスをする権限を持っているのかが記述されている。2~4文字目は(持ち主である)ユーザー(オーナー),5~7文字目は(持ち主が参加するある1つの)グループ,8~10文字目はその他のユーザーの権限である(図4)。

 例えば,“program”というファイルが存在し,図4に示したアクセス権が設定されているとしよう。ユーザー“asou”がこのファイルの持ち主ならば,asouはこのファイルの中身を見たり,書き替えたりできる。programが実行ファイルなら,実行もできる。また,asouが属するグループ“test”に属するユーザーならば,中身の閲覧と実行ができる。その他の一般ユーザーは,中身の閲覧しかできない。

 ただし,ファイルに設定された権限だけでアクセス制限がかけられているわけではないことに注意していただきたい。対象ファイルが存在する,ディレクトリに設定された権限が影響するのである。

 表1に,ファイル操作/コマンド実行の許可条件の例を示した。例えば,削除コマンドのrmを用いてファイルを消す場合には,対象となるファイルが存在するディレクトリに対する書き込み権限と実行権限が求められる。このディレクトリに対する書き込み権限と実行権限を持つユーザーであれば,対象ファイルに設定された権限とは無関係に,そのファイルを削除できるのだ。少々分かりにくいだろうが,ファイル操作/コマンド実行にはファイルに設定された権限だけではなく,ディレクトリに設定された権限が影響を及ぼすことを記憶しておきたい。

表1●ファイル操作/コマンド実行の許可条件
表1●ファイル操作/コマンド実行の許可条件