linux中SUID,SGID和SBIT的奇妙用途
source:http://blog.csdn.net/xiaocainiaoshangxiao/article/details/17378611
Linux对文件的权限管理简直是让人叹为观止,又回顾了一下SUID,SGID和SBIT的作用,总结一下。
SUID是Set UID的简称,翻译过来是设置用户ID,感觉很别扭,还是觉得SUID最为简炼。它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。例如,使用如下命令:
我们会得到如下的结果:
可以看到,在文件拥有者的执行位上出现为 s而不是x, 所以说passwd这个程序是具有SUID权限的。我们直到在修改用户密码的时候,用的就是passwd这个命令,而我们又知道在linux下面,用户密码是存储在/etc/shadow这个文件里面的。首先查看一下/etc/shadow这个文件的权限:
返回的结果如下:
由上面的结果,我们知道只有root可以往shadow文件中写入数据,其他用户连查看的权限都没有。那我们平时是怎么修改密码呢?没错,就是和SUID有关。当我们使用passwd命令时,就获得了passwd的所有者即root的权限,进而可以对shadow文件进行写入操作。使用SUID肯定满足一下几点:
《鸟哥的linux私房菜》中,有一张图特别能表示这个意思:
SGID即Set GID的缩写,它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。
SBIT即Sticky Bit,它出现在其他用户权限的执行位上,它只能用来修饰一个目录。当某一个目录拥有SBIT权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。例如:
可以得到以下结果:
可以看到最后一位为t,这说明/tmp文件就是这种文件。
那么,如何设置上面所说的三种权限呢?首先来介绍一点预备的知识,用数字来表示权限:
如果两个或三个权限同时存在时,就将者写权限的值相加就是需要的结果了。利于SUID和SGID同时存在,则为6。下面可以看一下修改的例子:
使test文件具有SUID权限,你可能已经看明白了,就是在普通文件权限前面再加上这些特殊权限值就可以了。