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 目录,那么你需要

  1. 重启进入 Recovery mode
  2. 打开 Terminal.app,输入 csrutil enable --without fs
  3. 重启至正常系统下,打开 Terminal.app,安装 homebrew
  4. 再次重启至 Recovery mode
  5. 打开 Terminal.app,输入 csrutil enable
  6. 重启

如果想安装第三方的 kext,那么建议装在目录 /Library/Extensions/ 下。

二. 黑苹果 Clover 用户

这里只说 Clover 用户,你需要配置你的 Clover ,加入如下代码

<key>RtVariables</key>
<dict>
<key>CsrActiveConfig</key>
<string>0x11</string>
</dict>

<key>RtVariables</key> 跟 <key>SMBIOS</key> 同级,如下图

其中 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

十六进制值为 13CsrActiveConfig 值为 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

参考:

El Capitan 中 SIP 介绍的更多相关文章

  1. [转载]El Capitan 中 SIP 介绍

    这两天大家纷纷将 OS X 系统升级到了 El Capitan,然后发现,一些注入的工具无法使用了,某些系统目录无法使用了,第三方未签名的 kext 无法加载了,问题一堆堆的.这是因为,Mac OS ...

  2. 【Xamarin挖墙脚系列:关闭 OS X El Capitan 中 SIP 安全设置功能】

    比如需要修改内核配置文件: com.apple.Boot.plist 那么我们需要解锁权限. 禁止SIP模式,那么就可以修改此文件了. 在 OS X El Capitan 中有一个跟安全相关的模式叫 ...

  3. Matlab 2013b 在El Capitan 中无法使用问题解决

    更新了mac的操作系统到El capitan, 结果发现Matlab打不开了,每次都弹出一个Java error的窗口.现实如下内容 java.lang.NullPointerException at ...

  4. [转]Mac OS X El Capitan(10.11)显示隐藏文件命令失效解决方法

    在Mac全新的系统El Capitan中,原先的显示系统中所有的隐藏文件的指令似乎失效了,只有重启以后才能显示,其实还有一个更简单的办法: 先在终端输入: defaults write com.app ...

  5. Mac OS X El Capitan系统完整性保护System Integrity Protection (SIP)

    http://blog.csdn.net/yulimin/article/details/49992031 引言:前段时间经历了XCode编译器代码被注入的事件后,这次 Mac OS X El Cap ...

  6. Mac制作U盘系统(OS X El Capitan)教程

    前言部分 重装过Mac OS X系统的人应该都深有体会,通过自带的重新安装 Mac OS X功能恢复系统(开机时按Command+R) 要耗费10几个小时才能完成(请求苹果国外服务器),但如果通过U盘 ...

  7. 纯window下VMware 安装 OS X El Capitan 原版映像【未完待续】

    一.所需软件1.下载OS X El Capitan 10.11.2 15C50链接:http://pan.baidu.com/s/1skuLgAx 密码:u2jf 2.下载VMware Worksta ...

  8. 最详细的制作正式版10.11 OS X El Capitan 安装U盘的方法

    原帖地址:http://bbs.feng.com/read-htm-tid-10036487.html 一.准备工作: 1.准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程 ...

  9. 制作正式版10.11 OS X El Capitan 安装U盘(优盘)

    一.准备工作:1.准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程会抹掉 U 盘全部数据)2.从官网Appstore下载下来的 “安装 OS X El Capitan”,当 ...

随机推荐

  1. Android first --- 网络编程

    网络编程 ###图片下载查看 1.发送http请求 URL url = new URL(address); //获取连接对象,并没有建立连接 HttpURLConnection conn = (Htt ...

  2. Mac电脑清理硬盘&quot;其他&quot;

    作为一个MacBook的使用者,无不感受到苹果对于系统和硬件的完美匹配. 苹果电脑不适合玩游戏,所以我只用它开发iOS使用.电脑里除了Xcode和常用办公软件与通讯软件以外,我没有装其他的任何大应用. ...

  3. JUnit报错:java.lang.ClassNotFoundException:

    只要把Java--------compiler-------building-------Buil path problems ------- incomplete build path 和 Circ ...

  4. mysqlbinlog flashback 5.6完全使用手册与原理

    版本更新 2016/3/7 首次发布      2016/3/9  修复update无效问题      2016/4/8  修复带有秒级别以下的日期数据bug 下载地址 http://pan.baid ...

  5. [ES6] Promise

    How to use: export default function getReplies(topicId){ return new Promise(function( resolve, rejec ...

  6. php使用openssl进行数字签名验证

    <?php /** * Created by PhpStorm. * User: hanks * Date: 6/2/2017 * Time: 6:03 PM */ /* [数字签名] 使用完全 ...

  7. exit()

    exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳回操作系统. exit(0) 表示程序正常退出,exit⑴/exit(-1)表示程序异常退出. exit() 结束当前进程/当前程 ...

  8. 【Spring】10、Spring中用@Component、@Repository、@Service和 @Controller等标注的默认Bean名称会是小写开头的非限定类名

    @Service用于标注业务层组件(我们通常定义的service层就用这个) @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即 ...

  9. Docker镜像加速设置

    地址:https://www.daocloud.io/mirror#accelerator-doc 配置 Docker 加速器 Linux MacOS Windows curl -sSL https: ...

  10. WINDOWS SERVER 2008远程桌面端口修改方法

    微软默认的服务器远程端口是3389,这是被很多黑客利用的端口,如何修改掉了,下面我们来说方法很多朋友在使用WINDOWS操作系统的时候,都喜欢修改远程连接的默认端口.但是很多朋友由于修改端口的方法错误 ...