禁止在root上进行操作-El Capitan(已禁用无根)


236

我正在尝试将某些东西移至OS X El Capitan上的/ usr / bin。我已使用以下命令禁用了无根用户: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

14
为什么要尝试将类转储放在/ usr / bin中?本地添加项位于/ usr / local / bin中,并且rootless允许您将内容放置在其中...
Gordon Davisson

1
只是在〜/ .bash_profile中创建一个别名,不要对/ usr / bin感到沮丧
Warren P

5
class-dump直接用于编程(反向工程工具-直接用于编程),因此关闭的原因听起来无效。此外,28星,将近40个问题投票和90个答案投票意味着该问题很有用。
Vive

逆向工程,因为它用于获取类列表?
marciokoko

Answers:


355

Nvm。对于任何其他有此问题的人,您需要重新启动Mac并在启动时按⌘+ R。然后进入实用程序>终端并输入以下命令:

csrutil disable
reboot 

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

编辑

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

但是,如果您是个修补匠/菜鸟/“超级用户”,却不知道自己在做什么,这将非常危险,因此最好使用下面的答案


2
@Chris,您需要再次使用CMD + R重新启动,打开终端并运行csrutil enable; reboot。不幸的是,该命令在正常模式下不起作用。
亚历山大·卡切夫

7
@AlexanderKachkaev是的,这就是我所做的。我只想指出,执行更改后,每个人都应该再次启用它!否则,将永久禁用系统完整性保护,这可能导致严重的问题。
克里斯

9
如果您删除/修改了不应该删除/修改的内容,则只会导致严重的问题。换句话说,如果您知道自己在做什么,那么将其禁用是绝对安全的。
Clintm '16

16
任何习惯在Linux上运行的人都可能希望禁用此功能。这是一个彻底的痛苦。
mschuett '16

3
@Chris没必要将自己铐在办公椅上以避免被汽车撞到...换句话说...如果您知道在过马路之前要双向看...绝对不安全将自己铐在椅子上
Clintm '16

254

正确的办法是复制或安装到/usr/local/bin没有/usr/bin。这是由于系统完整性保护(SIP) 。SIP 设为只读,/usr/bin但保留/usr/local为读写状态。

SIP不应像上面的答案中所述那样被禁用,因为它增加了另一层保护,以防止恶意软件获得root用户访问权限。是SIP的功能及其用途的完整说明。

如此答案中所建议的,不应禁用SIP(无根模式)“不建议禁用无根模式!最佳实践是仅将自定义内容安装到“ / usr / local”。


8
这解决了我的问题。感谢您的链接!在恢复模式下无根或禁用对象似乎非常危险!很高兴我找到了这个。
caokey

1
这也不太做的伎俩,我-我有一些运气混淆(例如,在我的情况)java,以/usr/local/bin/java我的.bashrc别名,之后我做了该文件夹中的相应链接,因为这答案提示。
伊莱·艾伯特

这个答案完美地解决了我的问题。它应该是可接受的答案,因为它不需要修改系统也不需要重新启动。
斯蒂芬

那么,这是否离开没有办法rm什么的/usr/bin/?我了解SIP的目的是,但想删除一个特定的可执行文件。
布拉德·所罗门

1
我确实/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另一个?
Francisc0

15

如果您想控制 /usr/bin/

您将需要重新引导系统:

启动声音刚好出现时,按住Command-R即可启动进入恢复系统

单击实用程序菜单,然后选择终端

键入csrutil disable并按回车键

点击菜单,然后选择重新启动

提交更改后,请确保重新启用SIP!它对保护您的系统很有帮助。(与上述步骤相同,但类型:csrutil enable)


0

如果在调用“ csrutil disabled”后仍然无法执行命令,请在终端中尝试“ sudo”,例如:

sudo mv geckodriver /usr/local/bin

它应该工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.