【问题标题】:How to access root packages through php?如何通过php访问根包?
【发布时间】:2015-01-03 09:23:14
【问题描述】:

问题:最初,我通过命令行以root用户身份访问了一个名为pandoc (/root/.cabal/bin/pandoc)的包,该包安装在根文件夹中。当我尝试使用 shell_exec() 通过 php 访问该包时,它失败了。

问题: 为了安全起见,php shell_exec() 是否有任何限制不能访问根包?如果有,如何解决?

我试过了:给根文件夹写权限然后我可以通过 命令行不是root用户。但我无法通过 php shell_exec() 访问它。

php代码:

shell_exec("cd /home/quotequadsco/public_html/pandoc_jats ; sudo -u quotequadsco 
-S /root/.cabal/bin/pandoc ex.tex --filter /root/.cabal/bin/pandoc-citeproc
-t JATS.lua -o ex.xml");

也试过了,

shell_exec("cd /home/quotequadsco/public_html/pandoc_jats ;/root/.cabal/bin/pandoc 
ex.tex --filter /root/.cabal/bin/pandoc-citeproc -t JATS.lua -o ex.xml");

预期:我需要在php中通过shell_exec()执行pandoc root包。

【问题讨论】:

  • 你是如何运行这个脚本的? Apache 在哪个用户下运行?
  • 在quotequadsco用户下运行的public_html文件夹中的php文件
  • 那么它不会工作你确定它的quotequadsco而不是www-data?你需要设置apache以root身份运行,这是不安全但可能的
  • 那么最安全的解决方法是什么?

标签: php shell root permission-denied


【解决方案1】:

在 /etc/sudoer 文件中添加以下行

#Defaults requiretty   //commented this line
usergroup ALL=(ALL)  ALL

PHP 代码,

shell_exec("cd /home/quotequadsco/public_html/pandoc_jats ;echo password | sudo 
-S command"); //added a password for sudo command to run as a root user.

【讨论】:

    【解决方案2】:

    我最近发布了一个项目,它允许 PHP 获取并与真正的 Bash shell 交互(如果需要,作为 root 用户),它解决了 exec() 和 shell_exec() 的限制。在这里获取:https://github.com/merlinthemagic/MTS

    下载后您只需使用以下代码:

    $shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
    $return1  = $shell->exeCmd('pandoc (/root/.cabal/bin/pandoc)');
    //the return will be a string containing the return of the command
    echo $return1;
    

    【讨论】:

      猜你喜欢
      • 2013-07-05
      • 2011-12-21
      • 2019-11-05
      • 2011-03-27
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      相关资源
      最近更新 更多