そう、Mac はファイルの分野で Unix に多くの機能強化をしています。今ではあまり使われていない resource fork のことは無視して、以下のようなものがあります。
- 標準的なUnixのパーミッション
ugo
rwx
など。通常のUnixツールが適用されます。
- ACLの、
ls -le
で表示可能、chmod [-a | +a | =a]
で変更可能。
- ファイルフラグ
ls -lO
で表示可能(0ではなく大文字)、chflags
で変更可能。
- 拡張属性 、
ls -l@
(属性キーのみ) で表示可能、xattr
で表示・変更可能。(xattr -h
で何も得られない場合はman xattr
を使用してください。)
- OS X 10.11 “El Capitan "以降、* System Integrity Protection ** (SIP)は、
sudo
を使用してroot
として実行している場合でも、一部のファイルを通常のプロセスからの変更からさらに保護します。SIP で保護されたファイルは、ls -lO
フラグを持つファイルとして restricted
にリストアップされ、ls -l@
属性を持つファイルとして com.apple.rootless
にリストアップされます。
Unix のパーミッション、ACL、ファイルフラグ、または SIP のために、ファイルに対する操作を拒否されることがあります。ファイルを完全にロック解除するには
sudo chmod -N file # Remove ACLs from file
sudo chmod ugo+rw file # Give everyone read-write permission to file
sudo chflags nouchg file # Clear the user immutable flag from file
sudo chflags norestricted file # Remove the SIP protection from file
sudo xattr -d com.apple.rootless file # Remove SIP protection from file
システム整合性保護(SIP)が有効な場合、sudo chflags norestricted
と sudo xattr -d com.apple.rootless
は「許可されていない操作」エラーを返します。フラグや属性をクリアするには、 macOS Recovery で起動し、ターミナルからコマンドを実行する必要があります(最初にディスクユーティリティを使用して起動ドライブのロックを解除してマウントし、ファイルは/Volumes/Macintosh HD
や起動ドライブの名前を覚えておく必要があるかもしれません)。しかし、将来のOSアップデートでは、restricted
フラグとcom.apple.rootless
属性を削除したファイルに復元される可能性が高いことに注意してください。
_ SIPを無効にすることは推奨されません _ なぜなら、マルウェアや偶発的な損害に対する多くの保護が削除されるからです。SIPを無効にした場合は、変更が終わったら再度有効にしてください。
ls -lO
フラグが設定されていることを示している場合、それを解除するにはシングルユーザーモードに入らなければならないことに注意してください。なぜファイルにそのフラグが設定されているのか、なぜそれをいじろうとしているのか、そしてその結果はどうなるのか、という大きな疑問があるので、ここではそのことには触れません。