seegongsik
操作系统

文件权限 怎么工作

上一课,我们在平平的磁盘上立起了一棵文件和文件夹的树。可如果一台电脑由好几个人一起用,这棵树上就会并排挂着我的文件和别人的文件。要是谁都能打开、修改、删除别人的文件,很快就会乱成一团。谁能做什么,得有一条规矩。

01

同一棵树,多个主人:每个文件都有所有者标签

设想全班同学共用学校的一台电脑。文件树上挂着我做的演示文稿、同学交的作业,还有电脑自己要用的配置文件。
要是一条规矩都没有,谁都能打开我的演示文稿随意改动,甚至整个删掉;也可能有人乱动配置文件,让电脑再也开不了机。
所以操作系统做的第一件事,就是给每个文件贴上所有者标签,把这个文件是谁建的、归谁所有,一个个记下来。

点文件查看所有者

把三个文件挨个点一下,主人就会显示出来。你的文件是金色,同学的和系统的是暗色,没有一个文件没有主人。

现在,哪个文件归谁已经清楚了。可光知道主人还不够。
同学打开我的演示文稿只是看看,和动手修改或删除,完全是两回事。看看可以,改动却未必愿意。
所以对一个文件,到底允许做到哪一步,还得分得更细。

02

三种动作:读取、写入、执行

操作系统把能对文件做的事分成正好三种。读取是查看文件的内容,写入是修改或删除内容,执行是在文件本身是程序时把它运行起来。
这三种可以各自打开、关闭。只开读取、关掉写入,这个文件就只能看、不能改。
就算是程序文件,执行关着也运行不了。

点读取、写入、执行,分别打开或关闭。一开始只有读取是开着的,这个文件只能看。打开变绿(允许),关闭变红(阻止),改动其中一个,另外两个不受影响。

只靠读取、写入、执行这三个开关,就能调得相当细。可以只许看不许改,也可以只许运行。
不过还缺一样。说允许读取,到底是允许谁?只允许主人,还是允许全世界的人?意思完全不同。
同一个文件,也得能按来的人是谁,给出不同的允许范围。

03

给谁?所有者、组、其他人

操作系统把人分成三类。第一类是文件的主人,叫所有者;第二类是被编进同一个小组的人,叫组,可以想成同组的同学;第三类是除此之外的所有人,叫其他人。
然后,把读取、写入、执行分别给这三类人规定。下图一开始的状态就是一个例子:所有者三样都能做,组只能读取和执行,其他人只能读取。
这样,权限就成了一张把“谁”(三行)和“做什么”(三列)交叉起来的表。

读取
写入
执行
所有者
组
其他人

每点一次格子,就在允许(绿)和阻止(红)之间切换。行是所有者、组、其他人,列是读取、写入、执行,所以同一个文件可以给每类人不同的权限。

现在,即使是同一个文件,也能给不同的人不同的权限了,秩序相当细密。
可这里冒出一个难题。要是每个文件都被主人牢牢锁住,那往电脑里装新程序,或者有人忘了密码时帮他重新设置,这些事该由谁来做?
看来需要一个能打开所有锁的特殊人物。

04

管理员(root):凌驾于规则之上的万能钥匙

这个特殊人物就是管理员。在 Linux 这类系统里,它叫 root,也叫超级用户。管理员会直接跳过前面那张权限表,手里握着一把能读取、修改、运行任何文件的万能钥匙。
靠着它,才能安装新程序、修好坏掉的设置、给忘掉的密码重新设定。
但这把钥匙同样危险。以管理员身份敲错一条命令,就可能毁掉整个系统。所以平时大家都以普通用户的身份使用电脑,只在真正需要的那一刻才借用管理员权限。

secret.txt同学

先以普通用户的身份打开同学上锁的文件,会被阻止(红)。切换成管理员再打开一次,万能钥匙就让它通过了(绿)。

上锁的文件对普通用户紧闭,对管理员却打开了。正因为有这把万能钥匙,才总有人能照看和修理电脑。
同时也看得出,为什么不该没事就以管理员身份到处走动:在这把钥匙面前,所有的锁都失去了作用。
权限这套秩序,把普通用户留在围栏之内,给管理员越过围栏的力量,同时要求这份力量被慎重使用。

05

小结:谁乘以做什么,以及其上的管理员

用一页来归纳,就是这样。为了守护多人共用的树,操作系统给每个文件贴上所有者标签,再挂上一张小表。
表的横向是“做什么”,也就是读取、写入、执行;纵向是“谁”,也就是所有者、组、其他人。每一格,允许就标绿,阻止就标红。
在整张表之上,站着握有万能钥匙的管理员。普通用户只能做表允许的事,管理员却能跳过表,什么都能做。上一课那棵整齐的树,如今成了一棵多人可以安全共用的树。

读取
写入
执行
所有者
✓
✓
✓
组
✓
✗
✓
其他人
✓
✗
✗

表里用绿和红列出了所有者、组、其他人各自能做的事。点下面的按钮切换成管理员,万能钥匙会一下子把整张表都变成允许(蓝)。

可这里又露出一道奇怪的缝隙。前面讲过,操作系统给程序筑起了墙,不让它直接碰硬件和磁盘。
那么,我的程序连一个允许读取的文件,又是怎么打开的?其实程序自己打不开文件,只能请操作系统帮它打开。
下一课讲系统调用,也就是程序把工作交给操作系统的正式窗口。查这张表、核对权限,也正是在这个窗口完成的。

一句话总结操作系统给每个文件贴上所有者标签,并规定谁能做什么。动作有三种:读取(看内容)、写入(修改或删除)、执行(当作程序运行),分别授予所有者、组和其他人。管理员(root)站在这些规则之上,握着一把无所不能的万能钥匙,正因为危险,只在真正需要时才用。说到底,权限就是一张“谁乘以做什么”的小表,守护着多人共用的那棵树的秩序。
← 操作系统
如果有帮助,请支持我们