使用 setgid 的共享目录未按预期工作

使用 setgid 的共享目录未按预期工作

我有一群开发人员想要共享同一目录。我与这些开发人员创建了一个新组,并为他们创建了一个目录。在该目录中,我将组设置为我创建的组并设置了 setgid 位。

这一切都很好......文件和目录是已创建在此共享目录中具有正确的权限。但开发人员使用的应用程序正在执行某些操作,从而导致意外的权限。文件和目录不是使用共享目录的组创建的,而是使用用户的组创建的。在目录上,未设置 setgid 位。

我的猜测至于发生的情况是应用程序正在其他地方(例如 /tmp)创建目录层次结构,完成后,它移动到共享目录。如果不是这样的话,那就是类似的事情。到目前为止我的解决方案是手动调整权限;我搜索没有正确权限的文件和目录寻找然后将该列表通过管道传输到参数。由于这是一个持续存在的问题,我可能会使用极好的为开发人员提供一种自行修复权限的方法。

有更好的解决方案吗?

答案1

您好,欢迎来到 StackExchange。

您对这种情况如何发生的假设听起来很合理,但您确实需要确认这就是问题的根源。

如果您发现这实际上是问题的原因,那么我建议您考虑配置应用程序以在共享目录中创建临时目录。

如果这不可能,另一种方法可能是找到 /tmp 中创建目录的位置(它们可能由运行应用程序的人的用户名或用户 ID 命名,以防止冲突)并将其符号链接到共享目录中。

或者,您可以尝试将开发人员正在使用的可执行文件组更改为共享目录的可执行文件组,然后在可执行文件上设置 setgid 位。这将导致应用程序作为共享组 ID 运行,并且除非可执行文件执行特定操作,否则应导致该应用程序创建的目录具有正在运行的进程的组。

最后,最没有吸引力的解决方案是设置一个 cronjob 以定期运行来更新共享目录中的权限。

相关内容