权限:同一棵树,谁能做什么
上一讲,我们在平铺的磁盘之上立起了一棵整齐的文件和文件夹的树。可要是一台电脑由许多人一起用,那棵树上挂着我的文件和别人的文件。谁都能打开、修改、删除别人的文件吗?没有秩序就会乱套。谁能做什么,需要一条规则。
同一棵树,多个主人:每个文件的所有者标签
假设全班共用一台学校的电脑。文件树上挂着我做的演示稿、朋友的作业,还有电脑自己用的配置文件,全都在一起。要是一条规则都没有,谁都能打开我的演示稿去改,或者整个删掉。光是想想就让人心惊。所以操作系统做的第一件事,就是给每个文件贴上所有者标签。这个文件是谁的、主人是谁,清清楚楚地写下来。
点一个文件看它的所有者。你的显示为金色,别人和系统的显示得暗淡。每个文件都有主人。
现在哪个文件是谁的,已经清楚了。可知道主人还不算完。朋友只是打开我的演示稿看看,和修改或删除它,完全是两回事。所以光有所有者标签还不够,我们得更细地分清:对一个文件,到底允许做哪些动作。这些动作是哪几样,下面就看。
三种行动:读取、写入、执行
对一个文件能做的事,操作系统恰好看成三种。第一,读取:查看文件的内容。第二,写入:修改内容,或者干脆删掉。第三,执行:如果这个文件是程序,就运行它让它干活。这三种可以分别打开和关闭。比如某个文件允许读取却禁止写入,于是你只能看不能改。而程序文件,只有执行被打开,才会运行起来。
点读取、写入、执行来打开和关闭。打开是绿色(允许),关闭是红色(阻止)。三者各自决定。
读取、写入、执行。光这三个开关,就已经能做相当细致的调节了。可以允许看却禁止改,或者只允许运行。但还差一样。说允许读取的时候,到底是允许谁呢?只是主人?还是世上所有人?同一个文件,也该因为来者是谁而给出不同的允许。下面,我们就来分一分这个"谁"。
给谁?所有者、组、其他人
操作系统把人分成三拨。第一拨是所有者,也就是文件的主人本人。第二拨是组,被归到同一个小组里的人,可以想成同一组的同学。第三拨是其他人,也就是这之外的所有人。然后,把刚才看到的读取、写入、执行三种行动,给这三拨人分别规定。于是同一个文件,所有者读和写都行,组只能读,其他人什么都不能做。权限就这样成了一张把"谁"和"什么"交织起来的表。
点格子来打开和关闭。行是所有者、组、其他人,列是读取、写入、执行。绿色是允许,红色是阻止。同一个文件,对象不同权限不同。
现在,就算是同一个文件,也能给不同的人不同的权限了。这是相当细密的秩序。可这里又冒出一个为难的情形。要是每个文件都被主人牢牢锁住,那么往电脑里装新程序,或者有人忘了密码时去帮他修好,这些事谁来做呢?看来需要一个能打开所有锁的特别的人。下面,我们就来见见这个人。
管理员(root):站在规则之上的万能钥匙
那个特别的人,正是管理员。英语里叫作 root 或超级用户。管理员会跳过普通的权限规则。他握着一把能读、能改、能运行任何文件的万能钥匙。靠它,可以装新程序、修好坏掉的设置、给忘记的密码重新设定。但这把钥匙也很可怕。作为管理员,一个失误就可能毁掉整个系统。所以平时以普通用户的身份生活,只在真正需要时才借用管理员权限。
以普通用户的身份,试着打开被锁的文件。会被阻止(红色)。切换成管理员,再点一次。用万能钥匙就被允许(绿色)。
被锁的门,对普通用户被挡住,对管理员打开了。正因为有这把万能钥匙,电脑才能被照看和修理。同时,你大概也感受到了,为什么不该随随便便以管理员的身份四处走动:所有的锁都会失效。权限这套秩序,把普通用户放在围栏之内,又给管理员越过围栏的力量,但要求郑重对待它。那么,我们一次性把整体梳理一遍吧。
小结:谁乘以什么,以及其上的管理员
用一页来归纳,是这样的。为了守护共享的树,操作系统给每个文件贴上所有者标签,再挂一张小表。横向是"什么",也就是读取、写入、执行。纵向是"谁",也就是所有者、组、其他人。每一格,允许就绿色,阻止就红色。而在这整张表之上,站着握有万能钥匙的管理员。普通用户只能在表允许的范围内行事,管理员则跳过表,无所不能。上一讲那棵整齐的树,如今成了一棵可以安全共享的树。
点格子查看权限表。再切换成管理员。万能钥匙会把整张表一下子变成全部允许。
可这里又露出一道奇妙的缝隙。前面说过,操作系统给程序立了一道墙,不让它直接碰硬件或磁盘。那么,我的程序连一个被允许读取的文件,又是怎么自己打开的呢?其实它打不开。它得礼貌地向操作系统请求。下一讲,我们就开始讲系统调用,也就是程序向操作系统请求干活的正式窗口。检查权限,也正是在那个窗口完成的。