Rootless
Mac OS X 10.11+ (El Capitan) 以后,引入了 Rootless 安全机制,该机制限制了 root 用户的权限,有部分操作即使是 root 也无法执行。
该机制的详细介绍,请参考:
Wikipedia: System Integrity Protection
Apple: System Integrity Protection Guide
主要地限制有:
- 以下目录无法修改:
/System, /bin, /sbin, 或者 /usr (/usr/local 除外),以及内置 App 和系统工具 Utilities。
具体的限制名单在 /System/Library/Sandbox/rootless.conf 文件中有定义,该文件行首的 * 表示该行记录不在限制之列 - 无法追踪调试系统进程
- 无法加载未经验证的内核扩展
可能引起的问题和解决方案
- 修改受限制的文件或文件夹
sudo cp -f FILE /usr/bin/
# 报错: cp: /usr/bin/FILE: Operation not permitted
解决方案:关闭 rootless,见下文
- 执行部分命令受挫
sudo gem install posix-spawn -v '0.3.11'
# 报错:
Building native extensions. This could take a while...
ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/posix-spawn-benchmark
解决方案:尝试执行 /usr/local/bin 里命令,或将命令文件复制到 /usr/local/bin 后再执行,例如
sudo gem install -n /usr/local/bin GEM-NAME
关闭 rootless
如果遇到的问题难以解决,也可以关闭 rootless 功能,彻底解决引起的权限问题,但是关闭 rootless 将会严重降低系统安全性,必须尽快重新开启。
关闭的步骤如下:
- 重启 Mac 并按住 Command+R,进入恢复模式
- 打开终端 Terminal
- csrutil disable
开启的步骤:
- 重启 Mac 并按住 Command+R,进入恢复模式
- 打开终端 Terminal
- csrutil enable
在 mac 终端直接键入 csrutil 可查看该命令的使用说明。