陈斌彬的技术博客

Stay foolish,stay hungry

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

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

只有Apple自身签名的软件(含命令行工具)可以。————————详细说明:先简单介绍一下OS X的权限系统吧OS X 的内核XNU,一个由Mach,BSD,IOKit混合的内核,所以它的权限管理系统类似UNIX的BSD简单的小知识(用过Linux的可以跳过)

1.一个用户(user)对于一个文件有三种状态,可读®、可写(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用户的专属用户组。

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

lizhuolideMacBook:~ lizhuoli$ groups
staff everyone localaccounts _appserverusr admin 
...

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

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

bash-3.2# whoami
root
touch /usr/test
touch: test: Operation not permitted

现在你虽然用 whoami 看到自己明明是root用户了,但是不能有对/System /usr等文件夹的写入权限,甚至将一些原来的所属用户组为admin的文件夹的权限全部改为了wheel(比如对/usr/local,在10.11之前都是属于当前用户:admin用户组的,启用Rootless会变成root:wheel)。这样防止了黑客入侵,病毒修改,一些恶意软件的篡改文件权限的行为。当然,你也可以禁用Rootless,不过这就多了一份被恶意软件攻击的潜在威胁。建议此时打开Mac App Store 和被认可的开发者或者纯粹的Mac App Store限制。

Resource Reference