Linuxで chmod
コマンドを実行しても、思った通りにファイルやディレクトリの権限が変わらないことがあります。
「コマンドが効いていないのでは?」と思うかもしれませんが、多くの場合はファイルシステムや所有権などに原因があります。
この記事では、chmod
で権限が変更できないときに確認すべきポイントを整理します。

主な原因と確認方法
1. ファイルの所有者でない
chmod
は、通常ファイルの所有者か root
ユーザーでないと実行できません。
他人の所有するファイルに対して権限変更しようとすると、反映されません。
確認方法
ls -l filename
出力例:
-rw-r--r-- 1 alice alice 1234 Sep 27 test.txt
所有者が自分ではない場合は sudo
を付けるか、管理者に依頼する必要があります。
2. スーパーユーザー権限が必要な場合
システムファイルや他ユーザーのファイルを扱う場合は sudo chmod
が必要です。
例:
sudo chmod 644 /etc/hosts
3. マウントオプションによる制限
USBメモリやWindowsとの共有フォルダ(NTFS, FAT32など)は、ファイルシステムの仕様上、Linuxのパーミッションを保持できません。
その場合、chmod
を実行しても効果がなく、マウント時のオプションで権限が決まります。
確認方法
mount | grep /mnt
NTFSやFATでマウントされている場合は、chmod
ではなく umask
/ dmask
/ fmask
などのマウントオプションを調整する必要があります。
4. アクセス制御リスト(ACL)が優先されている
Linuxでは chmod
の設定よりも ACL が優先される場合があります。
確認方法
getfacl filename
もし追加の権限設定が存在する場合は setfacl -x
などで調整が必要です。
5. SELinux や AppArmor の制御
権限を変えてもアクセスが制限されるケースがあります。
これは chmod
の問題ではなく、セキュリティモジュールが制御しているためです。
確認方法
getenforce # SELinux の状態を確認
もし Enforcing
となっていれば、SELinux のポリシーが影響している可能性があります。
解決方法まとめ
- 所有者を確認し、必要なら
sudo
を使う - ファイルシステムの種類を確認(NTFS/FATでは
chmod
が効かない) - ACL設定を確認し、不要なら削除する
- SELinux/AppArmorの制御を確認する
まとめ
chmod
が効かない原因は「コマンドが壊れている」のではなく、
- 所有者や権限の問題
- マウントされているファイルシステムの制約
- ACLやセキュリティモジュールの影響
といった仕組みによる制御がほとんどです。
順番に確認していけば、なぜ変更できないのかが分かります。