【问题标题】:execute service command through php and bash通过php和bash执行服务命令
【发布时间】:2018-08-12 06:13:31
【问题描述】:

我想从一个 html 页面启动一个 bash 脚本。 该脚本应该修改文件并重新加载星号服务。 我正在使用 PHP 来执行此操作。

我的 php 脚本:

<?php
$field1 = $_GET["P1"];
$field2 = $_GET["P2"];
$field3 = $_GET["P3"];
echo "$field1 $field2 $field3 ";
$output = shell_exec("/var/www/html/script.sh $field1 $field2 $field3");
echo "<pre>$output</pre>";
?>

还有我的 bash 脚本:

#!/bin/bash
num1=$1
num2=$2
num3=$3
for i in 1 2 3
do
    temp="num$i"
    if [ -z  ${!temp} ]
    then
        :
    else
        echo "${!temp}" >> /etc/asterisk/file.conf
    fi
done
sudo service asterisk reload

我尝试将 apache 添加到 /etc/sudoers,但它不起作用,即使使用 ALL ALL=NOPASSWD: ALL 规则也是如此。

我遇到了这个问题,无法让它正常工作。 脚本本身运行正常,只有重新加载部分不起作用。

谁能告诉我该怎么做? (我使用 httpd 运行 CentOS 6.6)

【问题讨论】:

  • 错误信息到底是什么?如果你自己运行这个脚本会发生什么?
  • 我在任何日志文件中都没有任何与此相关的错误消息,这就是问题所在
  • 如果直接运行脚本服务重启正常吗?
  • 使用无特殊权限的新账号,直接运行脚本时服务正常重启
  • 这可以与任何安全配置文件相关吗?我遇到了阻止从 php 执行 bash 的 SELinux 问题。也许这样的事情可能会阻塞?

标签: php bash apache service centos


【解决方案1】:

在 /etc/sudoers 中:www-data ALL=NOPASSWD:/var/www/html/script.sh

尝试:

exec ("/var/www/html/script.sh" .$field1 . $field2 . $field3, $output );

http://php.net/manual/en/function.exec.php

【讨论】:

  • www-data 不存在,它是 apache 但它不起作用
【解决方案2】:

在sudoers文件中设置了require tty,避免了命令被apache执行。

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2018-11-21
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多