ユーザ権限とアクセス権

ファイルの所有者と所有グループ

 ファイル作成者のユーザIDとグループIDがファイルの所有者と所有グループとなる。所有者と所有グループはファイルの情報としては重要な属性である。所有者は chown コマンドで変更でき、所有グループは chgrp で変更できる。

所有者の変更

 ファイルの所有者を変更するには chown コマンドを使う。

$ chown ユーザ[.グループ ] ディレクトリ
$ chown ユーザ[.グループ ] ファイル

 ユーザとグループを変更するには root ユーザである必要がある。ディレクトリとファイルは区別なく変更できる。ユーザとグループの区切りに : を使うことも可能である。

オプション

-R ディレクトリを対象にする、ディレクトリの中のディレクトリやファイルを再帰的に変更する。
再帰的 

ディレクトリの中にディレクトリがあれば、中のディレクトリを全て辿る

所有グループの変更

 ファイルの所有グループを変更するにはchgrp コマンドを使う。

$ chgrp グループ ディレクトリ
$ chgrp グループ ファイル

 グループを変更できる。ディレクトリとファイルは区別無く変更できる。

オプション

-R 
ディレクトリを対象にする。ディレクトリの中でディレクトリやファイルを再帰的に変更する。

ファイルとアクセス権

 ファイルは 「 ファイルを所有するユーザ 」、「 ファイル所有グループからファイル所有者を除いたユーザ 」、「 その他のユーザ 」 と3つのレベルで権限を設定できる。

 ファイルにはユーザで分けた3つのレベルごとに 「 読み 」、「 書き 」、「 実行 」 の3つの権限が存在する。ファイルのモードを変更するには、chmod コマンドを使う。

ファイルに設定できるアクセス

 ファイルのモードとしては読み、書き、実行の3つの権限がある。所有ユーザ、所有グループで所有者以外のユーザ、所有グループ以外のユーザごとに3つの権限を設定できる。

 ls コマンドに -l オプションを付けて表示される1つ目のカラムがファイルのモードを示している。モードを表す1つ目のカラムは次の様になる。

linux 01

ファイル種別のr,w,x の意味
記号 意味
r 読み込み
w 書き込み
x 実行、またはディレクトリの移動

 rwx はユーザとグループとその他の3つに対して指定できる。r が表示されればファイルの読み込みが可能で、w が表示されればファイルの書き込みが可能である。 w が表示されれば、ファイルをプログラムとして実行できるか、またはディレクトリであればディレクトリへ移動できる。

実行例 サンプルファイルを作成する

$ touch user

ls コマンドの -l オプションで確認する

$ ls -l user
-rw-r--r--  1 hoge  staff  0  1 27 14:19 user
( 所有者が読み書き、所有グループが読み、その他が読みになっていることがわかる )

アクセス権の変更

 ファイルのアクセス権を変更するには chmod コマンドを使う。

$ chmod モード[,モード]...ディレクトリ 
$ chmod モード[,モード]...ファイル
$ chmod 8進数表記のモード ディレクトリ 
$ chmod 8進数表記のモード ファイル 

 ファイルのモードを所有ユーザと所有グループとそれ以外のユーザについて設定する。モード指定の書き方で次の2通りの記述方法がある。

  • モードの書式を複数書き、間まで区切って指定

* 8進数3桁で各ユーザのレベルを指定

オプション

-R
ディレクトリを対象にする。ディレクトリの中のディレクトリを再帰的に変更する。

linux 02

 モードは次の様に u ( 所有ユーザ ) 、 g ( 所有グループ ) 、 o ( その他 ) に対して、r ( 読み )、 w ( 書き )、 x ( 実行、またはディレクトリの変更 ) を設定したり ( = )、加えたり ( + )、取り消したり ( - ) できる。

 u,g,o の全てに同じ権限を指定する時は a を指定する。

ファイルモードの変更

実行例1 サンプルファイルを作成しモードを確認する。

$ touch chownfile
$ ls -l chownfile
-rw-r--r--  1 hoge  staff  0  1 27 15:20 chownfile

 -rw-r--r-- を -rw-rw-r-- に変更したい場合は、グループにw (書き) を加えたいので、g+w とする。

 -rw-rw-r-- を -w-rw-rw- に変更したい場合は、ユーザの r (読み) を取り除き、その他に w (書き) を加えたいので、 u-r,o+w とする。

 -w-rw-rw- を -w-rwxrwx に変更したい場合は、グループとその他に x (実行) を加えたいので go+x とする。

実行例2 グループに w ( 書き ) を追加する
$ chmod g+w chownfile
( グループに w ( 書き ) を追加 )

$ ls -l chownfile
-rw-rw-r--  1 hoge  staff  0  1 27 15:20 chownfile
実行例3 ユーザから r ( 読み ) を削除して、その他に w ( 書き ) を追加する
$ chmod u-r,o+w chownfile
( ユーザから r ( 読み ) を削除して、その他に w ( 書き ) を追加 )

$ ls -l chownfile
--w-rw-rw-  1 hoge  staff  0  1 27 15:20 chownfile
実行例4 グループとその他に x ( 実行 ) を追加する
$ chmod go+x chownfile
( グループとその他に x ( 実行 ) を追加 )

$ ls -l chownfile
--w-rwxrwx  1 hoge  staff  0  1 27 15:20 chownfile

ファイルモードを8進数で変更する

 -rw-rw-r-- としたい場合は8進数の664を指定し、--w-rw-rw- としたい場合は266を指定し、 --w-rwxrwx としたい場合は277を指定する。

サンプルファイルのファイルモードを元に戻す
$ chmod u+rw-x,go+r-wx chownfile
( ファイルモードを 「 rw-r--r-- 」 に変更している )

$ ls -l chownfile               
-rw-r--r--  1 hoge  staff  0  1 27 15:20 chownfile
ファイルモードを664に変更する
$ chmod 664 chownfile
( ファイルモードを664 に変更 )

$ ls -l chownfile  
-rw-rw-r--  1 hoge  staff  0  1 27 15:20 chownfile
ファイルモードを266に変更する
$ chmod 266 chownfile
( ファイルモードを266に変更 )

$ ls -l chownfile
--w-rw-rw-  1 hoge  staff  0  1 27 15:20 chownfile
ファイルモードを277に変更する
$ chmod 277 chownfile
( ファイルモードを277に変更 )

$ ls -l chownfile
--w-rwxrwx  1 hoge  staff  0  1 27 15:20 chownfile

 8進数で変更する場合、記述が短いが設定値を覚えていないとわかりにくい。一方で通常の変更はわかりやすいが記述が長い。

linux 02

 モードの指定にsetuid ビットと setgit ビットとsticky ビットという特殊な属性がある。setuid ビット、あるいはsetgid ビットがついたプログラムで実行すると、ファイル所有者あるいは所有グループの権限で実行される。

 具体的には、root ユーザ所有で setuid ビットがセットされたプログラムは、一般ユーザが実行した場合でも root ユーザが実行した場合と同じ動作をする。

 sticky ビットが付いたディレクトリ内のファイルは所有者以外が削除できなくなる、 ( Linuxではファイルについてのスティッキービットは無視される。 ) Linuxでは一般的に /tmp ディレクトリにスティッキービットが付与される。

ファイルモードで setuid/setgid/sticky の変更・確認

サンプルファイルを作成し、ファイルモードを確認する

$ touch idbitfile

$ ls -l idbitfile
-rw-r--r--  1 hoge  staff  0  1 27 16:45 idbitfile
setuid ビットを追加する
$ chmod u+s idbitfile
( setuid ビットを追加 )

ls -l idbitfile
-rwSr--r--  1 hoge  staff  0  1 27 16:45 idbitfile
setuid ビットを削除し、 setgid を追加する
$ chmod u-s,g+s idbitfile
( setuid ビットを削除し、 setgid を追加 )

$ ls -l idbitfile
-rw-r-Sr--  1 hoge  staff  0  1 27 16:45 idbitfile

3sticky ( スティッキー ) ビットを追加する。

$ chmod  +t idbitfile
( sticky ( スティッキー ) ビットを追加 )

$ ls -l idbitfile
-rw-r-Sr-T  1 hoge  staff  0  1 27 16:45 idbitfile

ファイル作成のモード

 ファイルを新規に作成するとユーザごとに規定されたパーミッションである644、または664といったパーミッションが設定されてファイルが作成される。

 umask コマンドを使うことで、指定したパーミッションでファイルを作成することができる。

$ umask [8進数のモードのマスク値]

現在のマスク値を表示

 umask コマンドに続けてマスク値を設定しなかった場合、現在のマスク値を表示できる。

マスク値の変更

 umask コマンドに続けてマスク値を設定すると、指定されたパーミッションでファイルが作成される。umask コマンドは指定しないビットを指定できる。

 umask コマンドで指定できるマスク値は、全てのユーザが読み書きできるパーミッション660から、指定したいパーミッションを引き算することでマスク値を求めることができる。

例 umask を変更してファイルを作成

$ umask 
022
(現在のマスク値を取得)
$ touch umask0022
( ファイルを作成 )

$ umask 070
( マスク値を070に変更 )

$ touch umask0070
( ファイルを作成 )

$ umask 072
( マスク値を変更 )

$ touch umask0072
( ファイルを作成 )

$ ls -l umask00*
-rw-r--r--  1 hoge  staff  0  1 31 15:10 umask0022
-rw----rw-  1 hoge  staff  0  1 31 15:10 umask0070
-rw----r--  1 hoge  staff  0  1 31 15:11 umask0072

 touch コマンドはモードが0666のファイルを作ろうとするが、umaskによりマスクされるために上記のモードのファイルができる。

-S オプションをつけるとモードを表示、または設定するとき、8進数ではなく意味が分かり易い形式を使用できる。

$ umask -S
u=rwx,g=rx,o=rx
( 現在のマスク値を表示 )

$ touch umask0022
(ファイルを作成)

$ umask -S u=rw,g=,o=rw
( マスク値を070に変更 )

$ touch umask0070
( ファイルを作成 )

$ ls -l umask00*
-rw-r--r--  1 hoge  staff  0  1 31 15:19 umask0022
-rw----rw-  1 hoge  staff  0  1 31 15:23 umask0070

 umask コマンドによるモードの制限は、umask コマンドを実行したシェル内でしか有効でないことに注意する。デフォルトのモードは.bashrc等のログインシェル内で設定することができる。