Хорошо, мне нужно запустить мой веб-сервер Apache от имени пользователя root. Для этого я набрал echo whoami
; в терминале. Это дает мне вывод: root. Но когда я проверяю свой сервер apache, работающий от имени пользователя root или нет, выполняя следующий php-скрипт:
< ?php echo `whoami`; ?>
Это дает мне вывод: nobody
. Таким образом, какие-либо предложения, чтобы выполнить / войти в систему как пользователь root в Apache ??
То, что Вы спрашиваете, очень опасно, потому что любые новые уязвимости, найденные в Apache, могут быть использованы как корень. Одна из первых вещей, которые веб-мастеры делают при обеспечении их веб-сервера, не состоит в том, чтобы запустить серверное приложение как корень. Тем не менее я предлагаю следующую альтернативу, которая должна удовлетворить потребности, поскольку Вы заявили это.
Создайте сценарий оболочки, который делает то, что Вы хотите. Это не Сценарий PHP, когда PHP выполняется в веб-сервере, Вам нужен скрипт, который запущен Ubuntu. Вот образец:
#!/bin/sh
# script that runs as root
whoami
Я назвал этот файл /localstore/root.sh
и необходимо поместить его куда-нибудь, который имеет смысл в системах (например. /home/www_data/bin
).
В окне терминала выполните команду sudo vi /etc/sudoers
и вставьте следующую строку в конце файла (важный, чтобы быть в конце, таким образом, другие команды не переопределяют):
ALL ALL=NOPASSWD: /localstore/root.sh
Это позволит любому запускать скрипт как корень, после того как Вы тестируете и подтверждаете, что он работает, я настоятельно рекомендую (снова в целях безопасности), что Вы изменяете строку на
nobody ALL=NOPASSWD: /localstore/root.sh
но как наблюдаемое Бодхи, Apache должен работать как www-data
в этом случае необходимо измениться nobody
кому: www-data
.Примечание: Я никогда не пробовал sudo
с nobody
как пользователь и не уверено, что это будет работать.
В Вашем сценарии веб-сервера выполните сценарий оболочки в PHP следующим образом:
< ?php
exec ("sudo /localstore/root.sh");
?>
Можно добавить параметры к сценарию в кавычках.
Это должно получить его так root.sh
сценарий выполняется как корень при вызове от веб-сервера. Если у Вас есть другие сценарии, они могут быть списком разделенных запятой значений на той же самой записи в sudoers
файл. Удостоверьтесь, что полномочия на сценарии позволяют выполнение веб-сервером.
Интересно, не является ли это требованием из-за запуска в виртуальной среде с Виртуальным веб-сервером с использованием общего каталога, и в этом случае владение каталогом будет корневым, чтобы к нему могли обращаться как файловая система хоста, так и гостевая система. Решением может быть добавление группы www-data в группу vboxfs или что-то еще в вашей среде. Более подробно это обсуждается в . Эта статья
В моей ситуации меня также смутило требование включить опцию в конфигурацию моего виртуального хоста, в частности, добавить
Require all granted
. в моей конфигурации каталога, как описано в этой статье