パーミッションとその組み合わせ
Linux のディレクトリとファイルのパーミッションが組み合わさった時、どうふるまうのかを確認します。
ディレクトリ・ファイル単体
Linux のディレクトリ・ファイルのパーミッション表記で使用される文字は以下の定義がされています。
ファイルのパーミッション設定、ディレクトリは要注意 | VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで
ファイル ディレクトリ “R”読み(4) ファイルの内容を表示 ディレクトリ内のリスト表示 “W”書き(2) ファイルの上書き、変更 ディレクトリ内にファイル作成、削除 “X”実行(1) 実行ファイルの実行 そのディレクトリに移動
w権限で「ファイルの作成・削除」はディレクトリに、「ファイルの上書き・変更」はファイルに権限付与されることにご注意ください。
まとめ
子ディレクトリとその中のファイル操作することを想定したパーミッション設定をまとめます。これらをベースに必要最小限の権限のみを設定しましょう。
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 |