Как получить доступ к корневым пакетам через php?

0

Проблема. Изначально через командную строку в качестве пользователя 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");

Ожидание: мне нужно выполнить пакет pandoc root через shell_exec() в php.

  • 0
    Как у вас работает этот скрипт? Под каким пользователем работает Apache?
  • 0
    php файл в папке public_html, работающий под пользователем quotequadsco
Показать ещё 5 комментариев
Теги:
root
permission-denied

2 ответа

0
Лучший ответ

Добавлена следующая строка в файле /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.
0

Недавно я опубликовал проект, который позволяет 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню