2016-10-13 3 views
1

Есть много вопросов по этой теме, но моя ситуация довольно странная.PHP - команда exec sudo ничего не возвращает

Я пытаюсь распечатать exec("sudo -u root whoami") в php. Но он ничего не возвращает.

Я добавил %www-data ALL=(ALL:ALL) ALL через sudo visudo, но не повезло, что происходит, без ошибок, просто ничего не распечатывать.

Любое предложение?

Заранее спасибо

+4

Я собираюсь поставить его там, что это ужасная идея. Ваш веб-сервер/PHP не должен иметь корневой доступ ко всей вашей системе. –

+0

Помимо ужасного пробела в безопасности, который вы собираетесь создать: ваша запись sudoers делает _not_ означает, что для выполнения команды под измененным идентификатором пользователя не требуется пароль. Пароль, который вы не можете предоставить в интерактивном режиме. Вы хотите прочитать о опции «NOPASSWD», которую предлагает файл sudoers, о которой вы хотите прочитать в документации. Но еще раз: это плохая идея по соображениям безопасности. – arkascha

+1

Также, только что протестированный с помощью PHP CLI при существующем суперпользователе и 'echo exec (« sudo -u root whoami »)' отлично работает или требует пароль. –

ответ

1

Как ваш веб-сервер будет ввести пароль для sudo?

Ваша конфигурация позволяет пользователю web-сервера выполнять все команды на сервере. Но для этого требуется, чтобы пользователь вводил свой пароль. И веб-сервер

  1. не может сделать это в интерактивном режиме
  2. даже нет apassword

Так если вы хотите, чтобы делать то, что вы пытаетесь сделать (давая процесс работает PHP корневой доступ к машине является очень плохая идея), вы должны добавить к вашей Судо-конфигурации:

%www-data  ALL = NOPASSWD: /usr/bin/whoami 

Это позволяет группа WWW-данные для запуска whoami как корень без interctive пароля проворной

+0

Я добавил '% www-data ALL = (ALL: ALL) ALL', и я подумал, что включает в себя то, что вы упомянули? Я знаю, что это плохая идея, но это не сработало. –

+0

На самом деле то, что вы предлагаете, прекрасно работает. Но есть ли более безопасный способ сделать это, или я иду против всех правил безопасности? –

+0

И хотя он не требует пароля, он фактически ничего не создает. Я пробовал с простой командой mkdir и никакой папки не создавался. Заранее спасибо –

Смежные вопросы