在 root 上不允许操作 - El Capitan(无根禁用)

Operation Not Permitted when on root - El Capitan (rootless disabled)

我正在尝试在 OS X El Capitan 上将某些内容移动到 /usr/bin。我使用以下命令禁用了 rootless:sudo nvram boot-args="rootless=0"; sudo reboot,但我不断收到相同的错误:

MacBook-Air:~ Mark$ sudo cp class-dump /usr/bin
Password:
cp: /usr/bin/class-dump: Operation not permitted
MacBook-Air:~ Mark$ sudo mv class-dump /usr/bin
mv: rename class-dump to /usr/bin/class-dump: Operation not permitted

Nvm。对于遇到此问题的任何其他人,您需要重新启动 mac 并在启动时按 ⌘+R。然后进入 Utilities > Terminal 并输入以下命令:

csrutil disable
reboot 

这是系统完整性保护的结果。更多信息 here.

编辑

如果您知道自己在做什么并且习惯于 运行 Linux,您应该使用上述解决方案,因为许多 SIP 限制是一个彻底的痛苦。

但是,如果您是 tinkerer/noob/"poweruser" 并且不知道自己在做什么,这可能非常危险,您最好使用 .

正确的解决方案是复制或安装到 /usr/local/bin 而不是 /usr/bin。这是由于 系统完整性保护 (SIP)。 SIP 将 /usr/bin 设置为只读,但将 /usr/local 保留为可读写。

SIP 不应如上述答案中所述禁用,因为它增加了另一层保护,防止恶意软件获得 root 访问权限。 Here 完整地解释了 SIP 的作用及其用途。

正如 this answer 中所建议的那样,不应仅禁用 SIP(​​无根模式)"It is not recommended to disable rootless mode! The best practice is to install custom stuff to "/usr/local"。"

如果你想掌控/usr/bin/

您需要重新启动系统:

听到开机音后,按住Command-R开机进入Recovery System

单击实用程序菜单和select终端

键入 csrutil disable 并按 return

点击菜单然后select重启

提交更改后,确保 re-enable SIP!它可以保护您的系统。 (与上述步骤相同,除了类型:csrutil enable)

如果在调用 "csrutil disabled" 后您的命令仍然无效,请尝试在终端中使用 "sudo",例如:

sudo mv geckodriver /usr/local/bin

它应该可以工作。

最可能的原因是系统完整性保护 (SIP) - csrutil 是命令行实用程序。您需要禁用它才能查看目录。

  • 要查看您的状态,您需要:

csrutil status

  • 要禁用它(这通常是个坏主意):

csrutil disable

(那么您可能需要重新启动)。

要启用它(完成后应该重新打开):

csrutil enable