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