我想知道以下情况是否可能。
我是一个名为 www-admin 的用户,并且属于 www-admin 组。我也是一个sudoer。
我想要在文件夹中创建的所有文件都/var/www/domain
包含组domain
和用户domain
。
如果我作为用户www-admin
创建并编辑所有域内的文件/var/www/domain
:域。
这可能吗:?
答案1
您可以设置一个目录,以便在其中创建的文件属于特定组,而不管创建它们的进程的有效组 ID 是什么。这称为 BSD 语义,您应该为目录设置 SGID 位以启用它:
chgrp domain /var/www/domain
chmod g+s /var/www/domain
这不会更改 中已有的文件和目录组/var/www/domain
,您需要手动处理(例如-R
与chgrp
上面一起使用)。请注意,随后在该目录中创建的所有子目录也将继承 SGID,从而自动为子目录启用 BSD 语义。
但对于所有者来说,相同的语义是不可能的。
如果您需要为所有者和组实现此目的,您可能需要确保创建文件的代码/var/www/domain
以有效用户domain
和有效组运行domain
。您可以使用sudo
以下方法来执行此操作:
sudo -u domain -g domain your_command
如果domain
是主要用户组domain
,则以下内容就足够了
sudo -u domain your_command
由于此解决方案可以轻松处理所有者和组,因此不需要 BSD 语义。
如果您不想更改创建文件的进程的有效用户和组(例如,因为它是执行许多其他不相关功能的大型服务器),您可能需要外部化创建文件的部分功能将这些文件放入一个单独的进程中,其有效 UID 和 GID 可以相应更改,或者您可以使用 BSD 语义并尝试仅依靠组来实现您的最终目标。