【问题标题】:Restart apache2 via PHP script通过 PHP 脚本重启 apache2
【发布时间】:2016-08-31 06:10:51
【问题描述】:

当我使用以下代码加载页面时,我想重新启动 apache2:

exec('/etc/init.d/apache2 reload', $output, $return);
if(!$return) {
    $result = "<script>console.log('can not restart apache2');</script>";
    echo $result;
    echo $output;
} else {
    $result = "<script>console.log('restart apache2 successfuly');</script>";
    echo $result;
}

在文件etc/sudoers 中添加以下行:

Cmnd_Alias      RESTART_APACHE = /etc/service apache2 restart
www-data ALL=NOPASSWD: RESTART_APACHE

但结果返回can not restart apache2

我做错了吗?

【问题讨论】:

  • 试过&lt;?php echo shell_exec('service httpd restart &amp;'); ?&gt; ?
  • 您的 sudoers 说允许重新启动,但您正在重新加载 exec()。就安全性而言,这是一个非常糟糕的主意,您为什么要这样做?为什么不坚持使用 SSH 访问,或者进程监视器之类的?

标签: php apache ubuntu restart


【解决方案1】:

@tuanptit
&lt;?php echo shell_exec('service httpd restart &amp;'); ?&gt;

您可能会遇到尝试执行此操作的此类脚本的权限问题。不过,听起来您正处于一个完整的开发环境中,因此授予它提升的权限对您来说并不重要。

但是,恕我直言,处理此问题的最佳方法是让运行 Apache 的用户通过 sudo command 重新启动 Apache。

您需要编辑 /etc/sudoers 文件并添加类似于以下内容的行:

Cmnd_Alias      RESTART_APACHE = /sbin/service apache2 restart

www-data ALL=NOPASSWD: RESTART_APACHE 

您可能需要nobody 而不是www-data,这取决于运行Apache 的用户。在 Debian 上,Apache 通常在用户 www-data 下运行,而在 Red Hat 下,Apache 通常在用户 nobody 下运行。此外,/sbin/service apache2 restart 可能需要为/sbin/service apache restart/sbin/service httpd restart。一切都取决于您的系统配置。

完成后,您可以在 PHP 中使用代码:

exec('/sbin/service apache2 restart');

(如果重新启动 Apache 的命令在您的服务器上不同,则显然会更改它。)

请注意:这很可能被视为安全风险!如果您这样做,您完全信任sudo 二进制文件、service 二进制文件,并且您的系统会遵守规则,并且不会让 Apache/PHP 进程获得 root shell。我强烈建议您在 http://serverfault.com 上询问您在这里所做的事情的影响。

【讨论】:

  • 我改为使用这一行 &lt;?php echo shell_exec('service httpd restart &amp;'); ?&gt; 但不起作用,在 apache 的 error.log 文件中说 httpd: unrecognized service。而且我在服务器中也找不到/sbin/service
【解决方案2】:

Apache 服务可能无权自行重启

【讨论】:

    【解决方案3】:

    这里已经讨论过解决方案。

    How do you restart Apache with a (web) button click?

    在 sudoers 文件中有“restart”,在 php 文件中有“reload”

    检查是否需要使用 /sbin/service 而不是 /etc/service

    确保命令在 PHP 和 sudoer 文件中匹配

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      相关资源
      最近更新 更多