为什么要使用粘滞位?

为什么要使用粘滞位?

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

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

// 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

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

答案1

粘滞位对于全球可写的目录很有用,例如/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)则保留给以自己的组运行的系统程序(设置组ID),其中粘滞位确保程序只能代表拥有文件的用户删除文件(确保程序只能代表拥有文件的用户创建文件的原因是程序以该用户身份运行,而不是以 root 身份运行,因此不能创建属于其他用户的文件)。

相关内容