为什么要使用粘性位?

“粘滞位仅适用于目录,通常用于可公开写入的目录。在应用粘滞位的目录中,用户无法删除或重命名任何他们不拥有的文件。”

这是否意味着我运行以下内容:

// only allow other users to read files in /directory sudo chmod ow -R /directory sudo chmod ox -R /directory sudo chmod o+r -R /directory 

用户仍然可以删除或重命名任何不属于他们的文件?

粘滞位对于世界可写的目录很有用,例如/tmp 。 在这些目录中,任何人都可以创建一个文件,因此该目录需要是全局可写的。 但这意味着任何人都可以删除文件,即使它不属于他们,因为删除文件是由目录上的写权限控制的。 当目录具有粘滞位时,只有文件的所有者才有权删除它。

在具有权限rwx------rwxr-xr-x的目录中,只有目录的所有者才能创建或删除文件。 如果存在属于不同用户的任何文件(通过root移动,或者在目录具有更多打开权限时创建),则仍然是具有删除权限的目录的所有者,而不是文件的所有者。

在具有权限rwxrwx---的目录中,该组的所有成员都可以创建和删除文件。 该组的任何成员都可以删除任何文件,即使它属于不同的用户。 如果权限是rwxrwx--T而不是(大写T类似于t ,但是t意味着x位被设置而T意味着x位是清空的),那么该组的任何成员都可以创建一个文件,并且该组可以删除文件,但只能删除自己的文件。

您可以使用以下命令查看哪些目录在系统上具有粘滞位:

 find / /run /run/lock /run/shm -xdev -path /usr -prune -o -perm -o+t -ls 2>/dev/null 

你会发现一些像/tmp这样对大家开放的目录,还有一些像/var/spool/cron/crontabs这样的目录,这些目录是为一个作为自己的组( setgid )运行的系统程序保留的,其中粘滞位确保了程序只能代表拥有它们的用户删除文件(确保程序只能代表拥有它们的用户创建文件的程序是以该用户身份运行,而不是以root身份运行,因此无法创建文件属于其他用户)。