Sticky的中文翻译表示黏着的意思,BIT表示位的意思,所以呢!Sticky BIT也被成为黏着位权限。
SBIT黏着位的作用:
※ 黏着位目前只对目录有效
※ 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
※ 如果没有黏着位,普通用户拥有w权限,所以可以删除此目录下所有文件,也包括其他用户建立的文件。一旦赋予了SBIT权限,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
前面说过,SUID只能针对可执行的文件或者程序赋予权限,用4表示分配的权限;SGID除了可执行文件或者程序外,还可以针对目录赋予权限,用2表示分配的权限。SBIT只能针对目录赋予权限,用1表示分配的权限。所以!虽然可以使用chmod 7755这样的权限分配,但是没有意义,因为针对的操作对象不同。一般来说,一个文件或者说可执行文件是不会赋予7这样的权限,根据实际的需要合理的分配这三类权限当中的其中一个。
图一
SBIT最常见的举例是/tmp这个临时目录,可以看到这里的权限是1777。如果权限是777,表示任何的普通用户都可以在这个目录下创建、删除、复制、剪切等操作。这就带来一个问题,如果A普通用户在/tmp目录下创建了afile文件,当B普通用户登录的时候,就可以删除afile这个文件。等到A用户登录的时候,发现自己创建的文件消失了,可能会带来管理上的混乱。当拥有目录的权限是1777,A普通用户能删除afile这个自己创建的文件,不能删除其他用户的文件,但是能查看、修改、复制。
SUID、SGID、SBIT这些特殊权限对root超级用户无效,只针对普通用户。
------------------------------------------------
以下是具体的例子:
su - stu //切换普通用户stu
touch /tmp/stu-file //建立文件stu-file
su - stu1 //切换普通用户stu1
cd /tmp
rm -rf stu-file //删除stu-file文件
最终结果是无法删除其他用户创建的文件。
我们知道能不能删除目录下的文件,主要看是否对这个目录拥有w权限。通过图一可以知道,普通用户都是有w权限的,按理说应该是可以删除这个目录下的所有文件的。但是由于SBIT权限的存在,普通用户stu只能删除自己创建的文件stu-file,其他普通用户比如stu1是没有权限删除的。
------------------------------------------------
赋予SBIT:
chmod 1777 目录名
chmod o+t 目录名
取消SBIT:
chmod 777 目录名
chmod o-t 目录名
领取专属 10元无门槛券
私享最新 技术干货