3

我目前正在为我最近的项目编写管理门户。我一直在用我的电脑来争取暴发户的工作,现在它是,我希望能够从网络上操作暴发户。我需要在我的 php 脚本中执行以下操作

sudo restart job
sudo start job
sudo stop job

如您所见,sudo 是这些命令的主题,所以我需要以某种方式从这个 php 脚本运行 sudo。我该如何解决这个问题,或者是否有解决这个问题的方法。

万一这很重要:

# which start
 /sbin/start
# which stop 
 /sbin/stop
# which restart
 /sbin/restart
4

1 回答 1

0

我看到了几种方法。您当然可以将 www-data 添加到 sudoers 列表中,然后将 www-data 的密码硬编码到您的脚本中(不太好)或从文件中读取它(稍微好一点)以使 sudo 工作。如果你走这条路,你可能需要手动覆盖 www-data 的密码,因为它实际上没有可用的密码。应该劝阻这些方法中的任何一种,因为 www-data 被故意剥夺了大多数特权作为安全措施。授予它一个大的(如 sudo)并将其密码放在文件或脚本中会产生重大的安全漏洞。

您可能能够授予 www-data 非常有限的 sudo 权限,以启用您需要的功能,而不会打开太多安全漏洞。阅读 sudo 和 sudoers 文件以获取更多信息。

更好的方法可能是编写一个脚本,该脚本采用启动/停止/重启参数并调用适当的 upstart 命令。诀窍是将此脚本设置为 root ( chown root:root script.sh; chmod +s script.sh),以便它以 root 而不是 www-data 的身份运行。授予此脚本 755 权限,以便只有 root 可以更改它。这限制了安全风险,仍然为您提供所需的权力,但仅此而已。

setuid 方法可能不会直接在您的系统上工作(先尝试一下),因为现在大多数 Unix 系统故意禁用 setuid 以按照 shell 脚本上的广告工作,因为安全风险太高。这是一篇文章,它解释了使用 C 程序(setuid 仍然有效)来调用您的脚本的解决方法。这有点令人费解,但它应该可以工作。

可能最好的方法是利用 upstart 的事件机制,让 upstart 捕获并转发到您的 .conf 文件的 Web 代码触发事件。我自己只是在学习暴发户,所以我不能给你更多的细节,但我明白它应该以这种方式使用。

于 2011-11-11T20:13:30.790 回答