Выпуск: Первоначально, через командную строку как пользователь root, я получил доступ к пакету pandoc (/root/.cabal/bin/pandoc)
который был установлен в корневой папке. Когда я пытаюсь получить доступ к этому пакету через php, используя shell_exec()
,это терпит неудачу.
Вопрос: Есть ли ограничение для 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");
Expectation: Мне нужно выполнить корневой пакет Pandoc через shell_exec()
в php.
Добавлена следующая строка в файл / 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 (как 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;