在 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(无根禁用)的主要内容,如果未能解决你的问题,请参考以下文章
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 上时滚动条不随滚轮滚动?