ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

Linux のディレクトリとファイルのパーミッション組み合わせと振る舞い

パーミッションとその組み合わせ

Linuxディレクトリとファイルのパーミッションが組み合わさった時、どうふるまうのかを確認します。

ディレクトリ・ファイル単体

Linuxディレクトリ・ファイルのパーミッション表記で使用される文字は以下の定義がされています。

ファイル ディレクト
“R”読み(4) ファイルの内容を表示 ディレクトリ内のリスト表示
“W”書き(2) ファイルの上書き、変更 ディレクトリ内にファイル作成、削除
“X”実行(1) 実行ファイルの実行 そのディレクトリに移動
ファイルのパーミッション設定、ディレクトリは要注意 | VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

w権限で「ファイルの作成・削除」はディレクトリに、「ファイルの上書き・変更」はファイルに権限付与されることにご注意ください。

ディレクトリと子ディレクトリの関係

ディレクトリとファイルの関係

  • ファイルの操作を行うためには、ルートディレクトリ~ファイルの存在するディレクトリまでのx権限が必要となります。
    • 以降に挙げる全ての操作の前提となります。
  • ファイルの内容を表示するにはファイルのr権限が必要となります。
  • ファイルの上書き・変更にはファイルのw権限が必要となります。
    • ファイルをエディタなどで編集・保存する際はr権限も必要となります。
  • 実行ファイルの実行にはファイルのrx権限が必要となります。

まとめ

ディレクトリとその中のファイル操作することを想定したパーミッション設定をまとめます。これらをベースに必要最小限の権限のみを設定しましょう。

◎ルートディレクトリ~親ディレクト

rx権限(リスト表示・移動)を設定します。

◎子ディレクト

rx権限(リスト表示・移動)を設定します。

ディレクトリ内のファイル作成/削除があればw権限(ファイル作成・削除)も設定します。この時、ルートディレクトリ~親ディレクトリにw権限を設定する必要はありません。

◎ファイル

読み取りのみ:r権限
読み書きする:rw権限
実行する:rx権限(+必要に応じてw権限)

検証結果

今回の検証では設定するパーミッションにちなんだ名前をディレクトリ・ファイルに付けました。

名前 パーミッション
none ---
x --x
w -w-
wx -wx
r r--
rx r-x
rw rw-
rwx or all rwx

ディレクトリと子ディレクトリの関係

ディレクトリと子(サブ)ディレクトリにそれぞれパーミッションが設定された時、子ディレクトリ内でどのような操作が可能かを確認します。

操作 コマンド
ディレクトリ内のリスト表示 ls /all/{updir}/{dir}
ディレクトリ内にファイル作成・削除 touch /all/{updir}/{dir}/a.txt
そのディレクトリに移動 cd /all/{updir}/{dir}

{updir}:親ディレクト
{dir}:子ディレクト
a.txtは事前に存在しない。

ディレクトリのx権限有無でlsコマンドの実行結果がどのように変わるかを示します。
ディレクトリのx権限がないと、リスト表示はできますがアクセス許可がないというエラーが発生します。

$ ls /all/x/r
ls: /all/x/r/none にアクセスできません: 許可がありません
ls: /all/x/r/r にアクセスできません: 許可がありません
ls: /all/x/r/rw にアクセスできません: 許可がありません
ls: /all/x/r/rwx にアクセスできません: 許可がありません
ls: /all/x/r/rx にアクセスできません: 許可がありません
ls: /all/x/r/w にアクセスできません: 許可がありません
ls: /all/x/r/wx にアクセスできません: 許可がありません
ls: /all/x/r/x にアクセスできません: 許可がありません
none  r  rw  rwx  rx  w  wx  x
$ ls /all/x/rx
none  r  rw  rwx  rx  w  wx  x

検証結果を一覧にして示します。"OK"が操作可能です。

updir dir 表示(ls) 作成、削除(touch) 移動(cd)
none none
none x
none w
none wx
none r
none rx
none rw
none rwx
x none
x x OK
x w
x wx OK OK
x r OK
x rx OK OK
x rw OK
x rwx OK OK OK
w none
w x
w w
w wx
w r
w rx
w rw
w rwx
wx none
wx x OK
wx w
wx wx OK OK
wx r OK
wx rx OK OK
wx rw OK
wx rwx OK OK OK
r none
r x
r w
r wx
r r
r rx
r rw
r rwx
rx none
rx x OK
rx w
rx wx OK OK
rx r OK
rx rx OK OK
rx rw OK
rx rwx OK OK OK
rw none
rw x
rw w
rw wx
rw r
rw rx
rw rw
rw rwx
rwx none
rwx x OK
rwx w
rwx wx OK OK
rwx r OK
rwx rx OK OK
rwx rw OK
rwx rwx OK OK OK

ディレクトリとファイルの関係

ディレクトリとファイルにそれぞれパーミッションが設定された時、ファイルに対してどのような操作が可能かを確認します。

操作 コマンド
ファイルの内容を表示 cat /all/{dir}/{file}.sh
ファイルの上書き・変更 touch /all/{dir}/{file}.sh
実行ファイルの実行 /all/{dir}/{file}.sh

{dir}:ディレクト

{file}.shは以下の内容で事前に用意しました。

#!/bin/sh
echo "Hello, world!"

ディレクトリにx権限しかなく、ディレクトリ内のリスト表示ができなくても、ファイルを取り扱うことは可能です。

$ ls /all/x
ls: ディレクトリ /all/x を開くことが出来ません: 許可がありません
$ /all/x/rx.sh
Hello, world!

検証結果を一覧にして示します。"OK"が操作可能です。

dir file 表示(cat) 変更(touch) 実行(sh)
none none
none x
none w
none wx
none r
none rx
none rw
none rwx
x none
x x
x w OK
x wx OK
x r OK
x rx OK OK
x rw OK OK
x rwx OK OK OK
w none
w x
w w
w wx
w r
w rx
w rw
w rwx
wx none
wx x
wx w OK
wx wx OK
wx r OK
wx rx OK OK
wx rw OK OK
wx rwx OK OK OK
r none
r x
r w
r wx
r r
r rx
r rw
r rwx
rx none
rx x
rx w OK
rx wx OK
rx r OK
rx rx OK OK
rx rw OK OK
rx rwx OK OK OK
rw none
rw x
rw w
rw wx
rw r
rw rx
rw rw
rw rwx
rwx none
rwx x
rwx w OK
rwx wx OK
rwx r OK
rwx rx OK OK
rwx rw OK OK
rwx rwx OK OK OK