如何从非root用户帐户执行root用户操作?


15

我希望能够从php脚本重新启动服务。以www-user帐户运行。

执行这些操作的首选方式是什么?

我确定我可以使用que'd命令放置一个文件,由CRON读取,但是解决方案发痒。

我在想的是一个微型服务,它在root下运行,允许预定义的“方法”,因此无法执行任意root操作。

那里有什么工具吗?


@MadHatter,蒙娜丽莎(Mona Lisa)向她致以问候,;-)
user65297

Answers:


27

您可以重新发明轮子,但是老实说,我为此使用了无密码的sudo。例如,我的监视系统需要能够运行命令来检查硬件RAID。这需要root特权,但是我不想以root身份运行整个监视系统,所以我在sudoers一行中说:

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

然后sudo /usr/lib/nagios/plugins/check_md_raid在需要检查RAID时以监视用户身份运行命令。

你可能会说一个sudoers行

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

然后让php执行sudo /etc/rc.d/init.d/myservice restart


2
这就是走海事组织的方式。我将此过程用于类似的任务。它已经投产超过3年了。只要您保护使用应用程序逻辑正确触发它的PHP代码,一切都不会失败,并且几乎不存在安全风险。
Andrew Ensley

1
谢谢,对我来说很陌生的sudoers即将实现目标。@Andrew,感谢您提供其他信息。
user65297 2011年

1
user65927,如果这对您而言不是新闻,请原谅我,但是当地的礼节是,如果您对问题有满意的答案,请单击旁边的勾勾勾勒出该问题。
MadHatter

1
您可能还需要在sudoers文件中注释掉“ Defaults requiretty”行。这一步使我感触良多。(例如,将“默认需求量”更改为“#默认需求量”)
steve.lippert 2011年

6

看一下sudo:它允许指定可以以另一个用户(在您的情况下为root)身份执行的操作。

例如,您可以添加到您/etc/sudoers的文件中(不要直接使用来编辑文件visudo

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

请参阅man sudo以获取文件的详细信息和语法


2
编辑/etc/sudoers文件时要非常小心。如果从语法上讲无论如何都不正确,则将其改回是一场噩梦,您需要sudo重新将其改回,但您不能仅仅通过sudo消灭它。您最终不得不使用应急CD / DVD并手动安装分区。
2011年

1
@puk实际上,要编辑抖动,您需要root用户访问权限,并且如果文件被损坏,您可以以root用户身份登录,然后从备份副本还原它或手动修复它。visudo还会在写入文件之前对其进行完整性检查。
Matteo

是什么shudders?visudo确实进行了完整性检查,但是在损坏完成后它们没有帮助:P
puk
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.