Leo Code

主页 > MAC > Mac OSX 10.11 终端出现Operation not permitted

Mac OSX 10.11 终端出现Operation not permitted

前段时间,想在我的Mac上编译一个ngrok,可是在执行某些步骤的时候,需要动到/usr/bin/目录下的文件,但是即便是用sudo去提权操作,仍然提示

Operation not permitted

说明权限不足,百思不得其解,以前这样操作明明都是可以的,从来没遇到过这样的问题。于是一番查找,原来新版本的OSX,限制了直接写入系统文件,只有经过认证的组织和个人编写的软件才能读写这些目录下的文件,这是苹果的Rootless机制。但是苹果还是给留了一个后路,也就是一旦非要动里面的文件,也不是不可以,需要执行以下操作,但是建议,执行完毕后,修改好你要弄的东西,马上就把它调回来,因为这个安全机制,还是我觉得还是很有必要的。

1、关闭Rootless机制,重启按住Command+R键,进入恢复模式,打开终端执行

csrutil disable

重新启动,进入系统,执行你要提权的操作。


2、恢复Rootless机制,依然需要重启进入恢复模式,打开终端执行

csrutil enable

重新启动,搞定。


3、csrutil 命令的其他参数:

csrutil enable [--without kext | fs | debug | dtrace | nvram][--no-internal]

禁用:csrutil disable

(等同于csrutil enable --without kext --without fs --without debug --without dtrace --without nvram)
其中各个开关,意义如下:

B0: [kext] 允许加载不受信任的kext(与已被废除的kext-dev-mode=1等效)
B1: [fs] 解锁文件系统限制
B2: [debug] 允许task_for_pid()调用
B3: [n/a] 允许内核调试 (官方的csrutil工具无法设置此位)
B4: [internal] Apple内部保留位(csrutil默认会设置此位,实际不会起作用。设置与否均可)
B5: [dtrace] 解锁dtrace限制
B6: [nvram] 解锁NVRAM限制
B7: [n/a] 允许设备配置(新增,具体作用暂时未确定)