MeWrite Docs

Linux: Permission denied (chmod/chown)

ファイルやディレクトリの権限変更が拒否された場合のエラー

概要

ファイルやディレクトリへのアクセス、または権限の変更操作が拒否された場合に発生するエラーです。所有者の不一致、SELinuxやAppArmorによる制限、特殊なマウントオプションなどが原因となります。

エラーメッセージ

chmod: changing permissions of '/var/www/html/index.html': Operation not permitted
chown: changing ownership of '/opt/app': Operation not permitted
bash: /opt/app/start.sh: Permission denied

原因

  1. 所有者でもrootでもない: 一般ユーザーが他者のファイルを変更しようとしている
  2. SELinux/AppArmorによる制限: MACポリシーがファイル操作を拒否している
  3. 読み取り専用マウント: ファイルシステムがread-onlyでマウントされている
  4. immutableフラグ: chattr +i で変更不可に設定されている
  5. NFSやDockerボリュームの制限: リモート/マウントされたファイルシステムの権限制約

解決策

1. 基本的な権限の確認と修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# ファイルの詳細な権限確認
ls -la /opt/app/
stat /opt/app/start.sh

# 所有者の変更(root権限が必要)
sudo chown myuser:mygroup /opt/app/start.sh

# ディレクトリ再帰的に変更
sudo chown -R myuser:mygroup /opt/app/

# パーミッション変更
sudo chmod 755 /opt/app/start.sh   # rwxr-xr-x
sudo chmod 644 /opt/app/config.yml # rw-r--r--

# ディレクトリ再帰的に変更(ファイルとディレクトリを分ける)
sudo find /opt/app -type d -exec chmod 755 {} \;
sudo find /opt/app -type f -exec chmod 644 {} \;
sudo find /opt/app -type f -name '*.sh' -exec chmod 755 {} \;

2. ACL(アクセス制御リスト)の活用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 現在のACLを確認
getfacl /opt/app/

# 特定ユーザーに権限を追加
sudo setfacl -m u:deploy:rwx /opt/app/
sudo setfacl -R -m u:deploy:rwx /opt/app/

# デフォルトACL(新規作成ファイルに自動適用)
sudo setfacl -d -m u:deploy:rwx /opt/app/

# ACLの削除
sudo setfacl -b /opt/app/

3. SELinuxの確認と対処

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# SELinuxの状態確認
getenforce
# Enforcing / Permissive / Disabled

# SELinuxの拒否ログを確認
sudo ausearch -m avc -ts recent
sudo sealert -a /var/log/audit/audit.log

# ファイルのSELinuxコンテキスト確認
ls -Z /var/www/html/

# コンテキストの復元
sudo restorecon -Rv /var/www/html/

# カスタムコンテキストの設定
sudo semanage fcontext -a -t httpd_sys_content_t "/opt/myapp(/.*)?"
sudo restorecon -Rv /opt/myapp/

# 一時的にPermissiveモードに変更(デバッグ用)
sudo setenforce 0

4. immutableフラグの確認と解除

1
2
3
4
5
6
7
8
# 拡張属性の確認
lsattr /opt/app/config.yml

# immutableフラグの解除
sudo chattr -i /opt/app/config.yml

# append-onlyフラグの解除
sudo chattr -a /opt/app/log.txt

5. マウントオプションの確認

1
2
3
4
5
6
7
8
# マウント状態の確認
mount | grep /opt

# read-onlyの場合、再マウント
sudo mount -o remount,rw /opt

# /etc/fstab の noexec, nosuid オプション確認
cat /etc/fstab | grep /opt

関連エラー

Linux の他のエラー

最終更新: 2026-02-03