У меня есть страница php, которая пытается запустить сервис перезапуска с помощью:
$list=shell_exec('sudo /sbin/service NetworkManager restart');
Мне нужно было отредактировать файл sudoers, чтобы это произошло. Таким образом:
#Defaults requiretty
а также
apache ALL=(ALL) NOPASSWD: /sbin/service
Когда это не удалось, в качестве теста я запустил:
apache ALL=(ALL) NOPASSWD: ALL
Я запустил shell_exec без команды sudo:
$list=shell_exec('whoami');
echo $list;
Это вернуло «apache», как и ожидалось. Итак, я побежал:
$list=shell_exec('id');
echo $list;
Это вернуло «uid = 48 (apache) gid = 48 (apache) groups = 48 (apache), 10 (wheel)»
Я проверил права доступа файлов к работающей системе, которая делает то же самое, и они совпали. После этого только для тестирования я изменил все права доступа к файлам на 777. Все еще ничего. В журнале ошибок apache я получаю строку «sudo: нет tty присутствует и не задана программа askpass». Насколько я понимаю, это относится к строке #Defaults requiretty в файле sudoers, но, как указано, закомментирован. Я провел с ним больше тестов, и моя текущая запись в файле sudoers:
#Defaults requiretty
ALL ALL=(ALL) NOPASSWD: ALL
Я знаю, что не следует запускать сервер таким образом, так как это представляет огромный риск для безопасности, но в данный момент я полностью теряюсь из-за того, что меня блокирует. Selinux выключен, все разрешения — 777, и право собственности на файлы соответствует работающей у меня системе. При всей этой и всей возможной безопасности, которую я могу себе представить, я отключен, у меня все еще есть строка «sudo: нет tty присутствует и не задана программа askpass» в моем / var / log / httpd / error_log каждый раз. Выход из:
$list=shell_exec('sudo echo "yes" 2>&1 ');
echo $list;
Также есть «sudo: отсутствует tty и не задана программа askpass»?
Я мог бы действительно использовать некоторую помощь в этом. Я прочитал каждую статью на 4 страницах Google по этому поводу, так как я могу подумать, что это Google.
Хотя мои настройки немного отличаются (я не пытаюсь добиться этого без пароля), я использую это в файле sudoers:
apache ALL=(ALL) ALL
Defaults:apache !requiretty
Затем я запускаю вещи как:
echo '{password}' | sudo -S {command}
Других решений пока нет …