关于macos:在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,但我仍然得到相同的错误:

1
2
3
4
5
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


非挥发性物质。对于有此问题的其他人,您需要重新启动Mac并按?+R启动时。然后进入实用程序>终端并键入以下命令:

1
2
csrutil disable
reboot

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

编辑

如果您知道自己在做什么,并且习惯于运行Linux,那么您应该使用上面的解决方案,因为许多SIP限制都会让您头疼。

但是,如果您是一个修补程序/noob/"poweruser",并且不知道您在做什么,这可能非常危险,最好使用下面的答案。


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

不应该像上面答案中所述禁用SIP,因为它添加了另一层保护,以防止恶意软件获得根访问。下面是一个完整的解释,说明了SIP的作用以及它为什么有用。

如此答案中建议的,不应禁用SIP(无根模式)"不建议禁用无根模式!最佳做法是仅将自定义资料安装到"/usr/local"。


如果你想控制/usr/bin/

您需要重新启动系统:

启动声音后,按住command-r启动恢复系统。

单击实用程序菜单并选择终端

键入csrutil disable并按回车键

单击?菜单并选择重新启动

提交更改后,请确保重新启用SIP!这对保护你的系统有很大作用。(与上述步骤相同,但类型:csrutil enable除外)


如果在"csrutil disabled"之后,您的命令仍然不起作用,请尝试在终端中使用"sudo",例如:

1
sudo mv geckodriver usr/local/bin

它应该是有效的。