【问题标题】:Restarting a job (upstart) in a php script在 php 脚本中重新启动作业(新贵)
【发布时间】:2011-09-25 17:21:27
【问题描述】:

我目前正在为我最近的项目编写管理门户。我一直在用我的电脑来争取暴发户的工作,现在它是,我希望能够从网络上操作暴发户。我需要在我的 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

【问题讨论】:

  • 网络服务器(或 PHP FastCGI)运行的是什么用户?您可能需要修改 sudoers 文件。
  • debain 应用程序的默认网络用户。我认为是 www-data
  • Sudo 甚至无法在没有交互式终端的情况下工作,但您可以使用例如 python 脚本来伪造它。不容易:S

标签: php sudo upstart


【解决方案1】:

我看到了几种方法。您当然可以将 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 脚本上的广告那样工作,因为安全风险太高。这是一个article,它解释了一种使用 C 程序(setuid 仍然有效)来调用您的脚本的解决方法。这有点令人费解,但它应该可以工作。

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

【讨论】:

  • 只是为了澄清这一点,您绝对不需要在任何地方设置密码。 sudo 具有适用于非交互式操作的 NOPASSWD 参数。不过,这仍然是一个糟糕的想法,所以不要这样做。
猜你喜欢
  • 2012-11-11
  • 2019-04-19
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2013-03-20
  • 2014-11-09
相关资源
最近更新 更多