如何通过 Web 控制面板安全地以 root 身份执行命令?

如何通过 Web 控制面板安全地以 root 身份执行命令?

我想构建一个非常简单的基于 PHP 的基于 Web 的控制面板,以便在我的 linode vps(Ubuntu 8.04 LTS)上添加和删除用户以及在 nginx 配置文件中添加和删除部分。

根据基于 Web 的控制面板的输入,以 root 身份执行命令的最安全方法是什么?

出于显而易见的原因,我不愿意以 root 身份运行 PHP(即使在 IP 表防火墙后面)。

欢迎提出建议。这肯定是可行的,因为有几种商业控制面板(而且对于我的需求来说过于臃肿)提供了类似的功能。

谢谢

答案1

为 Web 服务器运行的用户创建 sudo 规则,以便它只能运行特定命令。例如,要编辑文件,您可以让 Web 服务器在 Web 服务器拥有且只能写入的目录中进行复制(这样恶意的本地用户就无法在过程中踩到您的更改),并设置 sudo 规则将编辑后的文件复制到位。您可以锁定 sudo 规则,以便只能处理具有特定参数的命令。

此外,请确保您正在验证用户,并确保您清理来自用户的任何输入,以阻止任何 shell 元字符或类似字符潜入。例如,在添加用户时,您可能会验证输入是否符合最大长度并且仅包含字母和数字。使用 sudo 可以防止大多数类似情况,但多层保护是好的。对用户输入不能过于偏执。;)

或者只需安装 Webmin。:)

答案2

无论您做什么,总会存在一个潜在的安全漏洞。

一些建议:

  • 编写一个简单的 shell 脚本来执行其输入,并让其 chown 和 setuid root;PHP 将调用它并将提供的命令传递给它。
  • 对于您将要执行的各种任务使用更具体的脚本,并让它们 setuid root;同样,PHP 将调用它们。
  • 编写一个守护进程,它通过 TCP 套接字接受命令并执行这些命令,并让其以 root 身份运行;PHP 将连接到它。
  • 基于“系统上还有其他东西可以以 root 身份执行您想要的操作并让 PHP 调用它”这一概念的任何其他内容。

以上这些似乎都比以 root 身份运行“控制面板”更安全(也绝对不简单)。而且大多数“控制面板”软件包(例如网页管理工具)完全绕过这个问题并以 root 身份运行。

答案3

用 python 编写一个 cgi 脚本,我认为这可能更容易。尽管正如 Massimo 所说,运行 webmin 更安全...

答案4

cPannel 和 WebMin 可以做到这一点,但它们也非常不安全。黑客入侵的后果也很严重,您会丢失整个系统,并且一旦被黑客入侵,您将不得不从头开始重新安装。

就像您不想使用 telnet 一样,您也不想使用 http。请确保您使用 HTTPS,并购买真正的证书,毕竟将您的 root 密码泄露到网上是一个严重的错误,您需要确保它发送到正确的服务器。

编辑: 您可以在 chroot 中运行 cPannel,因此即使它被破解了,您也可以创建一个新的 chroot。它也是一个加垫监狱,可以让您准确定义 root 可以访问的内容。

相关内容