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

Posted

技术标签:

【中文标题】在 root 上时不允许操作 - El Capitan(无根禁用)【英文标题】:Operation Not Permitted when on root - El Capitan (rootless disabled) 【发布时间】:2015-12-16 00:51:23 【问题描述】:

我正在尝试将某些内容移动到 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

【问题讨论】:

你为什么要把class-dump放到/usr/bin?本地添加属于/usr/local/bin,无根允许你把东西放在那里... 只需在 ~/.bash_profile 中创建一个别名,不要使用 /usr/bin class-dump 直接用于编程(逆向工程工具-直接用于编程),所以关闭的原因听起来不成立。此外,28 颗星、近 40 个问题点赞和 90 个回答点赞意味着这个问题很有用。 逆向工程,因为它用于获取类列表? 相关:apple.stackexchange.com/questions/339862/… 【参考方案1】:

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

csrutil disable
reboot 

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

编辑

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

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

【讨论】:

@Chris,您需要再次使用 CMD+R 重新启动,打开终端并运行 csrutil enable; reboot。不幸的是,该命令在正常模式下不起作用。 @AlexanderKachkaev 是的,我就是这么做的。我只是想指出每个人都应该在执行更改后再次启用它!否则系统完整性保护将被永久禁用,这可能会导致严重问题。 如果你删除/修改了你不应该删除/修改的东西,它只会导致严重的问题。换句话说,如果您知道自己在做什么,那么将其禁用是完全安全的。 @Chris 将自己铐在办公椅上以避免被汽车撞到是没有意义的......换句话说......如果你知道在你穿过之前看两边街头……不把自己铐在椅子上是绝对安全的 csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.【参考方案2】:

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

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

正如this answer 中所建议的那样,不应该禁用 SIP(​​无根模式)“不建议禁用无根模式!最佳做法是仅将自定义内容安装到“/usr/local”。”

【讨论】:

这对我来说不太奏效——在我建立了适当的链接之后,我有一些运气在我的 bashrc 别名中使用别名(例如,在我的情况下)java/usr/local/bin/java正如这个答案所暗示的那样,在那个文件夹中。 那么,这是否给rm 留下了/usr/bin/ 中的任何内容?我了解 SIP 有其目的,但想删除一个特定的可执行文件。 我的路径中确实有 /usr/local/bin 并且 openssl 1.0.2n 正确符号链接到 /usr/local/bin/openssl 但每次我这样做 which openssl 它仍然显示 /usr/bin/openssl 这是较旧的 @987654335 @ 版本。如何让我的系统更喜欢 /usr/local/bin/openssl 一个而不是另一个?【参考方案3】:

如果你想控制/usr/bin/

您需要重新启动系统:

在启动声音后,按住 Command-R 启动进入恢复系统

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

键入 csrutil disable 并按回车

点击菜单并选择重启

提交更改后,请务必重新启用 SIP!它对保护您的系统有很大帮助。 (除了类型:csrutil enable,其他步骤同上)

【讨论】:

【参考方案4】:

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

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

csrutil status

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

csrutil disable

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

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

csrutil enable

【讨论】:

【参考方案5】:

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

sudo mv geckodriver /usr/local/bin

它应该可以工作。

【讨论】:

以上是关于在 root 上时不允许操作 - El Capitan(无根禁用)的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu允许root远程登录配置

sh 执行gem时解决El Capitan错误(不允许errnoeperm操作) - 来自http://stackoverflow.com/questions/32891965/error-

来自以 root 身份记录的 docker 容器的“不允许操作”

iOS Root View Controller 的 viewDidAppear:在启动画面 (Default.png) 仍在屏幕上时调用

Ubuntu下允许Root用户的操作 (图形界面登录su切换……)

没有填充或边距:是啥让我的表格无法获得 100% 的宽度? & 为啥当鼠标悬停在可滚动的 el 上时滚动条不随滚轮滚动?