Linux上でのファイルとディレクトリの権限ごとの挙動を忘れがちなのでざっと説明用にまとめてみる。
chmod
で変更するやつ
権限のみかた
$ ls -l
で、カレントディレクトリにあるファイルやディレクトリの権限を見れる
drwxrwxrwx. 2 core core 4096 Mar 22 11:02 dir
-rwxrwxrwx. 1 core core 0 Mar 22 11:02 file
一番ひだりの d
がディレクトリか否かを表してて、
その後ろの rwx
は3文字で1セット。
左から順番に、
所有権のあるユーザの権限、所有権のあるグループに所属するグループの権限、その他のユーザの権限
を表している。
r
は読み
w
は書き
x
は実行
の権限で
-rw-r--r--. 1 core core 0 Mar 22 11:05 foo
上記のようになっている場合は
foo
というファイルに対しては
core
というユーザが rw
(読み書き)の権限があって、
それ以外のユーザは r
(読み)の権限しかないことを表す。
なお、rootユーザは問答無用ですべての権限を持つ。
ファイル
特定のユーザ(グループ)以外には読ませたくないようなファイルや、特定のユーザ(グループ)からしか更新できないようなファイルを作りたいときに使用することが多い。
デフォルトの権限
ターミナルでファイルを作成すると 0644
の権限になる
core@dev ~/work $ touch file
core@dev ~/work $ ls -l
total 4
-rw-r--r--. 1 core core 0 Mar 22 11:08 file
書き込み権限
core@dev ~/work $ chmod 444 ./file
core@dev ~/work $ ls -l
total 4
-r--r--r--. 1 core core 0 Mar 22 11:08 file
core@dev ~/work $ echo "hogehoge" > file
-bash: file: Permission denied
特定のユーザ以外に書き込みをさせたくないファイルを扱うときに使う。
下手に書き込むと壊れるようなファイルとか。
書き込み権限がないファイルを削除しようとすると警告がでる。
core@dev ~/work $ touch file
core@dev ~/work $ chmod 400 file
core@dev ~/work $ ls -l
total 4
-r--------. 1 core core 0 Mar 22 11:20 file
core@dev ~/work $ rm file
rm: remove write-protected regular empty file 'file'?
読み込み権限
core@dev ~/work $ chmod 000 ./file
core@dev ~/work $ ls -l
total 4
----------. 1 core core 0 Mar 22 11:08 file
core@dev ~/work $ cat file
cat: file: Permission denied
特定にユーザ以外に読み込みさせたくないファイルを扱うときに使う。
秘匿情報を含む情報を扱うときとか。
実行権限
ファイルを実行する権限
スクリプトとかバイナリに使う
実行できないようなただのテキストファイルに付与しても意味ない
core@dev ~/work $ echo "hogehoge" > file
core@dev ~/work $ chmod 700 ./file
core@dev ~/work $ ls -l
total 8
-rwx------. 1 core core 9 Mar 22 11:22 file
core@dev ~/work $ ./file
./file: line 1: hogehoge: command not found
bashで実行した場合
core@dev ~/work $ echo "echo hogehoge" > file
core@dev ~/work $ chmod 700 ./file
core@dev ~/work $ ls -l
total 8
-rwx------. 1 core core 14 Mar 22 11:22 file
core@dev ~/work $ ./file
hogehoge
ターミナルやプロセスとして実行できるように付与することがほとんど
ディレクトリ
デフォルトの権限
core@dev ~/work $ mkdir foo
core@dev ~/work $ ls -l
total 8
drwxr-xr-x. 2 core core 4096 Mar 22 11:25 foo
デフォルトはファイルと違って先頭を除くと
rwxr-xr-x
になるので、ディレクトリの場合は
所有権のあるユーザは rwx
の権限で
それ以外のユーザは r-x
の権限になる
書き込み権限
core@dev ~/work $ mkdir foo
core@dev ~/work $ ls -l
total 8
drwxr-xr-x. 2 core core 4096 Mar 22 11:38 foo
core@dev ~/work $ chmod 500 ./foo/
core@dev ~/work $ ls -l
total 8
dr-x------. 2 core core 4096 Mar 22 11:38 foo
core@dev ~/work $ touch foo/test
touch: cannot touch 'foo/test': Permission denied
書き込み権限がない場合はディレクトリ以下にファイルを配置できなくなる
ファイル単位ではなくディレクトリ単位で保護したいときに使う。
読み込み権限
core@dev ~/work $ mkdir foo
core@dev ~/work $ chmod 000 ./foo/
core@dev ~/work $ ls -l foo/
ls: cannot open directory 'foo/': Permission denied
ディレクトリにアクセスできないので ls
などで参照できなくなる
実行権限
core@dev ~/work $ mkdir foo
core@dev ~/work $ touch foo/bar
core@dev ~/work $ chmod 600 ./foo/
core@dev ~/work $ ls -l foo/
ls: cannot access 'foo/bar': Permission denied
total 0
-????????? ? ? ? ? ? bar
ディレクトリに実行権限がない場合は、配下のファイルへのアクセス権がなくなる。
そのためファイルの情報自体にアクセスができなくなる。
ファイルの情報にアクセスできず権限が不明なため、読み書きもできなくなる。
ディレクトリへの読み書きの権限はあるので、 chmod
でディレクトリの権限を書き換えることはできる。