#php #security #root #suphp
#php #Безопасность #root #suphp
Вопрос:
Я создал несколько веб-сайтов. Теперь мне нужно выполнить root
задачи. Я создал веб-платформу и установил. root
владеет всеми скриптами в /var/private-www/
, и они модифицированы (0777). В /var/private-www/test.php
значениях: <?php echo exec('whoami'); ?>
. Моя suPHP
конфигурация такая:
[global]
;Path to logfile
logfile=/var/log/suphp/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=root
;Path all scripts have to be in
docroot=/var/private-www
;Path to chroot() to before executing script
;chroot=/mychroot
; Security options
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true
;Send minor error messages to browser
errors_to_browser=false
;PATH environment variable
env_path=/bin:/usr/bin
;Umask to set, specify in octal notation
umask=0077
; Minimum UID
min_uid=0
; Minimum GID
min_gid=0
[handlers]
;Handler for php-scripts
application/x-httpd-suphp="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"
Когда я выполняю test.php
в своем веб-браузере, он говорит: www-data
:(. Not root
… Даже когда я выполняю его в командной строке. Кроме того, я сделал a2enmod suphp
и apachectl restart
, так что я думал, что это сработает. Как я могу это исправить?
Комментарии:
1. Я полагаю, вы знаете, насколько невероятно опасно запускать любое веб-приложение от имени root, и сколько раз вы собираетесь это услышать?
2. Да, но как можно делать такие вещи, как
adduser
на веб-платформе? 🙁3. демон и рабочая очередь и / или задание cron могут легко выполнять эти задачи.
4. 777 позволяет любому изменять эти скрипты. Затем вы запускаете их от имени root с веб-сервера. Здравствуйте, полный захват вашего сервера.
Ответ №1:
Взгляните на эти известные атаки на веб-приложения: OWASP. Запуск от имени root и разрешения 0777 — это то, чего вам следует избегать.
Ответ №2:
Краткий ответ: Не делайте этого.
Любые задачи, которые необходимо запускать от имени root, должны выполняться с помощью задания cron.
Почему вы пытаетесь сделать это таким образом, в любом случае?
Ответ №3:
Я пожалею, что сказал это, и я не хочу быть помощником, но:
Вероятно, вам потребуется перекомпилировать. Минимальные UID и GID не являются (просто) настраиваемыми элементами, также существуют минимальные проверки, выполняемые во время компиляции. Также нет гарантии, что не будет жестко запрограммированных проверок на запуск от имени root.
Вам действительно следует рассмотреть альтернативный метод выполнения желаемых задач, который не предполагает предоставления доступа к веб-приложению, работающему от имени root. Регулярно выполняемое задание cron, которое проверяет наличие незавершенных задач, или служба очереди выполнения могут легко достичь этих целей. В этом случае веб-интерфейсу не нужно запускаться от имени root.
Ответ №4:
Это не тот ответ, который вы ищете, но вам следует немного подумать об этом:
Хотя бывают случаи, когда вы хотели бы это сделать, запуск всех ваших php-скриптов от имени root в целом является плохой практикой, и вы можете столкнуться с рядом препятствий.
Один из простых способов избежать этого — использовать sudo. Добавьте свои команды в sudoers для www-data и позвольте своим скриптам выполнять внешнюю команду с помощью sudo.
Даже внешние php-скрипты могут запускаться от имени root через sudo. Таким образом вы добьетесь разделения привилегий.
В противном случае вам придется запустить apache modphp от имени root или взломать код suphp.