也许有很多人不知道文件的S权限和T权限

linux系统内有档案有三种身份 u:拥有者  g:群组   o:其他人

这些身份对于文档又有下面权限 可以用ls -l 文件名 查看权限信息

r:读权限,用户可以读取文档的内容,如用cat,more查看

w:写权限,用户可以编辑文档

x:该目录具有可以被系统执行的权限

Linux文件和目录的粘滞位(sticky bit)带来的困惑_粘着位

 

除了读写执行权限外系统还支持强制位(setuid和setgid)和粘滞位(sticky)

setuid:

设置使文件在执行阶段具有文件所有者的权限,相当于临时拥有文件所有者的身份. 典型的文件是passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权限, 从而可以更改用户的密码.

Linux文件和目录的粘滞位(sticky bit)带来的困惑_粘着位_02

sticky:

要删除一个文档,您不一定要有这个文档的写权限,但您一定要有这个文档的上级目录的写权限。也就是说,您即使没有一个文档的写权限,但您有这个文档的上级目录的写权限,您 也能够把这个文档给删除,而假如没有一个目录的写权限,也就不能在这个目录下创建文档。 

怎样才能使一个目录既能够让任何用户写入文档,又不让用户删除这个目录下他人的文档,sticky就是能起到这个作用。stciky一般只用在目录上,用在文档上起不到什么作用。 

在一个目录上设了sticky位后,(如/home,权限为1777)任何的用户都能够在这个目录下创建文档,但只能删除自己创建的文档(root除外),这就对任何用户能写的目录下的用户文档 启到了保护的作用。

Linux文件和目录的粘滞位(sticky bit)带来的困惑_linux_03

设置:

Linux文件和目录的粘滞位(sticky bit)带来的困惑_粘着位_04

改变为:

Linux文件和目录的粘滞位(sticky bit)带来的困惑_粘着位_05

 

今天维护系统时发现一个非常诡异的问题:AAA用户和BBB用户同属AAA组,但用AAA用户创建的文件,权限设置为777后,还是不能用BBB用户删除。诡异!

 

几经周转,发现AAA用户创建文件位置的上层目录的权限是drwxrwxrwt,做开发这么多年了,还没见过所谓"t"的权限,于是找了一位公司的linux大师帮忙,大师噼里啪啦的做了一堆试验后,然后在google上搜索"rwt linux",终于发现了问题,发现这种用法的名字是“文件的粘滞位(sticky)位“。

它的作用是:

普通文件的sticky位会被linux内核忽略,

目录的sticky位表示这个目录里的文件只能被owner和root删除,

没错这就是问题本质,也和我的现象相吻合。于是用root用户,对这个文件夹chmod -t 后,用BBB用户就可以删除刚才AAA用户创建的文件了。一切正常了。哇。。。。世界太平了!真是长见识了。所以将这个知识点整理如下:

 

  1. ​文件的粘滞位(sticky)位是作什么用的?​
  2. ​普通文件的sticky位会被linux内核忽略,​​目录的sticky位表示这个目录里的文件只能被owner和root删除

  3. ​粘着位(Sticky bit)​
  4. ​如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。粘着位出现执行许可的位置上,用t表示,设置了该位后,其它用户就不可以删除不属于他的文件和目录。但是该目录下的目录不继承该权限,要再设置才可使用。​

  5. ​# chmod 1770 xxx​

  6. ​举一个linux下的常见目录来做例子,也就是 /tmp 目录来说一下粘连位的作用。​
  7. ​#ls -dl /tmp​
  8. ​drwxrwxrwt 4 root root .........​
  9. ​注意other位置的t,这便是粘连位。​
  10. ​我们都知道,/tmp常被我们用来存放临时文件,是所有用户。但是我们不希望别的用户随随便便的就删除了自己的文件,于是便有了粘连位,它的作用便是让用户只能删除属于自己的文件。​

  11. ​那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 假如本来在该位上有x, 则这些特别标志 (suid, sgid, sticky) 显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T) 。​


  12. ​3)粘着位(sticky)​

  13. ​eg:​

  14. ​chmod 777 abc​

  15. ​chmod +t abc​

  16. ​等价于​

  17. ​chmod 1777 abc​

  18. ​在以前旧的系统当中,如果一个程序文件一旦设置了粘着位,​
  19. ​那么当该程序中止的时候他的所有指令段将被保存到系统的交换分区当中,​
  20. ​再次运行时可以更快的调入系统.​

  21. ​不过现在的操作系统已经不再使用这种功能了.​
  22. ​但这并不表示这一功能已经完全被废弃.​
  23. ​当一个目录设置为粘着位时,它将发挥特殊的作用,​

  24. ​即当一个目录被设置为"粘着位"(用chmod a+t),则该目录下的文件只能由​
  25. ​一、超级管理员删除​
  26. ​二、该目录的所有者删除​
  27. ​三、该文件的所有者删除​
  28. ​也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。​