如何强制设置(而不是减去)未来文件的权限?

如何强制设置(而不是减去)未来文件的权限?

我在 Ubuntu Linux 上有一个程序,它创建一个logs/error.log具有权限660( rw-rw----) 或640( rw-r-----) 的文件。但我希望文件权限始终为666rw-rw-rw-)(包括程序创建文件时)。

限制:

  1. 我无法修改程序。因此,我无法更改660程序使用新文件的模式。
  2. 该程序可以随时重新创建该文件。因此,单一手动执行的解决方案chmod并不合适。
  3. 我需要添加一些权限,但不能减少。因此,umasksetfacl都不适合。

答案1

您可以用来inotify跟踪文件或目录的创建位置,以便在创建时更新其权限

答案2

如果所有其他更理智的选项都不存在(例如为神秘日志创建程序选择一个合适的用户/组,该程序与您想要从 docker 主机执行的任何操作兼容,或者修改程序的配置以使其使用正确的权限) ),你可以使用这个LD_PRELOAD技巧:

挂钩您的神秘程序用于创建文件的任何系统调用(可能是creatopen,请使用 进行检查strace)。然后比较文件名,并mode仅修改您的日志文件。

这需要你知道如何用 C 语言编程。

答案3

最终解决方案在 docker 容器内运行:

#!/bin/bash
cd logs
umask 0
find . -type f -not -name ".gitignore" -exec chmod 666 \{\} \;
inotifywait -rmq -e attrib -e create -e moved_to --format "%w%f" --exclude "/\.gitignore" . | xargs -n1 -d"\n" chmod 666

由于该解决方案设置了世界可写权限,因此不建议按原样使用。尝试寻找另一种使用更安全权限的方法。

感谢 AlexD 的提示!

相关内容