インフラ作業支援ラボInfra Support Lab← ガイド一覧← 戻る

LinuxでPermission deniedになる原因と確認手順|権限があるのにアクセスできない

LinuxでPermission deniedが出たときに、chmodだけに頼らず、実行ユーザー、パス上のディレクトリ、ACL、SELinux、マウント状態から拒否箇所を特定するページです。

このページの目的

「誰が」「どの操作を」「パスのどこで」拒否されたかを明確にします。ゴールは、拒否している仕組みを1つに絞り、必要最小限の権限変更で解決することです。

最初にやること

最初に idnamei -l で実行ユーザーとパス上の権限を確認します。通常権限で説明できなければ、ACL、マウントオプション、SELinuxへ進みます。

このページの対象:一般的なLinuxファイルアクセスの拒否が対象です。systemdやcronの中だけで発生する場合は、実行ユーザーと環境差を確認するため、各トラブルガイドも併用してください。

権限とアクセス可否を確認する

所有者・グループ・パーミッションを入力して、対象ユーザーが読み書き・実行できるか確認できます。

Linux権限確認ツール

最初に拒否された操作を特定する

同じPermission deniedでも、必要な権限は操作によって異なります。

id namei -l /path/to/target getfacl -p /path/to/target

よくある表示・症状から原因を絞る

表示された文言は原因そのものではなく、確認範囲を絞る手掛かりです。「考えられる原因」と「最初の確認方法」を対応させて確認します。

エラー・症状考えられる原因最初の確認方法
Permission denied対象ファイルまたは親ディレクトリのrwx不足、実行ユーザーの不一致id と namei -l でユーザーとパス全体の権限を確認
Operation not permitted所有権変更の制限、immutable属性、Capability不足、SELinux拒否などlsattr、getcap、ausearch で属性とポリシーを確認
Read-only file systemファイルシステムが読み取り専用でマウントされている、または障害でread-only化したfindmnt でマウントオプション、dmesgでI/O・FSエラーを確認
cannot create ...: Permission denied出力先ディレクトリへの書込み権限または通過権限がないnamei -l と test -w で出力先まで確認
bash: ./script.sh: Permission denied実行ビット不足、noexecマウント、または実行に必要なパス権限不足ls -l、findmnt -no OPTIONS、namei -l を確認
Access denied by policy / AVC deniedSELinuxなどのセキュリティポリシーが操作を拒否したgetenforce と ausearch -m AVC で拒否記録を確認

親ディレクトリの権限

ファイル自体を読み取れる権限があっても、パス上のディレクトリに検索権限(ディレクトリのx)がないと到達できません。

namei -l /path/to/file

namei -lはパスを構成する各要素の権限を一覧化できます。どの階層で拒否されるかを確認します。

rwxの意味: ディレクトリのrは名前一覧、wは項目の作成・削除、xは中を検索して通過する権限です。ファイルのrwxとは意味が異なります。

ACLの確認

POSIX ACLが設定されていると、通常の所有者・グループ・otherだけでは判断できません。ls -lの権限末尾に+が表示される場合もあります。

getfacl -p /path/to/file getfacl -p /path/to

ACLのmaskは名前付きユーザーやグループの実効権限を制限します。表示された個別権限だけでなくeffective値を確認します。

SELinuxの確認

モードビットとACLが許可していても、SELinuxポリシーにより拒否されることがあります。

getenforce ls -Z /path/to/file sudo ausearch -m AVC,USER_AVC -ts recent
非推奨: 原因確認のためにSELinuxを恒久的に無効化するのは避けます。期待されるラベル、サービス用boolean、ポリシーを確認して修正します。

実行時の追加確認

実行ファイルの場合

findmnt -no TARGET,OPTIONS /path/to/script head -n 1 /path/to/script file /path/to/script

書き込み・削除の場合

既存ファイルの変更権限だけでなく、作成・rename・削除では親ディレクトリの書き込み権限と検索権限が重要です。sticky bitがある共有ディレクトリでは、削除可能なユーザーも制限されます。

安全な修正方法

  1. 実行ユーザーと必要な操作を特定
  2. 拒否されている階層・仕組みを特定
  3. 所有者・グループ変更、グループ追加、必要最小限のchmod、ACL、SELinuxラベルのいずれが適切か選択
  4. 対象ユーザーで再テスト
  5. 変更内容と戻し方を記録
sudo -u appuser test -r /path/to/file && echo readable sudo -u appuser test -w /path/to/file && echo writable sudo -u appuser test -x /path/to/file && echo executable
基本方針: 全員へ権限を広げるのではなく、サービス専用グループやACLなどで必要な主体だけに許可します。

権限とアクセス可否を確認する

所有者・グループ・パーミッションを入力して、対象ユーザーが読み書き・実行できるか確認できます。

Linux権限確認ツール