chmod で権限が変わらないときのチェックポイント

  • URLをコピーしました!

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 のポリシーが影響している可能性があります。

解決方法まとめ

  1. 所有者を確認し、必要なら sudo を使う
  2. ファイルシステムの種類を確認(NTFS/FATでは chmod が効かない)
  3. ACL設定を確認し、不要なら削除する
  4. SELinux/AppArmorの制御を確認する

まとめ

chmod が効かない原因は「コマンドが壊れている」のではなく、

  • 所有者や権限の問題
  • マウントされているファイルシステムの制約
  • ACLやセキュリティモジュールの影響

といった仕組みによる制御がほとんどです。
順番に確認していけば、なぜ変更できないのかが分かります。

目次