在 OS X 10.11 中引入的 Rootless 是如何实现的?有什么优势与缺陷?

来源:互联网 发布:沙尔托·科普雷 知乎 编辑:程序博客网 时间:2024/06/16 09:34

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

只有Apple自身签名的软件(含命令行工具)可以。

————————

详细说明:

先简单介绍一下OS X的权限系统吧
OS X 的内核XNU,一个由Mach,BSD,IOKit混合的内核,所以它的权限管理系统类似UNIX的BSD

简单的小知识(用过Linux的可以跳过)

1. 一个用户(user)对于一个文件有三种状态,可读(r)、可写(w)、可执行(x),一个文件会有一个所属用户,所属用户组。还会有文件属主权限、同组用户权限、其他用户权限这三种标识符用来定义一个文件对一个用户的权限集合。

2. 为了达到多个用户的权限管理,每个用户会在一个或者多个用户组(group)中,一个用户组可以有多个用户

3. root用户是一个特殊用户(超级用户),拥有对所有文件的rwx权限(可读可写可执行)

4. UNIX系统是纯粹基于文件的,换言之你的网络读取,驱动程序,分区表什么的其实都会以文件的形式存在

复杂的小知识

OS X 内置会有staff wheel admin这三种常见的用户组,分别介绍一下

1. staff : 所有创建用户都会属于这个用户组,提供最基本的对该用户目录~/*(/User/*)的rwx权限,其他的一般只有r或者rx权限。比如我建立一个用户叫做lizhuoli,那么我会在一个staff组里面,对/User/lizhuoli/*有rwx权限。

2. admin :默认创建的所有用户也会属于这个admin用户组,在它里面的用户可以通过
su
或者
sudo
切换到root用户,只要执行以后输入这个用户的密码即可,而不需要知道root密码。

3. wheel :唯一只拥有一个用户root,意思是root用户的专属用户组。

小说明


1. 以前
在OS X 10.11之前的版本,你一旦创建一个用户,那么你就自动属于staff和admin用户组,这样,你要执行一个高权限操作,比如安装一些.pkg文件,需要对/System、/Library、/usr等文件夹的写入权限(一般是安装那种高权限程序,比如JDK会默认安装在/Library/Java中),就会提示你输入当前用户的密码,这时候系统会自动切换到root用户执行,然后执行完切换回来(终端执行sudo xxx同理)

举个例子:
lizhuolideMacBook:~ lizhuoli$ groupsstaff everyone localaccounts _appserverusr admin ...

这样就存在一个问题,一旦你的Mac的某一个用户密码被盗取,那么黑客就拥有了root账户的权限,甚至可以改动你的其他用户,这是有潜在风险的。而且更可怕有些恶意软件先引诱你打开允许任何来源,然后再弹窗让你授权以管理员权限,它就相当于一个root用户可以为所欲为了~比如偷偷的加几个进程监听你的所有网络链接呀,劫持键盘输入呀~各种……



2. 现在
OS X 10.11 加入了Rootless,默认创建的用户还是属于admin用户组,也能切换到root用户,但是加以了限制,结果是一旦你执行su 或者 sudo切换到root用户
你的这个root用户不再是真正的root用户(对所有文件有rwx)
你的这个root用户不再是真正的root用户(对所有文件有rwx)
你的这个root用户不再是真正的root用户(对所有文件有rwx)

重要的话说三遍!

bash-3.2# whoamiroottouch /usr/testtouch: test: Operation not permitted

现在你虽然用 whoami 看到自己明明是root用户了,但是不能有对/System /usr等文件夹的写入权限,甚至将一些原来的所属用户组为admin的文件夹的权限全部改为了wheel(比如对/usr/local,在10.11之前都是属于当前用户:admin用户组的,启用Rootless会变成root:wheel)。这样防止了黑客入侵,病毒修改,一些恶意软件的篡改文件权限的行为。(不过话说Homebrew — The missing package manager for OS X应该也要更新了,因为Rootless下面Homebrew的安装路径/usr/local都是root:wheel的……)

当然,你也可以禁用Rootless,不过这就多了一份被恶意软件攻击的潜在威胁。建议此时打开Mac App Store 和被认可的开发者或者纯粹的Mac App Store限制。
小结论

嘛,防止了大部分恶意软件想通过单纯的引导用户,输入自己的密码点击确定来直接切换到root做一些违法的事情。也可以防止黑客黑了一个用户然后就有root权限可以肆意妄为的情况,不过对于真正的黑客来说

解决办法:

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

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

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

更新关闭方法,兼容Beta7

开机按住Command+R,进入恢复模式,打开terminal,键入:

csrutil disable



回车,重新启动即可。要重新恢复,只需将disable改为enable。

1 0