《unix环境编程》笔记-文件访问安全

时间:2022-05-22 15:14:28

文件的设置用户ID位和设置组ID位,会使进程拥有某个用户的权限来进行执行,这给系统造成很多安全性的考虑,但设置这两个位也是必须的,可以使某些进程暂时拥有其他用户的权限,执行一些操作。

设置用户ID位和设置组ID位会使文件拥有特殊权限,因此某些操作会强制关闭这两个位。

1. 非超级用户特权的进程对一个可写的文件写操作后,则设置用户ID位和设置组ID位被自动清除。使不怀好意的用户丢失对此文件的特殊权限。

2. 创建一个新文件,新文件的用户ID是进程的有效用户ID,新文件的组ID分两种情况,可以是进程的有效组ID也可以是所在目录的组ID,这取决于所在目录的设置组ID位,因此新创建的文件可能不是调用进程所属的组,因此其组权限可能会改变。如果找到一个文件是自己所拥有的,但却不属于自己的组或者附加组,则不能通过chmod来置位设置组ID位,此位会设置无效,如果此文件是可执行文件,再加上设置组ID位,就导致组权限发生改变。而且只要是自己所拥有的文件,chmod都可以修改文件的执行权限位,使普通文件变成可以执行的,但用chmod来置位文件的设置组ID位时,要判断文件的组ID是否属于自己的组或附加组,如果属于则允许,因为在自己的组权限范围内,如果不属于,则会取消该位,文件所属的组,不属于自己的控制范围,则不允许自己的文件拥有其他组的权限(这里是指当执行此文件时进程就会拥有其他组的权限)。再者,如果找到一个文件所属组的一个用户来修改文件的设置用户ID位,也是不可能的,因为此文件不属于该用户,chmod不允许执行。

3. 粘住位(sticky bit),linux系统对普通文件设置粘住位无意义,如果对目录设置了粘住位,则只有对该目录具有写权限的用户,满足下列条件,才允许删除或更名该目录下的文件:拥有此文件;拥有此目录;是超级用户。我们先观察一下/tmp目录:

drwxrwxrwt   11  root   root   4096   2012-08-10 18:56  tmp

此目录的权限是允许所有的用户读写执行,此目录属于root用户,设置了粘住位,因此要删除和更名该目录下的文件,必须拥有此文件,或者是超级用户。而不能删除或更名别的用户的文件。

4. 更改文件的用户ID和组ID,同样会引起问题,所有chown是有限制的,不能更改其他用户的ID,只能更改你所拥有文件的组ID,但只能改到你所属的组。

总之,安全是从设置用户ID位和设置组ID位引起的,这两位可以引起进程的权限变化,进程的权限变化级别,又是从文件的用户ID和组ID间接带来的,这些操作对普通用户都是有一定制约的,对超级用户则无制约。

系统对多用户的管理可见高明之处。