首页 百科知识 强制位的作用

强制位的作用

时间:2022-10-10 百科知识 版权反馈
【摘要】:当设置了一个可执行程序的“suid”这一位时,它将代表可执行文件的所有者运行,而不是代表启动程序的人运行。它允许程序继承程序的组所有权,而不是当前用户的程序所有权。首先,suid和sgid占据与ls-l清单中x位相同的空间。最好尽可能地少用“suid”程序。passwd命令是为数不多的必须使用“suid”的命令之一。如果启用了目录的“sgid”标志,在目录内创建的任何文件系统对象将继承目录的组。

4.5.2 强制位的作用

当用户最初登录时,将启动一个新的Shell进程。这个新的Shell进程(通常是Bash)使用用户的标识运行。照这样,Bash程序可以访问所有属于该用户的文件和目录。事实上,作为用户,完全依靠其他程序来代表大家执行操作。因为启动的程序继承了该用户标识,因此它们不能访问任何不允许该用户访问的文件系统对象。

例如,一般用户不能直接修改passwd文件,因为写操作已经对除“root用户”以外的每个用户关闭:

img138

如果一般用户确实需要在他们需要改变其密码的任何时候,能够修改/etc/passwd(至少间接地)文件。但是,如果用户不能修改该文件,究竟怎样完成这相应的工作呢?

幸好,Linux权限有两个专门的位,叫做“suid”和“sgid”。当设置了一个可执行程序的“suid”这一位时,它将代表可执行文件的所有者运行,而不是代表启动程序的人运行。

现在,回到/etc/passwd问题。如果看一看passwd命令,可以看到它属于root用户:

img139

用户还将注意到,这里有一个s取代了用户权限三元组中的一个x。这表明,对于这个特殊程序,设置了suid和可执行位。由于这个原因,当passwd运行时,它将代表root用户执行(具有完全超级用户访问权),而不是代表运行它的用户运行。又因为passwd以root用户访问权运行,所以能够修改/etc/passwd文件,而没有什么问题。

我们看到了suid怎样工作,sgid也以同样的方式工作。它允许程序继承程序的组所有权,而不是当前用户的程序所有权。这里有一些关于suid和sgid的其他的但是很重要的信息。首先,suid和sgid占据与ls-l清单中x位相同的空间。如果还设置了x位,则相应的位表示为s(小写)。但是,如果没有设置x位,它将表示为S(大写)。

另一个很重要的提示:在许多环境中,suid和sgid很管用,但是不恰当地使用这些位可能使系统的安全遭到破坏。最好尽可能地少用“suid”程序。passwd命令是为数不多的必须使用“suid”的命令之一。

到此为止,从常规文件的角度来看权限。当从目录的角度看权限时,情况有一点不同。目录使用同样的权限标志,但是它们被解释为表示略微不同的含义。

对于一个目录,如果设置了“read”标志,可以列出目录的内容;“write”表示可以在目录中创建文件,“execute”表示可以进入该目录并访问内部的任何子目录。没有“execute”标志,目录内的文件系统对象是不可访问的。没有“read”标志,目录内的文件系统对象是不可查看的,但是只要有人知道磁盘上对象的完整路径,就仍然可以访问目录内的对象。

如果启用了目录的“sgid”标志,在目录内创建的任何文件系统对象将继承目录的组。当需要创建一个属于同一组的一组人使用的目录时,这种特殊的功能很管用。只需要这样做:

img140

现在,mygroup组中的所有用户都可以在/home/groupspace内创建文件或目录,同样,他们也将自动地分配到mygroup的组所有权。根据用户的umask设置,新文件系统对象对于mygroup组的其他成员来说,可以或不可以是可读、可写或可执行的。

缺省情况下,Linux目录以一种不是在所有情况下都很理想的方式表现。一般来说,只要对一个目录有写访问权,任何人都可以重命名或删除该目录中的文件。对于个别用户使用的目录,这种行为是很合理的。但是,对于很多用户使用的目录来说,尤其是/tmp和/var/tmp,这种行为可能会产生麻烦。

因为任何人都可以写这些目录,任何人都可以删除或重命名任何其他人的文件,即使是不属于他们的。显然,当任何其他用户在任何时候都可以输入“rm-rf/tmp/*”并损坏每个人的文件时,很难把/tmp用于任何有意义的文件。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈