首页 > 代码库 > 关于特殊文件权限:suid、sgid和sticky-bit
关于特殊文件权限:suid、sgid和sticky-bit
用 ls –l 命令时,能看到三个八进制数字,表示文件的权限。其实文件的权限应该用4个八进制文件来表示,没有显示的那个是第一位,用来设定一些特殊的权限,这个八进制数字的三个位是:SUID、SGID、stick-bit。
SUID:当设置了SUID 位的文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。如果所有者是 root 的话,那么执行人就有root权限了。这时该位将变成一个安全漏洞,因此不要轻易设置该位。
SGID:该权限只对目录有效。目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
Sticky-bit:该位可以理解为防删除位。一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限。 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位。设置该位后, 就算用户对目录具有写权限, 也不能删除该文件。
有两种方法可以来设置这些权限:
1、直接设置标志位
chmod u+s temp 为temp文件加上suid标志
chmod g+s tmp 为tmp目录加上sguid标志
chmod o+t temp 为temp文件加上sticky标志
2、采用八进制数字来设置标志位
用四位八进制数表示当前文件的权限,第一位八进制数如用abc表示
a - setuid位, 如果该位为1,则这个8进制数为4,则表示设置setuid
b - setgid位, 如果该位为1, 则表示设置setgid
c - sticky位, 如果该位为1, 则表示设置sticky
使用 chmod 4xxx,2xxx,1xxx。。。。等来设置标志位就是一样的效果了。
设置完这些标志后, 可以用 ls -l 来查看。如果有这些标志, 则会在原来的执行标志位置上显示。原来的执行标志x到哪里去了呢? 系统规定, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t),若无执行权限则显示为大写字母 (S, S, T)。
如:
rwsrw-r-- 表示有setuid标志
rwxrwsrw- 表示有setgid标志
rwxrw-rwt 表示有sticky标志
关于特殊文件权限:suid、sgid和sticky-bit