我的第一个问题,请随意...
基本上,我有一个用户组可以访问的文件夹。此文件夹中有一个程序,以 root 身份运行(通过 sudo),然后将结果文件(xml 文件)输出到子目录。现在,无论何时运行该命令,它都会以 root 的所有权输出结果(因为这是运行它的人)。但我需要将创建的任何结果自动更改为由已经拥有该文件夹的组拥有。我尝试使用 setgid 位,但没有成功。有什么想法吗?
编辑:只是一些额外的信息。该程序必须以 root 身份运行。我知道我可以设置 cronjob 或类似的东西,但我正在寻找更优雅的解决方案。
提前致谢
答案1
添加g+s
到目标目录(假设已完成)
chown :usergroup target-directory
chmod g+s target-directory
有了上述内容,所有文件在内部创造目标目录将具有 gid 用户组。
如果文件是在目标目录之外创建的,然后又移入其中,则此方法不起作用。gid将不会在这种情况下发生改变。
touch <some-path>/test
mv <some-path>/test <target-directory>
test
在上述情况下,gid 不会改变。
查找临时文件夹
很可能有问题的程序在另一个位置/临时文件夹中创建了该文件,以防止部分读取。如果是这种情况,将 应用于g+s
该临时文件夹将解决问题。
然而,不要如果程序使用系统文件夹(例如)作为临时文件夹,请执行此操作。/tmp
首先/var/tmp
更改临时文件夹位置。
答案2
如果您可以摆脱文件拥有 root 用户但您的用户属于不同组的问题,请检查命令“sg”和“newgrp”。通过 sg 运行您的程序将允许它仍然是 root 用户,但使用不同的组。