【发布时间】:2015-05-21 14:14:48
【问题描述】:
我正在编写一个网站 GUI,用于管理运行 CentOS 的数据服务器设备。很多电器都是这样做的。供应商基本上构建了仅用于更改某些配置参数的 GUI,并锁定了其他所有内容。但我很确定我遇到了权限问题,我正在寻找最安全的方法来做到这一点。也就是说,当用户通过 GUI 提交主机名更改时,shell_exec 命令似乎作为 apache 运行。 Apache 可能无权更改主机名,这就是为什么这不起作用。授予 Apache 这些权限可能是不安全的,对吗?那么解决方案是什么?所有设备供应商如何能够编写更改主机名的 GUI,他们是如何(安全地)做到这一点的?
代码摘录:
<form action="Settings.php" method="get">
<div class="box">
<h1>Device Settings</h1>
Hostname: <input type="text" name="Hostname" label="Hostname" value="<?php echo $Hostname; ?>"><br />
<input type="submit" value="Set"><br />
</div>
</form>
$Hostname=shell_exec("hostname"); /*gethostname**/
if (isset($_GET['Hostname'])){
$Hostname=$_GET['Hostname'];
$output1=shell_exec("sudo hostname ". $Hostname. " 2>&1");*/
}
【问题讨论】:
-
考虑一下当我在主机名字段中输入
foo; sudo rm -r /并提交表单时会发生什么。 -
对,那么解决方法是什么?我是否应该授予 Apache 仅通过 shell_exec 更改主机名(启动)的权利,如果是,如何?我是否应该只给 Apache root 权限(以及如何?),然后只在 PHP 中编写代码以确保输入的主机名不包含某些关键字?可能不是。我是经验丰富的计算机工程师,有网站经验……但我从未通过 html/php 设计过设备 GUI,我在 CentOS 上也不是新手……但如果你们我会弄清楚的可以为我指明正确的方向。