VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

ファイルのパーミッション設定、ディレクトリは要注意

Linuxのファイル、ディレクトリのパーミッション設定についてまとめました。

目次です。
1)パーミッションを確認するには?
2)パーミッションの設定方法
3)誤解し易いディレクトリのパーミッション
 

1)パーミッションを確認するには?


 
下記のように”ls -al”コマンドで所有者、権限を表示できます。
 
$ ls -al
合計 12
drwxrwxrw- 3 rails rails 4096 9月 17 11:06 2013 .
drwxr-xr-x 38 rails rails 4096 9月 17 09:18 2013 ..
drwxrwxrwt 2 rails rails 4096 9月 17 10:22 2013 testdir
-rw-rw-r-- 1 rails rails 0 9月 17 11:06 2013 testfile

○一番左端の文字
“d”はディレクトリ、”-“の場合はファイル。
 
○その右側の9文字はパーミッションの設定値
・最初の3文字分がファイルの所有者自身の権限
・次の3文字が同一グループのユーザーの権限
・最後の3文字がそれ以外のユーザーに対する権限
 
○各”r”、”w”、”x”の意味

ファイル ディレクトリ
“r”読み(4) ファイルの内容を表示 ディレクトリ内のリスト表示
“w”書き(2) ファイルの上書き、変更 ディレクトリ内にファイル作成、削除
“x”実行(1) 実行ファイルの実行 そのディレクトリに移動

 
○ファイルの所有者、グループ
・上記のlsコマンド表示例の”rails rails”の部分は、そのファイルの所有者と所有者のグループ
 

2)パーミッションの設定方法


 
chmodコマンドで設定します。
 
“testfile”というファイルに対して下記権限を付与する場合を例に示します。
 
所有者:読み(4)、書き(2)、実行(1)
グループ:読み(4)、書き(2)、実行(1)
他ユーザ:読み(4)、実行(1)
 
各権限に与えられている数値を足し合わせて下記コマンドで設定します。
 
$ chmod 775 testfile
$ ls -al testfile
-rwxrwxr-x 1 rails rails 0 9月 17 11:06 2013 testfile

 

3)誤解し易いディレクトリのパーミッション


 
ファイルのパーミッションについては、すぐにイメージできるかと思いますが、ディレクトリについては少し分かりずらい部分もあるので別途説明します。
 
以下、所有者が”rails”のディレクトリに対して他のユーザーがどの操作が実行できるか例示しながら説明します。
 
①読込権限がない場合
 
下記のようにディレクトリに対して読み込み権限が無いため拒否されます。
 
$ ls -al
drwxrwx--- 2 rails rails 4096 9月 17 09:39 2013 testdir

$ ls testdir
ls: cannot open directory testdir: 許可がありません

 
②読込権限はあるが実行権限が無い場合
 
例)所有者が”rails”のディレクトリに対して他のユーザーが操作
 
下記のようにファイルの一覧は表示できますが、ディレクトリの実行権限が無いためディレクトリ内に移動する事はできず、ファイルの所有者、権限情報も表示できません。

$ ls -al
drwxrwxr-- 2 rails rails 4096 9月 17 09:39 2013 testdir

$ ls -al testdir
ls: cannot access testdir/testevery: 許可がありません
ls: cannot access testdir/testfile: 許可がありません
ls: cannot access testdir/..: 許可がありません
ls: cannot access testdir/.: 許可がありません
合計 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? testevery
-????????? ? ? ? ? ? testfile
 
$ cd testdir
-bash: cd: testdir: 許可がありません

 
③読込、実行権限はあるが書込権限がない場合
 
下記のように、”testdir”内に移動する事はできますが、”testdir”に書込権限が無いためファイルを新規作成する事はできません。

$ ls -al
合計 12
drwxrwxr-x 3 rails rails 4096 9月 17 09:26 2013 .
drwxr-xr-x 38 rails rails 4096 9月 17 09:18 2013 ..
drwxrwxr-x 2 rails rails 4096 9月 17 09:39 2013 testdir

$ cd testdir

$ touch testwrite
touch: cannot touch `testwrite': 許可がありません

 
④読込、実行、書込権限がある場合
 

$ ls -al
drwxrwxrwx 2 rails rails 4096 9月 17 09:39 2013 testdir

ディレクトリに書込権限があるとファイルを新規作成できるようになります。ただし、ファイルの削除の権限も付与されてしまうので注意が必要です。
 
(a)ファイルの新規作成が出来るようになる
 

$ touch testwrite
$ ls -al
-rwxrwxrwx 1 rails rails 0 9月 17 09:39 2013 testevery
-rw-rw-r-- 1 rails rails 0 9月 17 09:29 2013 testfile
-rw-rw-r-- 1 test-wp test-wp 0 9月 17 10:03 2013 testwrite

 
(b)ディレクトリに書込権限があると他のユーザーが所有するファイルも削除できてしまう
 
下記のように”testfile”は、他ユーザーに対しては書込権限を付与していないのでファイルに対して変更させたくないという意図があるにも関わらず、他のユーザーが削除出来てしまいます。
ファイルの削除は、ディレクトリ権限で制御されているためです。
 
これを防ぎたい場合は、④で示すスティッキービットの設定を行います。

$ ls -al
-rw-rw-r-- 1 rails rails 0 9月 17 09:29 2013 testfile

$ rm testfile
rm: remove write-protected 通常の空ファイル `testfile'? y

 
④他のユーザーにファイル作成は許可するが、他のユーザーのディレクトリ、ファイル削除は禁止したい場合
 
下記のようにディレクトリに対してスティッキービットを設定します。
 
スティッキービットが設定されているディレクトリに対しては、その配下のディレクトリ、ファイルの削除は、自分が所有しているものしか出来なくなります。
 
設定方法)
下記のように、”chmod +t ディレクトリ名”で設定します。
ディレクトリのパーミッション表示の一番右側に”t”が表示されるようになります。

$ chmod +t testdir

$ ls -al
drwxrwxrwt 2 rails rails 4096 9月 17 10:07 2013 testdir

スティッキービットを設定すると、下記のように他のユーザーが所有するファイルは削除できなくなります。

$ rm testfile
rm: remove write-protected 通常の空ファイル `testfile'? y
rm: cannot remove `testfile': 許可されていない操作です

 
⑤ディレクトリの実行権限は下の階層のディレクトリにも影響するので注意
 
例えば、下記のようなディレクトリがあった場合
/home/rails/dir1/dir2/dir3/
 
dir1の書込権限を削除したとしても下層のdir2、dir3で急に書込出来なくなるということは無いと思いますが、dir1の実行権限を削除してしまうと、下層のdir2、dir3にも移動(アクセス)出来なくなってしまいます。
 
あるファイルに対して権限が足りなくて操作できない場合、書込権限の場合はその親ディレクトリの権限を見ればすぐに分かりますが、実行権限が足りなくて操作できない場合は、ずっと上位のディレクトリまで確認しなくはいけない場合があります。

モバイルバージョンを終了