本文へ移動
Develop Tools
← 使い方ガイドへ戻る

LinuxでPermission deniedが出る原因と対処|ls・chmod・chownで権限確認

Permission deniedはFileの数値Modeだけでなく、実行User、親Directory、Owner・Group、ACL、Security Module、Mount Optionでも発生します。chmod 777やsudoの前に原因を特定します。

Permission deniedをUser、Owner、Mode、親Directory、追加制御へ分ける図
Permission deniedをUser、Owner、Mode、親Directory、追加制御へ分ける図

Linuxコマンドを目的・症状から検索する

コマンド名を覚えていなくても、日本語の目的やError Messageから候補を絞り、Syntax・Option・危険度を確認できます。

Linuxコマンド一覧・検索チートシートを開く

結論:必要な操作と拒否された層を特定して、最小限の権限だけ直す

read・write・execute/searchのどれが必要か決め、実行Userと各Path ComponentのModeを確認します。Ownerが違う場合はchmodではなくchownやGroup設計が必要です。

whoami
id
ls -ld /path /path/to /path/to/file
stat /path/to/file

chmod 777は全員へread・write・executeを与えます。原因未確認の万能対処として使わないでください。

最初に状態を確認する

対象Fileだけでなく、到達する全Directoryのsearch権限を確認します。

確認対象コマンド例判断
実行Userwhoami / idOwner・Group所属
対象Models -l / statr/w/x不足
親Directoryls -ld各階層x不足
追加制御getfacl / SELinux / mountMode外の拒否

使用するLinuxコマンドとよく使うオプション

コマンド・構文役割確認ポイント
ls -l / ls -ldMode・Owner・Group確認先頭文字はFile Type
chmodMode変更SymbolicまたはOctal
chown / chgrpOwner・Group変更管理権限と影響範囲
idUser・Group確認Process実行Userも確認

安全に切り分ける手順

  1. 拒否された操作をread・write・executeへ分解します。
  2. 実行UserとGroupを確認します。
  3. 対象と親DirectoryのModeを確認します。
  4. ACL・SELinux・noexec等を確認します。
  5. 必要最小限の主体へ権限を変更して再確認します。

出力の見方とよくある原因

Mode表示はOwner、Group、Otherの3組です。Directoryのxは配下へ到達するsearch権限です。

表示・症状意味・原因候補次の確認
-rw-r-----Owner rw、Group r実行Userとの関係
drw-r--r--Directory xなしTraversal不可
Operation not permittedOwner・Capability等実行主体確認
Mode正常でも拒否ACL・SELinux・Mount追加Access Control

対処方法と危険な操作

変更前ModeとOwner・Groupを記録し、戻せる状態で限定的に変更します。

目的操作候補注意
所有者へ実行追加chmod u+x FILEScript内容も確認
Groupへ読取追加chmod g+r FILEGroup所属確認
Owner修正chown USER FILEService実行User確認

sudo付与、再帰chmod/chown、777への変更は影響範囲が大きいため、対象一覧とRollbackを用意してください。

コマンドの実装・ディストリビューション・Shell差を確認する

Linux上のコマンドは一つのProjectから提供されるわけではありません。GNU Coreutils、GNU Grep、GNU Findutils、procps-ng、iproute2、systemd、OpenSSH、curlなどで実装元が異なり、BusyBoxやBSD系実装ではOptionや出力が変わります。

確認対象確認方法判断
コマンドの実体type -a NAME / command -V NAMEBuiltin・Alias・Function・Externalを区別
実装とVersionNAME --version / Package情報記事のOptionを利用できるか確認
利用中Shellprintf "%s\n" "$SHELL" / Process情報Pipeline・Redirect等の構文差を確認
Distribution/etc/os-releasePackage Manager・Service Managerを確認

記事の例は代表的なGNU/Linux環境を基準にしています。実行前に、その端末のman、--help、公式Documentationを優先してください。

DevelopToolsのLinuxコマンド検索で確認できること

機能確認できる内容
検索コマンド名、用途、日本語・英語Keyword、Permission denied等のError Keyword
絞り込みCategory、危険度、必要権限、Command種別、利用環境
分類External Command、Shell Builtin、Shell Operator、Redirection Operator
詳細Syntax、主なOption、Example、実装元、関連Command、よくあるError
安全性通常操作、要確認、管理操作、破壊的操作を文字Label付きで表示
非対応Terminal接続、Command実行、Server状態診断、Installed Version自動検出

公式Documentationで最終確認する

利用中の実装とVersionに合うManualを優先します。Web上の例と端末のOptionが一致しない場合は、端末のmanとPackage情報を基準に判断します。

ScriptがPermission deniedになる

x不足だけでなくnoexec Mount、Shebang、Interpreterも確認します。

実行前後の出力とExit Statusを記録し、想定した対象だけに操作が及んだことを確認します。

  1. ls -l script.sh
  2. 実行Userと親Directory確認
  3. 必要ならchmod u+x script.sh
  4. Shebang・改行・noexecを確認

権限計算にはchmodパーミッション計算ツールも利用できますが、実Fileの状態は端末で確認してください。

よくある質問

記事のコマンドをそのまま本番環境で実行してもよいですか?
そのまま実行しないでください。Placeholder、対象Path、PID、Host、実行User、展開されるWildcardを確認し、参照系コマンドから段階的に試してください。
Linuxなら同じOptionを使えますか?
実装、Distribution、Version、BusyBox環境等で異なります。type、--version、man、--helpと公式Documentationで確認してください。
DevelopToolsからLinuxコマンドが実行されますか?
実行されません。検索、絞り込み、表示、コピーはブラウザ内だけで行われ、TerminalやServerへ接続しません。