苹果已经在OS X 10.11 El Capitan中引入了系统完整性保护,也称为“无根”。我了解这是针对恶意软件进行一般保护的步骤,但是作为开发人员,我需要对其锁定的某些文件具有写权限。
如何禁用此保护?
苹果已经在OS X 10.11 El Capitan中引入了系统完整性保护,也称为“无根”。我了解这是针对恶意软件进行一般保护的步骤,但是作为开发人员,我需要对其锁定的某些文件具有写权限。
如何禁用此保护?
Answers:
Apple的文档包括禁用SIP,关于Mac上的系统完整性保护和配置系统完整性保护。
lifehacker.com上的一篇文章列出了以下步骤:
- 通过重新启动计算机并按住Command+ R直到屏幕上出现Apple徽标,将Mac重启到恢复模式。
- 单击实用程序>终端。
- 在“终端”窗口中,输入
csrutil disable
并按Enter。- 重新启动Mac。
您可以通过ls
使用大写字母O(而不是零0)发出此命令来修改长列表标志,来验证文件或文件夹是否受到限制:
ls -lO /System /usr
查找受限制的文本以指示在何处实施SIP。
默认情况下(=启用SIP),以下文件夹受到限制(请参阅Apple支持页面):
/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X
...,以下文件夹是免费的:
/Applications
/Library
/usr/local
ls -lO /usr/local
未标记为受限。我也/usr/local/
递归了。但是我一直看到根获得所有权/usr/local/bin
并/usr/local/share
影响自制。这也是SIP的工作吗?
/usr/local
不受限制,您可以轻松修复此目录“以下”的任何权限。Homebrew实际上建议运行sudo chown -R $(whoami) /usr/local
(以管理员用户身份登录)以解决权限问题。
/usr/local
现在已正确设置权限。
可以通过启动到Recovery HD并运行以下命令来禁用SIP :
csrutil disable
通过向csrutil enable
命令添加一个或多个标志,也可以启用SIP保护并有选择地禁用其某些方面。所有这些都需要从Recovery启动才能进行设置:
启用SIP并允许安装未签名的内核扩展
csrutil enable --without kext
启用SIP并禁用文件系统保护
csrutil enable --without fs
启用SIP并禁用调试限制
csrutil enable --without debug
启用SIP并禁用DTrace限制
csrutil enable --without dtrace
启用SIP并禁用写入NVRAM的限制
csrutil enable --without nvram
我也有一个帖子,提供有关SIP的更多信息:
csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
如果目标是实际上只是禁用系统完整性保护,那么按照上述其他答案中先前建议的方式,通过引导时的Command+ 引导进入Recovery HD分区并不是最快的方法。r
您可以将单用户模式启动与恢复高清启动结合使用,而未公开的启动键组合为:
这让你刚进入所需要的这种最低限度的环境直接。
修改会更安全,/etc/paths
因为这/usr/local/bin
只是之前usr/bin
。这样,您就可以在/usr/local/bin
不禁用SIP的情况下完成开发工作。
/etc/paths
自El Capitan以来,操作系统的全新安装一直以这种方式订购,但是如果您要从优胜美地或更早的版本升级操作系统,则必须手动修改路径顺序。
usr/bin
。由于SIP现在阻止了此操作,因此应将程序安装到usr/local/bin
,不受SIP的限制。通过将usr/local/bin
第一,用户无需输入了绝对路径程序运行的程序。这有意义吗?您是否对其他事情感到困惑?
/usr/bin
但是我想我应该问的是“这如何回答OP的问题?” 原本我是假设它确实在某些方面,而我只是没有进行连接。但是现在我非常怀疑它是否有任何联系。
如果您只需要访问/ usr / local,请看此页面:https : //github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md
这个想法是使用,add ,使用chflags 暂时禁用SIP来将该目录设置为非限制csrutil disable
/usr/local
sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown -R $(whoami):admin /usr/local
然后使用重新启用SIP csrutil enable
。
如果/usr/local
在升级时已经存在,则甚至不需要上述操作。您可以简单地运行
sudo chown -R $(whoami):admin /usr/local
Read-only file system
如果您无法进入恢复分区运行csrutil disable
(以禁用SIP),请尝试使用nvram
命令设置启动参数,例如
sudo nvram boot-args="rootless=0"
但是,如果出现以下错误:
nvram:错误设置变量-'boot-args':(iokit / common)不允许
那就行不通了 您仍然需要启动它的恢复/安全模式。
看到:
nvram: Error setting variable - 'boot-args': (iokit/common) not permitted
我没有足够的声誉来将此添加为上面的github Homebrew 404链接的注释。Wayback Machine仍然拥有它: