LinuxでPermission deniedになる原因と確認手順|権限があるのにアクセスできない
LinuxでPermission deniedが出たときに、chmodだけに頼らず、実行ユーザー、パス上のディレクトリ、ACL、SELinux、マウント状態から拒否箇所を特定するページです。
このページの目的
「誰が」「どの操作を」「パスのどこで」拒否されたかを明確にします。ゴールは、拒否している仕組みを1つに絞り、必要最小限の権限変更で解決することです。
最初にやること
最初に id と namei -l で実行ユーザーとパス上の権限を確認します。通常権限で説明できなければ、ACL、マウントオプション、SELinuxへ進みます。
権限とアクセス可否を確認する
所有者・グループ・パーミッションを入力して、対象ユーザーが読み書き・実行できるか確認できます。
最初に拒否された操作を特定する
同じPermission deniedでも、必要な権限は操作によって異なります。
- 読み込み:ファイルの読取り権限と親ディレクトリの検索権限
- 書き込み・作成:対象または親ディレクトリの書込み・検索権限
- 実行:実行権限、shebang、
noexec、SELinux - 削除・rename:ファイル自身より親ディレクトリとsticky bit
よくある表示・症状から原因を絞る
表示された文言は原因そのものではなく、確認範囲を絞る手掛かりです。「考えられる原因」と「最初の確認方法」を対応させて確認します。
| エラー・症状 | 考えられる原因 | 最初の確認方法 |
|---|---|---|
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 denied | SELinuxなどのセキュリティポリシーが操作を拒否した | getenforce と ausearch -m AVC で拒否記録を確認 |
親ディレクトリの権限
ファイル自体を読み取れる権限があっても、パス上のディレクトリに検索権限(ディレクトリのx)がないと到達できません。
namei -lはパスを構成する各要素の権限を一覧化できます。どの階層で拒否されるかを確認します。
rは名前一覧、wは項目の作成・削除、xは中を検索して通過する権限です。ファイルのrwxとは意味が異なります。ACLの確認
POSIX ACLが設定されていると、通常の所有者・グループ・otherだけでは判断できません。ls -lの権限末尾に+が表示される場合もあります。
ACLのmaskは名前付きユーザーやグループの実効権限を制限します。表示された個別権限だけでなくeffective値を確認します。
SELinuxの確認
モードビットとACLが許可していても、SELinuxポリシーにより拒否されることがあります。
実行時の追加確認
実行ファイルの場合
- ファイルの実行権限
- shebangで指定したインタープリタの存在と権限
- マウントオプション
noexec - スクリプトの改行コードや形式
書き込み・削除の場合
既存ファイルの変更権限だけでなく、作成・rename・削除では親ディレクトリの書き込み権限と検索権限が重要です。sticky bitがある共有ディレクトリでは、削除可能なユーザーも制限されます。
安全な修正方法
- 実行ユーザーと必要な操作を特定
- 拒否されている階層・仕組みを特定
- 所有者・グループ変更、グループ追加、必要最小限のchmod、ACL、SELinuxラベルのいずれが適切か選択
- 対象ユーザーで再テスト
- 変更内容と戻し方を記録