apache 用户在通过 httpd 运行时无法使用 sudo

apache 用户在通过 httpd 运行时无法使用 sudo

我有一个要求,Web 应用程序 (php) 必须在另一台服务器上运行脚本。我通过 root 用户对 apache 用户进行 sudo 测试,以 apache 用户身份运行远程脚本。远程计算机上的脚本已正确执行。但是,当我通过 Web 浏览器的请求运行的 php 脚本运行它时,它无法正常运行。有什么想法可以解决这个问题吗?

  1. 通过 root 登录
  2. 更改apache的sesu访问权限

    sudo /usr/sbin/visudo
    
    Cmnd_Alias WEBREMOTE = /usr/bin/ssh, /var/www/html/test_shell.sh
    
    apache   ALL=(ALL)       NOPASSWD:WEBREMOTE
    
  3. sudo 到 apache 用户

    sudo -u apache -s
    
  4. 远程运行脚本

    sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh test_param & > /dev/null
    
  5. 从远程机器查看日志,shell脚本可以正常运行

  6. 当您尝试通过 php 的 exec 运行相同的脚本时,代码不会运行

     <?php
     $shellcmd = "sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh $test_param & > /dev/null";
     $ret = exec($shellcmd);
     echo "<br />";
     echo "shellcmd result: [$ret]";
    
     $ret2=shell_exec($shellcmd);
     echo "<br />";
     echo "shellcmd result: [$ret2]";
     ?>
    

生成的 php 仅通过 exec 或 exec_shell 返回空白结果,并且 test_shell.sh 内的日志不在远程计算机中运行。 php页面也不会导致错误,我是否错过了这里的任何设置?

相关内容