Joh*_*ino 19 permissions directory
“粘滞位仅适用于目录,通常用于可公开写入的目录。在应用粘滞位的目录中,用户无法删除或重命名不属于他们个人的任何文件。”
这是否意味着如果我运行以下命令:
// 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
Run Code Online (Sandbox Code Playgroud)
用户仍然可以删除或重命名任何不属于他们的文件吗?
Gil*_*il' 23
粘滞位在全局可写的目录上很有用,例如/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
Run Code Online (Sandbox Code Playgroud)
你会发现一些像/tmp对所有人开放的目录,还有一些像/var/spool/cron/crontabs作为自己的组(setgid)运行的系统程序保留的目录,其中粘性位确保程序只能代表拥有它们的用户(确保程序只能代表拥有它们的用户创建文件的是程序以该用户身份运行,而不是以 root 身份运行,因此不能创建属于其他用户的文件)。