iOS是一个多用户操作系统。“用户”是一个抽象的概念,它代表对操作系统的所有权和使用权。比如,mobile用户无法调用reboot命令重启iOS,而root用户却可以;“组”是用户的一种组织方式,一个组可以包含多个用户,一个用户也可以属于多个组。
iOS中的每个文件都有一个属主用户和一个属主组,或者说这个用户和这个组拥有这个文件;每个文件都具有一系列权限,简单地说,权限的作用在于说明文件的属主用户能做什么,属主组能做什么,以及其他所有人能做什么。iOS用3位(bit)来表示文件的权限,从高位到低位分别是r(read)权限、w(write)权限,以及 x(execute)权限。文件与用户的关系存在以下三种可能性:
此用户是属主用户;
此用户不是属主用户,但在属主组里;
此用户既不是属主用户,又不在属主组里。
所以需要用3 * 3位来表示一个文件的权限,如果某一位为1,则这一位代表的权限生效,否则无效。例如,111101101代表rwxr-xr-x,即该文件的属主用户拥有r、w、x权限,而属主组和其他所有人只具有r和x权限;同时,二进制的111101101转换成十六进制是755,也是一种常见的权限表示法。
事实上,除r、w、x权限外,文件还可以拥有SUID、SGID和sticky等特殊权限,它们的应用频率不高,因此不占用单独的权限位,而是以简化形式出现在x权限所在的权限位中。在iOS逆向工程初学阶段,一般接触不到这些特殊权限,仅作简单了解即可。如果你对它们感兴趣,可以阅读 http://thegeekdiary.com/what-is-suid-sgid-and-sticky-bit/,也可以来http://bbs.iosre.com参与讨论。