2012年8月19日星期日

微博摘:关于沙盒和GateKeeper

今天因为看到因MPlayerX退出MAS所引发的各种对沙盒的批评,我在TXWB上写了点关于沙盒和GateKeeper的东西。本来准备简单写写的,结果还是写了不少,所以决定转载过来。基本上就是原文粘贴过来的,所以逻辑上可能比较乱,而且全是字,请各位见谅了。大家就随便看看吧。


沙盒对用户有什么影响吗?答案是:没有。用户是感觉不到沙盒的存在的。如果一定要说有的话,那么沙盒化的程序可能会比没有沙盒化的程序少一些需要特权的功能。

MPlayerX退出MAS是一个很中国热色的问题。因为MPlayerX需要实现的那些被沙盒限制(不是不允许)的功能,基本上只用盗版影视盛行的中国才有。比如,自动载入下一集,自动加在字幕。因为程序需要读取任意可能的目录下的所有文件--而这正是沙盒所不允许的动作。

虽然我不知道MPlayerX的作者到底和苹果的审核人员在什么问题上没有谈妥。但是我猜测是,MPlayerX的作者希望获得家目录的任意读取权限--因为这样电影文件就能放在家目录的任意位置了--但是苹果怎么都无法理解你一个播放器为什么要这么大的权限。

因为审核者可能并不知道,我们中国的用户经常会下载影视剧“全集”,对于国外的剧集还需要字幕,我们不用iTunes买电影,我们会把电视剧放在任何目录下,等等。。。我猜测,这种认知上的差异,导致了MPlayerX一次次的被拒,最终作者怒而退出MAS。

沙盒化可能带来的另一个问题就是不同的程序之间可能无法共享配置数据了。举个简单的例子。Office套件中的几个组件,在没有沙盒化的时候,可以共享“作者”,“组织”,甚至是序列号信息。但是假如Office套件沙盒化,用户就要为Word,Excel,等单独设置“作者”,“组织”信息了。

当然,Office套件可以简单的读取地址簿中的当前用户的信息,而不是傻乎乎的让用户自己填。而沙盒化之后的程序肯定是走MAS发布,也就无需自有的激活机制了。

沙盒对于码农这边,就悲剧多了。码农调用NSHomeDirectory()访问到的不再是用户的家目录,而是沙盒目录;程序要请求文件,只能弹对话框问用户要--或者请求获得更高的权限--比如,访问读写家目录,读写音乐目录,读写下载目录等。但是这要向苹果说明,你这个程序为什么要这个权限。

沙盒通过限制程序的权限,来保障用户数据的安全。因为即便沙盒化的程序有致命漏洞,所造成的破坏也只是程序创建的文件;对于系统的其他部分是不会有影响的。综上,沙盒机制,会很束缚开发者的手脚,有一些非沙盒化的程序能够简单实现的功能,在沙盒下要麻烦很多。而沙盒对于用户实际上是透明的。

所以在喷沙盒限制自由前,先确定一下自己的身份。如果你是码农,欢迎来喷;如果你是终端用户,你应该做的是喷码农:赶快把程序给我沙盒化去。

然后来说说GateKeeper。GateKeeper是什么?GateKeeper说白了就是程序白名单。要进入白名单的条件是,开发人员要用苹果签发的数字签名来签署程序。GateKeeper很严厉,所有不是白名单的程序都会被操作系统拒绝执行。GateKeeper确实会影响终端用户的日常使用。

很多人会问一个问题:GateKeeper和沙盒有关系吗?答案是:没有。沙盒化的程序一般都来自MAS--大约没有几个开发者会把不提交给MAS的程序沙盒化。而GateKeeper对MAS的程序是自动放行的。GateKeeper主要是限制那些非沙盒化的程序的--因为他们并不能通过MAS发布,苹果也就无法保证程序的安全性了。

苹果通过给开发人员发“良民证”(Developer ID)来控制白名单。获得“良民证”的开发人员,用“良民证”签发程序,表明这是来自“良民”的程序,请系统放行。一旦“良民”做了某些“非法”的事情,比如,用“良民证”签署了一个恶意软件,苹果会撤回该开发人员的“良民证”,以保证系统安全。

GateKeeper实际上会定期从苹果更新数据,以保证那些被撤销的“良民证”不再被系统所允许。从某种意义上来说,GateKeeper是用户和苹果一起来监督开发人员的行为。但是现在的问题来了。有很多开源的软件,并没有用Developer ID签署程序。对于开源软件的重度用户,GateKeeper非常影响使用。

用户可以选择关闭GateKeeper。这样,所有程序都会允许执行;但是对于之前的“Flashback”这样的恶意程序也就能够乘虚而入了。或者用户可以在必要的时候关闭GateKeeper。比如,你下载了一个LibreOffice,但是被GateKeeper阻止了,你可以临时关闭GateKeeper。运行LibreOffice之后再次打开GateKeeper。

只要程序运行过一次,不管有没有通过GateKeeper,系统也不会再阻止它运行了。相信随着时间的推移,会有越来越多的不通过MAS发布的程序能够用Developer ID签发。GateKeeper对于完全使用盗版程序的用户绝对是噩梦。他们能做的是只有禁用GateKeeper;或者不厌其烦的关闭再打开。

总结一下:沙盒是好东西,对用户没有影响; GateKeeper和沙盒没有任何关系;GateKeeper也是好东西,需要时间来解决很多开源软件没有Developer ID数字签名的问题。(事实上很多开源软件已经有Developer ID签名了,比如Adium。)

另外,我觉得,苹果还是过早的推广GateKeeper了。很多用户几乎都是直接禁用的。当然这么做的理由可能是催促开发人员早日使用Developer ID数字签名。

有人可能会拿GateKeeper跟Windows的UAC做对比。简单地说,GateKeeper和微软的UAC的区别在于,UAC是无差别弹出权限对话框;而GateKeeper是有差别对待的,因此GateKeeper会随着时间的推移越来越透明,而UAC不会。

没有评论:

发表评论