我有一台 CentOS 服务器,它执行一些专用任务,其中不同的进程/用户需要完全访问彼此的文件。由于这些文件本质上是临时的,因此它们存储在目录中/tmp
。
目录/tmp
默认设置了粘滞位。因此,对于我的场景,我禁用了粘滞位,否则进程/用户 B 无法删除进程/用户 A 创建的文件 - 它应该能够做到这一点,因为 A 仅提供 B,并且只有在 B 完成后,才能删除该文件。
chmod -t /tmp
到目前为止一切顺利!但是,每次我重新启动机器时,它都会自动再次设置粘滞位,我必须再次将其删除。
我一直在考虑为这些文件创建另一个目录,但这对我来说似乎不太必要,因为正如我所说,服务器执行一些专用任务,即除了 A 和 B 完成其工作之外,没有太多事情发生。
但是我该如何移除粘性位并让它保持持久性呢?如果无法做到,chmod
那该怎么办呢?
答案1
使用不同的目录,而不是/tmp
。
systemd总是会在启动时添加粘滞位/tmp
,并在每次启动时重新创建目录。
删除粘性位是不明智的,因为这会阻止其他任何东西使用/tmp
。许多其他东西确实会使用/tmp
,即使它们的用途可能不明显,即使您在服务器上运行的程序很少。删除粘性位迟早会给您带来麻烦。
您真正需要的是让 B 能够删除 A 创建的文件。由于删除文件的能力由包含目录的写入权限控制,因此您需要做的就是创建一个 A 和 B 都可以写入的目录。您可以使用 ACL 或组成员身份来做到这一点。
答案2
在 RHEL 和 CentOS 上,/etc/cron.daily/tmpwatch 每天都会触发以清理和修复 /tmp。如果您确实想覆盖 /tmp 上的默认权限,您可以通过修改该文件的内容来实现。
直接修改 /tmp 或其配置/设置,创建一个子目录,并使用组和组权限的组合对该子目录应用适当的权限。如果数据不敏感,并且您不避险,则可以开放权限以允许任何人删除文件。