os x 10.11 中 root用户无法删除 /usr/bin/ 目录下的程序

在 OS X 10.11 中引入的 Rootless

即使是root用户,将无法对以下路径有写和执行权限:
/System
/bin
/sbin
/usr (except /usr/local)

 

  • 禁止直接对 /System/bin/sbin/usr 目录的修改(/usr/local 目录除外). 只有通过苹果开发者认证的 app 才有权限对其修改.
  • 禁止注入系统进程. 某些需要注入系统进程(finder, messages 等等系统级别的进程)的程序, debugger 无法使用了.
  • 禁止加载内核扩展(kexts), 除非它们被苹果开发者正确的签名

这些修改最明显的好处就是: 恶意 app 无法通过用户授权的方式从而获得所有系统权限了.

当然, 它带来的副作用也是巨大的, 一些合法的 app 也无法获得系统权限了. 比如: Homebrew, CocoaPods 以及所有需要在 /usr/bin 目录下有可执行权限的 app.

 

Can someone elaborate on the OS X 10.11 feature called 'rootless'?

定义问题

Rootless讨论的前提是假定root账户是OS X(或者其他Unix系统)中对抗恶意程序保护操作系统的最后一道防线。意思是一个应用程序一旦获得了root账户权限,将会获得系统的无限的权限。就可以进行实时修改、修改磁盘、替换任何系统文件等。

目前,许多传统的Unix操作系统中,root账户都是被强密码保护着的。这里的问题在于大部分的OS X系统基本上是单用户系统,也就是不存在单独的root账户密码,root密码就是管理员账户的密码。简单来说,苹果通过以下途径来获取root权限:

大部分用户会毫不犹豫的输入密码,都不会想他们到底授权了什么行为。更重要的是,授权给了什么应用程序。可以说,对于一般的无经验用户,他们没有时间和专业知识来考虑这个问题。他们不会意识到他们一旦输入了密码,请求的进程就会获得root权限。


什么是系统集成保护(System Integrity Protection)?

使用了系统集成保护,苹果决定第三方应用有一些永远不会被允许的事情。从某些层面来讲,这种保护和iOS更像了。第三方应用相比起来更受限制。这就是rootless一词的由来,系统在某种程度上限制了管理员账号的权限。

rootless特性使得某些操作只有苹果的应用可以被许可(通过代码签名来判断)。所以第三方应用即使是运行在root权限中,有一些操作也无法完成。在我的测试中我注意到了以下几点:

  1. /System文件夹下的所有文件都不能被苹果应用意外的程序修改(例如各种安装器和升级部件)
  2. 当前的API例如task_for_pid不能在系统进程下被调用了。这意味着以前注入系统进程(Finder、Messages或者系统内核)的程序都不能用了。
  3. 有意思的是,rootless依然允许已签名的KEXT内核拓展被载入。问题是KEXT可以进行许多无限制的系统及操作。

总结

Rootless机制的目的很明显是改进安全性和可靠性,使得恶意软件以及木马很难渗透进系统。我很确信他将成为许多恶意软件开发者的一个挑战,不过我也很确定人们会发现这一机制很多薄弱的环节。

这个特性对于一些合法的软件有很多副作用。对此,苹果提供了一种方法使得用户可以关闭这个特性,但这需要用户以恢复模式启动(开机按住Command+R)

如果想了解更多,可以参考苹果的WWDC session视频。

 

解决办法

将Rootless修改成了,enable,所以我们需要关掉它, 重启电脑

按住 Command + R,进入到恢复界面
打开Terminal终端,然后输入
csrutil disable
如果想改回来,将disable改成enable即可

posted @ 2015-10-29 10:49 阿K&LiveCai 阅读(...) 评论(...) 编辑 收藏