繁体   English   中英

如何通过网站PHP安全地更改主机名,IP地址,CentOS

[英]How to change hostname, IP address via website PHP safely, CentOS

我正在编写一个网站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");*/

            }   

当然,给apache这样的特权并不安全。 在这种情况下,该服务器上的任何用户都可以运行sudo并执行所需的操作。 最好的方法是编写一个由另一台受保护的服务器控制的系统守护程序。

如果需要单服务器解决方案,则可以运行另一个特权apache,它不为用户的虚拟主机服务。 这将更加安全。

我永远不会将Apache直接与系统命令联系在一起。 shell_exec()任何使用都应视为代码气味 我可以通过让GUI不执行任何操作来将其值保存到一些简单的非特权存储中,例如将JSON文件保存在某个专用目录中或某个SQLite数据库中来解决。 这消除了授予Apache任何特殊权限的需要,并具有一个额外的好处,即您可以保存配置的多个带有时间戳的版本,这样就可以在发生错误的情况下简单地还原到任何先前的配置。 然后,我将创建一个与Web服务无关的独立进程,该进程读取配置并进行适当的系统级别更改。 仅此过程需要增强的权限,而不是整个Web服务器。 它可以用任何您喜欢的语言编写,并且可以根据需要手动执行,例如以一定间隔运行的cron或积极监视更改的守护程序。

您可以将sudo配置为允许以另一个用户名(例如www-data)执行所有命令,一个特定命令或命令模式(也可以使用正则表达式),而无需输入密码。

检查手册

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM