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 |
- 你为什么要把类转储放在/usr/bin中?本地添加属于/usr/local/bin,无根允许您将东西放在那里…
- 只需在~/.bash_配置文件中创建一个别名,不要使用/usr/bin进行frack。
- 类转储直接用于编程(逆向工程工具-直接用于编程),因此关闭原因听起来不正确。此外,28颗星,将近40个问题的赞成票和90个回答的赞成票意味着这个问题是有用的。
- 反向工程,因为它用于获取类列表?
- 相关:apple.stackexchange.com/questions/339862/…
非挥发性物质。对于有此问题的其他人,您需要重新启动Mac并按?+R启动时。然后进入实用程序>终端并键入以下命令:
这是系统完整性保护的结果。更多信息在这里。
编辑
如果您知道自己在做什么,并且习惯于运行Linux,那么您应该使用上面的解决方案,因为许多SIP限制都会让您头疼。
但是,如果您是一个修补程序/noob/"poweruser",并且不知道您在做什么,这可能非常危险,最好使用下面的答案。
- 不需要再次启用????
- @Chris,你需要重新启动Cmd+R,打开终端运行csrutil enable; reboot。不幸的是,该命令不能在正常模式下工作。
- @是的,我就是这么做的。我只是想指出,在执行更改之后,每个人都应该再次启用它!否则,系统完整性保护将永久禁用,这可能导致严重问题。
- 如果删除/修改不应该删除/修改的内容,则只会导致严重问题。换言之,如果你知道你在做什么,让它失去功能是完全安全的。
- 在Linux上运行的任何人都可能希望禁用此功能。这是一种彻底的痛苦。
- 嗨,我们以前可以在/usr/share下写一些东西,但现在被拒绝了。这是在安装期间。知道如何在不重新启动的情况下解决这个问题吗?
- @clintm如果你让它失效,你就不那么安全了。您是否暴露在修改系统的恶意代码中?
- @克里斯,把自己铐在办公椅上以避免被车撞是没有意义的…换句话说…如果你在过马路前能看到两边…把自己铐在椅子上是完全安全的
- @clintm这就像是说你可以一直使用根用户,因为你只有在不知道自己在做什么的情况下才会破坏你的系统。
- @布巴卡佐巴一点也不像那样。当你玩sudo的时候,你仍然需要输入你的密码。这条路也已经走了30年了……如果你知道你在做什么……它是完全安全的。
- @这里是一个场景。我使用端口安装软件包,使用sudo。有时会自动安装多个子包。当然,它们是MD5或SHA1签名的,但是您是否100%确信这些包中没有包含恶意代码(或者安装错误可能会破坏/usr系统)。也许我是偏执狂。
- 这可能是解决根本问题的正确答案,但正如其他答案所述,这不是推荐的方法。另一个答案值得更多赞扬。
- 令人恼火的是,在一些软件更新之后,我不得不偶尔重新启用它。状态可以通过csrutil status进行检查。
- 不在Macos高级Serria工作?
- csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
正确的解决方案是复制或安装到/usr/local/bin,而不是/usr/bin。这是由于系统完整性保护(SIP)。sip使/usr/bin为只读,但使/usr/local为读写。
不应该像上面答案中所述禁用SIP,因为它添加了另一层保护,以防止恶意软件获得根访问。下面是一个完整的解释,说明了SIP的作用以及它为什么有用。
如此答案中建议的,不应禁用SIP(无根模式)"不建议禁用无根模式!最佳做法是仅将自定义资料安装到"/usr/local"。
- @泰安,请解释一下什么不起作用?
- 这个答案完美地解决了我的问题。它应该是公认的答案,因为它不需要修改系统,也不需要重新启动。
- 那么,这会不会给rm留下一条路?/usr/bin/中有什么?我知道sip有其用途,但希望删除一个特定的可执行文件。
- 我的路径中确实有/usr/local/bin,openssl 1.0.2n正确地与/usr/local/bin/openssl进行了符号链接,但是每次我执行which openssl时,它仍然显示了/usr/bin/openssl,它是旧的OpenSSL 0.9.8zh 14 Jan 2016版本。我怎样才能让我的系统比另一个更喜欢/usr/local/bin/openssl?
- 这解决了我的问题。谢谢你的链接!在恢复模式下进行无根或禁用操作似乎非常危险!很高兴我找到这个。
- 拿走我的钱…
- 这应该考虑到答案
- 这对我来说并没有什么好处——我在bashrc别名中幸运地将java化名为/usr/local/bin/java,在我在该文件夹中建立了这个答案所建议的适当链接之后。
- 不为我工作。当使用疯狂的mysql python pip packgae时……
- @Elialbert是否已将/usr/local/bin添加到路径中?
如果你想控制/usr/bin/。
您需要重新启动系统:
启动声音后,按住command-r启动恢复系统。
单击实用程序菜单并选择终端
键入csrutil disable并按回车键
单击?菜单并选择重新启动
提交更改后,请确保重新启用SIP!这对保护你的系统有很大作用。(与上述步骤相同,但类型:csrutil enable除外)
如果在"csrutil disabled"之后,您的命令仍然不起作用,请尝试在终端中使用"sudo",例如:
1
| sudo mv geckodriver usr/local/bin |
它应该是有效的。