3秒でわかる
ファイルやディレクトリを誰がどこまで扱えるかを決める権限設定。Linux では読み・書き・実行の 3 種類を 3 つの区分に割り当てます。
もう少し詳しく
どういうものか
パーミッションは、ファイルやディレクトリに対して「誰が」「何をしてよいか」を決める設定です。Linux や macOS では、読み取り (r)、書き込み (w)、実行 (x) の 3 種類を、所有者 (user)、所有グループ (group)、それ以外 (other) の 3 区分それぞれに割り当てます。合計 9 個の可否の組み合わせが、rwxr-xr-x のような文字列や 755 のような数字で表されます。数字は r を 4、w を 2、x を 1 として足したものです。
なぜ必要か
サーバは複数の利用者やプロセスが同じファイルシステムを共有します。権限が無ければ、Web サーバのプロセスが乗っ取られたときに、そのマシン上のすべての設定ファイルや鍵を書き換えられます。権限を絞っておけば、被害はそのユーザが触れる範囲に留まります。
秘密鍵のように、権限が緩いと動作自体が拒否される場面もあります。SSH は秘密鍵が他人から読める状態だと接続を断ります。設定ミスを事前に止めるための仕組みです。
具体例
ls -l script.sh
# -rwxr-xr-x 1 deploy web 512 Aug 14 10:00 script.sh
# ^^^ 所有者は読み書き実行
# ^^^ グループは読みと実行
# ^^^ その他は読みと実行
chmod 755 script.sh # rwxr-xr-x
chmod 600 id_rsa # rw------- 秘密鍵はこれ
chmod +x deploy.sh # 実行権だけ足す
chown deploy:web app.log似た用語との違い
| 表記 | 意味 |
|---|---|
| 644 | 所有者は読み書き、他は読みのみ。通常のファイル |
| 755 | 所有者は全部、他は読みと実行。スクリプトやディレクトリ |
| 600 | 所有者のみ読み書き。秘密鍵や認証情報 |
| 777 | 全員が何でもできる。本番では使わない |
つまずきやすいところ
ディレクトリの x は実行ではなく通過を意味します。r があってもx が無いディレクトリは、名前の一覧は見えるのに中のファイルを開けません。逆に x だけあれば、一覧は取れなくてもパスを直接指定して開けます。ディレクトリを 644 にすると中に入れなくなるのはこのためです。
権限エラーが出たときに 777 にして解決するのも典型的な失敗です。動くようになったように見えても、その場所に誰でも書き込めるということは、実行されるスクリプトを他人が差し替えられる状態です。まず、どのユーザでプロセスが動いているかを確かめ、そのユーザに必要な分だけ与えます。
なお、新しく作られるファイルの初期権限は umask で決まります。想定より緩い、あるいは厳しい権限で生成される場合は、chmod ではなく umask の設定を見ます。