为什么目录设置了粘滞位而没有可执行位?

Q23*_*Q23 8 ubuntu permissions directory-structure sticky-bit

在Ubuntu 14.04,列出该目录中的内容/var/spool/cronls -l提供中的目录下面的权限(无关柱剪断):

drwxrwx--T daemon daemon atjobs
drwxrwx--T daemon daemon atspool
drwx-wx--T root crontab crontabs
Run Code Online (Sandbox Code Playgroud)

在没有可执行位的目录上设置粘性位有什么目的?

Dop*_*oti 10

从手册页sticky

粘性目录

设置了“粘滞位”的目录将成为仅附加目录,或者更准确地说,是限制删除文件的目录。如果用户对该目录具有写权限并且该用户是该文件的所有者、该目录的所有者或超级用户,则该用户只能删除或重命名粘性目录中的文件。此功能适用于 /tmp 等目录,该目录必须可公开写入,但应拒绝用户任意删除或重命名彼此文件的许可。

任何用户都可以创建粘性目录。有关修改文件模式的详细信息,请参阅 chmod(1)。

这样做的结果是,只有粘性目录中文件的所有者才能删除该文件。就cron表而言,这意味着无法进入那里并删除您的cron 表并将其替换为选择的表之一,即使我可能对该目录具有写访问权限。正是因为这个原因,/tmp它也很粘。

  • 如果该目录是组可写的,则意味着组成员不能删除彼此的文件。 (2认同)

ilk*_*chu 7

在没有可执行位的目录上设置粘性位有什么目的?

drwx-wx--T 2 root crontab 4096 Apr 24 15:00 /var/spool/cron/crontabs/
Run Code Online (Sandbox Code Playgroud)

您正在查看的内容与 Debian 相似。该目录确实为所有者和组设置了可执行位。仅对所有者而言,sticky 没有多大意义,因为根据定义,这只是一个用户(并且所有者无论如何都可以覆盖sticky)。但是对于该组而言,它与诸如 之类的全球可写目录一样重要/tmp,即普通用户无法删除属于其他用户的文件。

但为什么会有人成为该组的成员crontab

当然是为了能够修改他们的 crontabs!Debiancrontab使用 setgid 权限工作,因此允许任何普通用户使用他们自己的 UID 和 GID 访问该目录crontab。这比让它们crontab以 set uid权限运行要稍微安全一些,因为可以将用户彼此分开。

-rwxr- s r-x 1 根 crontab 36008 2015 年 6 月 11 日 /usr/bin/crontab

现在,通常情况下,目录中的文件由其各自所有者拥有和命名,如果crontab只允许删除用户自己的crontab,应该没有问题。有建立这样的工程文件的权限从程序中的错误保护,并且使访问用户的实际UID相关,而不仅仅是他们的名字