如何通过php访问根包?

How to access root packages through php?

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

问题:有没有限制phpshell_exec()出于安全目的不访问根包?如果是,如何解决?

我试过: 授予对根文件夹的写权限然后我可以通过访问根包 命令行不是根用户。但是我无法通过 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根包。

在 /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.

我最近发布了一个项目,允许 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;