linux SUID、SGID、Sticky

SUID(Set User ID)SUID属性只对可执行文件有意义,对目录无影响。原则上,当用户执行程序时,该程序所引发的进程皆属于启动该程序的用户。对于设立了SUID属性的可执行文件,无论是谁启动程序,该程序所引发的进程皆属于程序文件的拥有者,而非启动程序的用户(除非刚好是一个人)。若程序文件拥有者为root,表示该程序的运行期间可临时获得root权限,即便启动程序的人不是root。SUID常应用于需要root权限才可运作,但是必须供全体用户使用的程序。例如lpr。此程序的作用是让一般用户打印文本文件,但是它必须要有root特权,方能操作打印池(print spool)。请注意,某些程序会在特殊情况下启动subshell。譬如说,早期的lpr程序有所谓的调试模式,可在发生错误时带出一个shell让管理者方便调试。若这类程序被设定了SUID属性,则有心人就可利用这类程序来取得root权限。设计SUID属性的原始用意主要是为了避免泄漏root密码,让一般用户可在不知道root密码的情况下,也可以使用需要特权才能运行的程序。然而,设定了SUID属性的程序往往也是系统安全的风险所在。SGID(Set Group ID)SGID对于可执行文件的效果类似于SUID,可执行文件所引发的进程可获得程序文件所属组的权限,此外,SGID属性对目录会有特殊的效果。对于一个设定了SGID属性的目录,当你在该目录下创建新文件时,新文件的所属组将会是该目录的所属组。举例来说,如果/home/fin/目录属于finance组而且设定了SGID属性,那么,如果你在/home/fin/目录创建一个新文件,则该文件的所属组必定是finance,而非文件创建者的默认组。管理者常利用此属性来确保某目录下的所有共享文件都属于同一个组。Sticky(粘滞)Sticky属性只对可执行文件有效。其作用是让程序运行完后,其镜像(image,是实际被cpu执行的程序代码)仍留滞在内存里。此属性适合用于需要经常被重复运行的大型程序,借此消除需要重复加载相同程序所造成的性能损耗。不过,由于现今的Unix/Linux都采用虚虚拟内存技术,所以sticky属性其实已经没有效用。在目前的linux的系统上,sticky属性只对目录有效,对可执行文件无效(虽然此属性当初是针对可执行文件而设计)。对于一个设定了sticky属性的目录,该目录下的文件、文件的拥有者、目录的拥有者以及root都可改变文件名称或是删除文件,而且不受文件本身的访问模式的影响。管理者常利用sticky属性让组成员可创建新文件、修改文件内容,而只有文件拥有者才可删除文件或改文件名。

小案例:多用户操作系统中势必要面对这样的需求:某一组人需要共享一个工作目录,自由访问该目录下的所有文件;另一组人需要共享另一个工作目录;各组成员只能访问自家的工作目录,而看不到其他组的工作目录。

要如何组织工作目录?访问权限如何设计?首先,我们应该将必须满足的条件列出来:这个工作组称为sales,其成员有jdoe,bsmith与jbrown。工作目录为/home/sales。在/home/sales目录下的任何文件,只有原创建者才可以删除它们。组成员无需担心文件的拥有权,而且同组成员都可以完整访问任何文件。非成员不可以访问工作目录下的任何文件。然后逐步实现上述条件:1?创建新组:# groupadd sales2、将现有的用户加入该组:# usermod -G sales jdoe# usermod -G sales bsmith# usermod -G sales jbrown

3、为该组创建一个目录:# mkdir /home/sales

4、改变新目录的组拥有权:# chgrp sales /home/sales

5、禁止非组成员访问:# chmod 770 /home/sales

6、设置SGID属性,以确保sales组拥有所有新建的文件。同时也设置sticky属性,以免文件被拥有者以外的其他人删除:# chmod g+s,o+t /home/sales

7?测试:# su – jdoe$ cd /home/sales$ touch afile$ ls -l afile-rw-rw-r— 1 jdoe sales 0 Jan 3 02:44 afile$exit# su – bsmith# cd /home/sales# rm afilerm: cannot unlink ‘afile’ : Operation not permitted

linux SUID、SGID、Sticky,首发于运维者。

即使没有收获的希望也心平气和的继续。

linux SUID、SGID、Sticky

相关文章:

你感兴趣的文章:

标签云: