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