神奇的“粘住位”

教材中关于“粘住位”的解释:

==========================================

UNIX环境高级编程

文件和目录

文件的粘住位 ( S _ I S V T X ),在U N I X的早期版本中,有一位被称为粘住位(sticky bit) 。如果一个可执行程序文件的这一位被设置了,那么在该程序第一次执行并结束时,该程序正文的一个文本被保存在交换区。(程序的正文部分是机器指令部分)这使得下次执行该程序时能较快地将其装入内存区。其原因是:在交换区,该文件是被连续存放的,而在一般的 U N I X文件系统中,文件的各数据块很可能是随机存放的。对于常用的应用程序,例如文本编辑程序和编译程序的各部分常常设置它们所在文件的粘住位。
自然,对交换区中可以同时存放的设置了粘住位的文件数有一定限制,以免过多占用交换区空间,但无论如何这是一个有用的技术。因为在系统再次自举前,文件的正文部分总是在交换区中,所以使用了名字“粘住” 。后来的U N I X版本称之为保存 -正文位(saved-text bit) ,因此也就有了常数 S _ I S V T X。现今较新的U N I X系统大多数都具有虚存系统以及快速文件系统,所以不再需要使用这种技术。S V R 4和4 . 3 + B S D中粘住位的主要针对目录。如果对一个目录设置了粘住位,则只有对该目录具有写许可权的用户并且满足下列条件之一,才能删除或更名该目录下的文件:
· 拥有此文件。
· 拥有此目录。
· 是超级用户。
目录/ t m p和/ v a r / s p o o l / u u c p p u b l i c是设置粘住位的候选者—这两个目录是任何用户都可在其中创建文件的目录。这两个目录对任一用户 (用户、组和其他)的许可权通常都是读、写和执行。但是用户不应能删除或更名属于其他人的文件,为此在这两个目录的文件方式中都设置了粘住位。

==========================================

对于目录 /test/ 来讲,如果读写权限为755,属主为test:test , 则 其它用户(如:test2)将无法在该目录下创建(或删除)文件或目录,如果该目录下存在一个读写权限为666的文件,则 test2 可以修改该文件的内容,不能删除该文件:如果要允许test2也能在该目录下创建文件,则test2也必将可以删除该目录下的任何文件(虽然可能无法读写文件)。

对于/tmp 这个特殊的目录来讲,即允许任何人创建和删除文件,又不允许删除不是自己的文件,按照上述的权限控制逻辑是做不到的,于是“粘住位”就有了用武之地了。这样就达到了允许创建、删除文件,但是无法删除别人的文件,每个人把文件属性设置后600就会很安全了,大家工作在同一个目录下,而且不能相互读写以及删除,多么神奇的想法啊。

 

给目录设置粘住位,达到/tmp 这样的效果; 给文件设置“粘住位”呢? 注意: linux (仅限linux)忽略文件的“粘住位”

设置“粘住位”

chmod 1777 the_dir

 

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据