パーミッションとその組み合わせ
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 |