Sudo и общие команды из скрипта PHP в Apache

Фон

По некоторым причинам мне нужно иметь возможность запускать общие команды от имени моего пользователя (не root) из сценария PHP внутри Apache (для использования только с localhost), первоначально работая как www-data,

Предыдущие попытки

Я создал файл в /etc/sudoers.d содержащий это:

www-data ALL = (my-user-name) NOPASSWD: ALL
# Dirty, to be narrowed later.

Затем с помощью sudo, делать:

$command = …;
$sudo_command = "sudo -u my-user-name -g my-user-name --set-home $command";
exec($sudo_command, $output, $statut);

Если $command это что-то вроде:

  • ls -l /home/my-user-name/some-fileработает нормально.
  • gnome-open some.pdf: Я получаю код выхода 0 Это значит, что команда может быть выполнена, за исключением того, что Evince не открывается, и я ничего не получаю $output,
  • xdg-open some.pdf: Я получаю код выхода 0Эвинс не открывается и я вхожу $output текст, начинающийся с "Ваш тип терминала неизвестен!".
  • evince some.pdf: Я получаю код выхода 1 что, если код выхода является стандартным, означает "общая ошибка".

Я пытался заменить gksudo за sudo, но безрезультатно.

Вопрос

Если это возможно, как запускать общие команды, а не только команды оболочки, из PHP, работающего в Apache?

Обновить

Я мог бы найти ответ здесь: /questions/454348/zapustite-prilozhenie-x11-gui-iz-brauzera-apache-php/454359#454359. Если я префикс команды с DISPLAY=:0все нормально, по крайней мере пока. Примечание: я проверил, используя shell_exec и префикс с export DISPLAY=:0;тоже работает.

0 ответов

Другие вопросы по тегам