我试图理解为什么在 macOS 上(从 Catalina 到 Ventura),用户root
(即我之后sudo bash
)会
# mkdir /System/Volumes/Data/Library/Preferences/OpenDirectory/foo
mkdir: /System/Volumes/Data/Library/Preferences/OpenDirectory/foo: Operation not permitted
然而
# mkdir /System/Volumes/Data/Library/Preferences/Logging/foo
在具有明显相同文件权限和位置的兄弟目录中工作正常。
注意:
给出的错误是
Operation not permitted
并且不是Read-only file system
或Permission denied
,所以这似乎与访问控制权限或根文件系统的只读挂载无关。/System/Volumes/Data/
是可写的卷。这两个文件夹看起来非常相似
ls -ldOe
,xattr
分别有stat -r
# cd /System/Volumes/Data/Library/Preferences/
# ls -ldOe Logging OpenDirectory
drwxr-xr-x 4 root wheel - 128 22 Aug 17:54 Logging
drwxr-xr-x 5 root wheel - 160 17 Aug 16:13 OpenDirectory
/usr/share/firmlinks
文件夹均未在或中列出/System/Library/Sandbox/rootless.conf
手术mkdir
做禁用后工作系统完整性保护,因此这显然发挥了作用,但是如何发挥作用呢?
如何查看哪个文件夹受到启用 SIP 的影响?
诸如此类的系统工具怎么还能sudo dsconfigldap -a ldap-server.example.com
在那里写呢?
PS:我原本想解决的实际问题与
- https://apple.stackexchange.com/questions/378051/automated-ldap-and-search-setup-on-catalina
- https://discussions.apple.com/thread/250962320
但是现在我也只是想了解 macOS 实际上是如何阻止 root 的写访问的,因为我看不到任何我熟悉的访问控制机制在这里发挥作用:文件权限、扩展 ACL、只读挂载、SIP、文件锁定、firmlink 等。这两个文件夹有什么不同?