El Capitan 中 SIP 介绍
2015-10-21 16:51
281 查看
http://havee.me/mac/2015-10/system-integrity-protection-on-el-capitan.html
这两天大家纷纷将 OS X 系统升级到了 El Capitan,然后发现,一些注入的工具无法使用了,某些系统目录无法使用了,第三方未签名的 kext 无法加载了,问题一堆堆的。这是因为,Mac OS X 在 10.11 中全面启用了 System Integrity Protection (SIP) —— 系统完整性保护技术。SIP 技术主要是用来限制 root 用户的权限,以提升系统的健壮性。
具体哪些目录受到保护,可以查看文件
/System/Library/Sandbox/rootless.conf
不被保护的列表存储在
/System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths
Mac 提供了内置
csrutil配置来进行一些 SIP 的配置。在默认情况下,SIP 是开启状态,你可以用一下指令查看
$ csrutil status System Integrity Protection status: enabled
可配置项如下,字面意思:
Apple Internal Kext Signing Filesystem Protections Debugging Restrictions DTrace Restrictions NVRAM Protections
一. 白苹果用户
上面已经说过,Mac 提供了内置的csrutil工具来让用户进行一些配置,不过,你需要重启进入到 Recovery mode (Cmd + R on boot) 下进行操作。
csrutil 的一些常用命令
csrutil clear # 清除 SIP 用户配置,即开启默认的 SIP csrutil enable # 开启 SIP csrutil disable # 禁用 SIP csrutil status # 查看当前 SIP 配置
关于
csrutil enable可用参数为
csrutil enable --no-internal --without kext --without fs --without fs --without debug --without dtrace --without nvram
譬如说,如果你需要某系统目录的读写权限,譬如 homebrew 全新安装的时候,需要创建
/usr/local目录,那么你需要
重启进入 Recovery mode
打开 Terminal.app,输入
csrutil enable --without fs
重启至正常系统下,打开 Terminal.app,安装 homebrew
再次重启至 Recovery mode
打开 Terminal.app,输入
csrutil enable
重启
如果想安装第三方的 kext,那么建议装在目录
/Library/Extensions/下。
二. 黑苹果 Clover 用户
这里只说 Clover 用户,你需要配置你的 Clover ,加入如下代码<key>RtVariables</key> <dict> <key>CsrActiveConfig</key> <string>0x11</string> </dict>
<key>RtVariables</key>跟
<key>SMBIOS</key>同级,如下图
![](http://cdn.09hd.com/images/2015/10/clover-config.png)
其中 CsrActiveConfig 的值 0x 后跟的是十六进制,Clover 中我们完全开启的值是 0x77,其中 77 转化为两进制为 01110111。
对于 01110111,每一位开启 SIP 的特定功能,从右至左 8 个位置我们以 B0-B7 表示:
B0: 允许加载不受信任的 kext
B1: 解锁文件系统限制
B2: 允许 task_for_pid()调用
B3: 允许内核调试
B4: Apple 内部保留位,值为 1 等效于
csrutil enable
B5: 解锁 DTrace
B6: 解锁 NVRAM
B7: 允许设备配置
如此,我们很清楚了,如果我们只想加载修改的或第三方的 kext,只需 B0 于 B4 位置值为 1,则整个两进制值为 00010001,用 bc 命令行工具进行任意进制转换
$ echo "obase=16; ibase=2; 00010001"|bc 11
转化为十六进制为 11,则 CsrActiveConfig 值为 0x11。
如果要同时解锁 kext 与 fs 呢,00010011 --> ?
$ echo "obase=16; ibase=2; 00010011"|bc 13
十六进制值为 13,CsrActiveConfig 值为 0x13。
为了有助于我们的理解,看下表所示:
Configration | N/A | NVRAM | Dtrace | internal | Debug | PID | FS | Kext | HEX | Clover |
---|---|---|---|---|---|---|---|---|---|---|
csrutil enable --no-internal | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0x00 |
csrutil enable | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 10 | 0x10 |
csrutil enable --without kext | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 11 | 0x11 |
csrutil enable --without fs | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 12 | 0x12 |
csrutil enable --without debug | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 14 | 0x14 |
csrutil enable --without dtrace | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 30 | 0x30 |
csrutil enable --without nvram | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 50 | 0x50 |
csrutil disable | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 77 | 0x77 |
csrutil disable (no internal) | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 67 | 0x67 |
http://osxarena.com/2015/10/guide-details-apples-system-integrity-protection-sip-for-hackintosh/
http://bbs.pcbeta.com/viewthread-1605186-1-1.html
相关文章推荐
- OC、C#与JAVA语法特点一些异同(差集&交集)
- OS X升级El Capitan后,git difftool无法打开diffmerge的解决方法
- 通知传值
- 加减年、月、日、时、分、秒
- 取得应用在内存卡中的文件路径
- Oracle Data Guard RAC到单机ASM配置(物理standby)
- 使用elk+redis搭建nginx日志分析平台
- ajax发送json格式数据到后台(输入流content)
- sicily 1135. 飞越原野
- 邮件那些事4—浅析伪造发信人的原理与识别
- properties的基本使用
- AOP 统一处理exception
- Struts中Action的线程访问安全问题
- is already under version control
- IOS-18-网络通信之Socket通信中服务端与客户端的实现
- [Golang] 从零开始写Socket Server(6)【完结】:日志模块的设计与定时任务模块模块
- 【转】Android DrawingCache
- 批量删除SVN文件
- LabVIEW中数组的自动索引
- Struts2常用标签(转载)--【SSH】