パーミッション
別名: permission / ファイルパーミッション / ファイルモード / chmod
Linux や macOS がファイルとディレクトリごとに持つ、読み取り(r)・書き込み(w)・実行(x)の許可。
所有者・グループ・その他の 3 区分で決まり、Permission denied や EACCES の直接の原因になる。
公開:
定義
パーミッションは、Unix 系 OS がファイルとディレクトリごとに持つアクセス許可の設定である。
所有者(user)・グループ(group)・その他(others)の 3 区分それぞれに、読み取り(r)・書き込み(w)・実行(x)の可否を持つ。ls -l に出る -rwxr-xr-- のような表示がそれで、許可されていない操作をすると OS は EACCES を返し、多くのツールはこれを Permission denied と表示する。
詳細
権限は chmod で変える。chmod u+x のような記号指定のほか、r=4・w=2・x=1 を区分ごとに足した 8 進数でも指定でき、755 は rwxr-xr-x、600 は rw------- になる。
所有者そのものを変えるのは chown である。
ディレクトリでは x の意味が変わり、中を通り抜けて配下のファイルへ到達するための検索権を表す。
そのため、ファイル自体に権限があっても、親ディレクトリの x が無ければ到達できない。
よくある誤解
- 権限は緩くすれば必ず通る:
chmod 777は誰でも書き換えられる状態にするだけで、かえって弾かれる場面もある。
OpenSSH は本人以外がアクセスできる秘密鍵を無視するため、秘密鍵は600などに絞らないと使えない(SSH で「UNPROTECTED PRIVATE KEY FILE」が出て鍵が使えない)。 - 実行権が無いスクリプトは動かせない:
bash script.shのようにインタプリタを明示すれば、読み取り権だけで実行できる(Bash で「Permission denied」が出てシェルスクリプトを実行できない)。
関連
権限エラーを sudo で押し切ると、作られたファイルが root 所有になり、次の権限エラーの原因になる。npm のグローバルインストールで出る EACCES や、Docker のボリュームで書き込めない問題も、書き込み先の所有者とパーミッションの食い違いとして読み解ける。