我们知道,如果一个用户想要在一个目录下创建并删除文件,需要有对这个目录的w,也就是写权限。那么让我们来看一个场景:
我有一个目录,我想让别的用户可以在这个目录下创建或者删除他自己的文件,但是我不想让他删除不属于他的文件
这个时候该怎么做呢?直接给w权限就可以了吗?
答案是不可以的,如果只是给其他用户写权限,那么用户除了可以创建删除自己的文件以外,还可以删除不属于他的文件。
为了解决这样的问题,粘滞位就应运而生了。
chmod +t 目录
粘滞位是只能对目录设置一种权限(无法对文件设置),加上粘滞位以后,对于普通用户,如果具有对这个目录的写权限,在这个目录下只允许创建文件,不允许普通用户删除/移动/重命名不属于自己的文件。
只有root和文件的拥有者才能随意删除文件。
- 一个目录具有粘滞位,则在other的X位会表现为 t,或者T。T和t的区别在于,原来x位上有x权限,有了粘滞位则表现为t,如果原来没有x权限,则表现为T
- 在linux系统的实际应用中,粘滞位一般用于/tmp,/var/tmp目录,以防止普通用户删除或移动其他用户的文件(tmp目录中一般存放的都是各个用户创建的临时文件,这些文件一般都只能允许用户自己删除,而不允许其他人(other)删除)
- 粘滞位针对的是整个目录,只要这个目录加上了粘滞位,其他用户(other)就无法删除/移动/重命名不属于自己的文件,即使其他用户拥有这个目录中文件的rwx权限,只要这个文件不属于这个用户,就无法对其进行删除/移动/重命名即使这个用户拥有对这个文件的rwx权限也没用)
文件的默认权限
在我们知道什么是文件的默认权限之前,首先我们要知道什么叫掩码。
- 掩码用于在原始的数据当中去掉若干个比特位,这样的数据就叫做掩码。
- 比如原数据1111 1111经过掩码1111 0000按位与后,变成了1111 0000
- 凡是在权限掩码umask中出现的,都应在在起始权限中去掉
- 比如原数据1111 1111经过掩码1111 0000按位与后,变成了1111 0000
如果作为一个普通用户,我们创建一个文件的时候,可以看到文件的默认权限属性是rw-rw-r--,也就是对应8进制的664,其中和掩码也是有关系的。
因为普通文件的起始权限是666,目录文件的起始权限是777,默认的权限掩码~mask是0002(这是对于普通用户的,对于root用户是0022,更严格一点,但是其实没有什么用)
凡是在umask中出现的,都应在在起始权限中去掉(这里umask里面出现的是000 000 010,也就是other的写权限,去掉写权限,最终就是 rw-rw-r--)
在我们创建文件或者目录的时候会将对应的起始权限和取反以后权限掩码按位与操作
- 如我们创建一个普通文件,起始权限666与~mask进行与操作,变成664
- 如我们创建一个普通目录,其实权限777与~mask进行与操作,变成775
注意事项
1.umask是我们可以自己设置的(使用umask命令),我们要去掉哪些权限,就umask对应的二进制的位设置成1。比如要去掉所有所有用户的读写权限,我们就将mask设置为 011 011 011,对应的八进制就是0333
umask 0333
2.通过umask指令我们自己指定权限掩码,对文件默认权限的设置仅仅在本次登录内有效,想要长期有效需要修改配置文件