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

use*_*297 15 security linux web-server root

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

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

我认为我可以使用 que'd 命令创建一个文件,由 CRON 读取,但解决方案很痒。

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

有什么工具可以做到这一点吗?

Mad*_*ter 27

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

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid
Run Code Online (Sandbox Code Playgroud)

然后sudo /usr/lib/nagios/plugins/check_md_raid当我需要检查 RAID 时,以监控用户身份运行该命令。

你可以有一个 sudoers 行说

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice
Run Code Online (Sandbox Code Playgroud)

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

  • 这是去国际海事组织的方式。我将此过程用于类似的任务。它已经生产了 3 年多。只要您保护使用应用程序逻辑正确触发它的 PHP 代码,任何事情都不会失败,并且安全风险几乎不存在。 (2认同)

Mat*_*teo 6

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

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

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction
Run Code Online (Sandbox Code Playgroud)

有关man sudo文件的详细信息和语法,请参阅

  • 编辑 `/etc/sudoers` 文件时要非常小心。如果它在语法上有任何不正确的地方,那么将其改回是一场噩梦,您需要将“sudo”重新放入其中,但您不能将其删除,而只是删除了 sudo。您最终不得不使用救援 CD/DVD 并手动挂载分区。 (2认同)