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;тоже работает.