为什么要使用粘性位?


18

“粘性位仅适用于目录,通常用于可公开写入的目录。在应用粘性位的目录中,可以防止用户删除或重命名自己不拥有的任何文件。”

这是否意味着如果我运行以下命令:

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

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

Answers:


22

粘性位在可全局写入的目录(例如)上很有用/tmp。在这些目录中,任何人都可以创建文件,因此该目录必须是可全局写入的。但这意味着任何人都可以删除文件,即使该文件不属于他们也是如此,因为删除文件是由目录的写权限控制的。当目录具有粘性位时,只有文件所有者有权删除它。

在具有rwx------或权限的目录中rwxr-xr-x,只有目录所有者可以创建或删除文件。如果有任何文件属于另一个用户(由根用户移至该文件,或在目录具有更多打开权限时创建),则目录所有者仍有权删除它们,而不是文件的所有者。

在具有权限的目录rwxrwx---中,组的所有成员都可以创建和删除文件。组中的任何成员都可以删除任何文件,即使该文件属于另一个用户。如果rwxrwx--T改为使用权限(大写T字母类似于t,但t表示该x位已设置且Tx位为清除),则该组的任何成员都可以创建文件,并且该组的成员可以删除文件,但只能删除自己的文件。

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

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身份运行,因此无法创建属于其他用户的文件)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.