以root身份运行命令但是创建另一个用户的文件?


3

有没有办法以root身份运行命令(sudo或许使用),但是该命令创建的文件是否由其他人拥有?

一些上下文:我有一个以root身份运行的Web服务器,以便能够访问端口80.该Web服务器创建文件,然后由root拥有。但是,当我做一个make(实际上使用Maven)作为我的普通用户时,我得到了一堆错误,因为它无法删除一些root拥有的文件。因此,如果我可以以root身份运行Web服务器,那将是很好的,但它创建的文件归我所有。

我制作了一个脚本来“清理”干扰make的文件,所以我对这个问题的解决方案并不感兴趣......我只是好奇是否有办法以root身份运行但创建文件为某人其他。


你不能只是将创建文件的部分包装成sudo类似的东西吗?
Daniel Beck

为什么不使用sudo -u username command,在该用户的上下文中运行命令?
Zoredache 2012年

2
我很困惑,通常像Apache这样的Web服务器是由root启动的(例如来自rc2.d),但是绑定到端口80 之后切换到非特权用户。因此,响应HTTP请求而创建的任何文件都归非 - 特权用户。我错过了什么?
RedGrittyBrick

1
如果您正在使用Apache,则httpd.conf指令是UserGroup@RedGrittyBrick写入的内容。以root身份运行Web服务器是一个非常糟糕的主意。
Daniel Beck

它不是Apache,也不是任何其他公开的Web服务器,它是提供Web服务的私有代码。但是,我没有写它,所以我不想特意深入并改变文件的写入方式。同样,我或多或少地解决了我的特定问题,但是想知道是否有一种简单的方法以root身份运行命令但是创建文件作为其他人。
shawkinaw

Answers:


1

有几种方法可以实现这一目标......

  1. 这些文件具有其他人的标志(o,从左到右的最后一组权限),以便能够写入它们。像这样你可以修改你的文件而不是root。

  2. 您的用户是root用户的常用组。像这样,如果你有组权限(g,中间权限集)来编写文件,你可以修改它们而不是root。

编辑:此外,正如丹尼尔所说,为了能够删除文件,您还需要拥有父文件夹的权限。


1
删除文件需要对父目录具有写权限。
Daniel Beck

是的,你是对的。他必须考虑父目录的权限。
Silviu

1

正是由于开始在http端口上侦听所需的额外权限,大多数Web服务器都具有内置功能,即一旦启动就会采用不同的身份。例如,在Apache中,httpd.conf文件包含控制此功能的条目“user”和“group”。

通常,Web服务器会获得自己的专用用户和组。浏览您的配置并检查是否可以进行设置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.