php shell_exec,sudo命令不起作用

时间:2016-07-22 09:31:53

标签: php sudoers

我在(/opt/lampp/htdocs/xampp/test.php)中创建了一个文件test.php 包含代码

$data = shell_exec("sudo php -v"); 
var_dump($data);

但它给我的结果 NULL

我使用的是PHP 5.6.11-1ubuntu3.1(cli),所以我在/ etc / sudoers文件中添加了行

www-data ALL=NOPASSWD: /opt/lampp/htdocs/xampp/test.php

我也试过添加

www-data ALL=NOPASSWD: ALL

但似乎没有任何效果。请帮忙

2 个答案:

答案 0 :(得分:3)

  • 编辑sudoers文件(带visudo)并添加一条规则,允许Web服务器用户在没有密码的情况下运行命令。例如:

    www-data ALL=NOPASSWD: /path/to/script
    

    这将允许特定用户在不提示输入密码的情况下在该特定脚本上调用sudo

  • 尝试指定php二进制文件的完整路径.. /usr/bin/php,如果您不了解它,请使用以下命令查找:which php

    $data = shell_exec("/usr/bin/php -v"); 
    var_dump($data);
    
  • 您还可以检查您的php.ini是否限制了可用的命令集?

    ; When safe_mode is on, only executables located in the safe_mode_exec_dir
    ; will be allowed to be executed via the exec family of functions.
    ; http://php.net/safe-mode-exec-dir
    safe_mode_exec_dir =
    

答案 1 :(得分:0)

您应该更改mpm_itk模块的最小uid / gid:

$ cat /etc/apache2/modules.d/00_mpm_itk.conf
<IfDefine MPM_ITK>
LoadModule mpm_itk_module modules/mpm_itk.so
#  LimitUIDRange 1000 2000
#  LimitGIDRange 1000 2000
  LimitUIDRange 0 2000
  LimitGIDRange 0 2000
</IfDefine>