Какому пользователю должны работать apache и PHP? Какие разрешения должны иметь файлы / var / www?

41

Я просто развернул окно с Ubuntu 11.10, а затем побежал apt-get install apache2 php5устанавливать apache2 и PHP 5 на него. Теперь он функционирует как «веб-сервер» и загружает «Это работает!» стр. Сейчас я пытаюсь повысить безопасность, и у меня есть следующие вопросы о веб-серверах Linux:

  1. Кто должен работать как apache?
  2. В какой группе должен быть этот пользователь?
  3. Какой пакет (ы) может заставить PHP (и Apache?) Работать как владелец файлов? (как на общих веб-хостах) Должен ли я использовать эти пакеты? Их легко / выполнимо поддерживать в маленькой системе?
  4. Какими должны быть разрешения по умолчанию для файлов и папок, которые раздаются в сети с запущенным apache www-data? Для Apache / PHP работает как пользователь?

Я сделал следующие вещи при проверке настроек по умолчанию:

Файловая структура

Когда я cd /и делаю ls -alраспечатку содержимого, я вижу/var :

drwxr-xr-x 13 root root  4096 2012-02-04 20:47 var/

Если я cdв varи ls -alвижу ли я:

drwxr-xr-x  2 root root  4096 2012-02-04 20:47 www/

Наконец, внутри /var/wwwя вижу:

drwxr-xr-x  2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r--  1 root root  177 2012-02-04 20:47 index.html

Мой главный вывод заключается в том, что до сих пор все эти файлы принадлежат root:root , файлы имеют разрешения 644, а каталоги имеют разрешения 755.

Разрешения Apache

Если я создаю файл от имени пользователя root /var/www/test.phpс содержимым:

<?php echo shell_exec('whoami');

и загрузить этот файл в браузер, он говорит мне www-data, который такой же, как в /etc/apache2/envvarsфайле:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Если я это ps aux | grep -i apacheвижу, я вижу следующее:

root      1916  1.2 104664  7488 Ss   20:47 /usr/sbin/apache2 -k start
www-data  1920  0.8 105144  5436 S    20:47 /usr/sbin/apache2 -k start
www-data  1921  1.0 105144  6312 S    20:47 /usr/sbin/apache2 -k start
www-data  1922  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1923  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1924  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1925  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start

Так кто же работает под управлением apache? Похоже, что первый процесс такой же, как root, может быть, из /etc/init.d/apacheскрипта при запуске системы, а остальные какwww-data из первого. Это верно?

Далее, если я ввожу groups www-dataтекст, я вижу www-data : www-data- значит, он только в www-dataгруппе. Я предполагаю, что это стандартная практика.

Общий хостинг и безопасность

Поэтому, если я правильно понимаю вещи, если apache работает как www-dataи я хочу, чтобы apache мог читать каталог, xнеобходимо установить бит для world (other) group ( o+x), а также для всех родительских элементов. каталоги по всей цепочке ( www, var). И если я хочу, чтобы apache мог читать из файла, то o+rбит должен быть установлен.

К сожалению, я считаю, что это создает дыру в безопасности для нескольких приложений и / или нескольких пользователей в одном и том же Linux-боксе: все веб-файлы должны быть доступны для чтения всем пользователям, поэтому они также доступны для других приложений и других пользователей системы. Если одно приложение, установленное в системе, имело уязвимость в системе безопасности, которая позволяла вводить необработанный пользовательский ввод без проверки, который затем выполнялся PHP, удаленный злоумышленник мог затем просмотреть все другие файлы в веб-системе, которые были доступны для чтения всем пользователям. Аналогичным образом, если в коробке было несколько пользователей, и пользователь знал путь к веб-файлам другого пользователя, он / она мог бы затем прочитать содержимое файла (и увидеть чувствительные элементы, такие как строки подключения к базе данных и т. Д.).

Я слышал о двух пакетах, suphpи они phpsuexecкасаются того, чтобы файлы пользователей можно было передавать «как они» в общей системе. Одним из достоинств этого является то, что он позволяет веб-приложениям (таким как Wordpress) создавать и изменять файлы - очень полезно для добавления тем, плагинов и обновления программного обеспечения. Конечно, возможно, более безопасно делать это вручную, но можно ли найти компромисс, возможно, с одним из пакетов, упомянутых выше? Или, возможно, используя chownдля того, чтобы группа каталогов WordPress принадлежала www-dataи устанавливала фиксированный бит для группы ( g+s)?

Я использовал их только в качестве конечного пользователя веб-хостинга, и поэтому я не знаю их начальных и конечных параметров, а также целесообразно ли их устанавливать в небольшой системе или если есть какие-то другие меры безопасности, которые я должен использовать вместо этого, но я подумал, что упомяну их здесь, поскольку они кажутся одним из возможных способов решения некоторых моих проблем.

Вернуться к вопросам

  1. Кто должен работать как apache?
  2. В какой группе должен быть этот пользователь?
  3. Какой пакет (ы) может заставить PHP (и Apache?) Работать как владелец файлов? (как на общих веб-хостах) Должен ли я использовать эти пакеты? Их легко / выполнимо поддерживать в маленькой системе?
  4. Какими должны быть разрешения по умолчанию для файлов и папок, которые раздаются в сети с запущенным apache www-data? Для Apache / PHP работает как пользователь?
УХО
источник
Возможный дубликат serverfault.com/questions/339948/…
AD7six

Ответы:

17
  1. не корень
  2. не корень
  3. Suexec
  4. Зависит. 644 для файлов и 755 для папок - безопасное значение по умолчанию.

Не меняйте владельца чего-либо на www-data, если вы не хотите, чтобы php мог редактировать содержимое этого файла / папки

Независимо от всего, что вы делаете: папкам нужны разрешения на чтение и выполнение, чтобы пользователь мог найти файлы; файлы должны иметь права на чтение, чтобы пользователь мог их прочитать. Если вы получаете какие-либо ошибки разрешений при изменении вещей - вам удалось удалить эти принципиально необходимые разрешения.

Если вы не пишете никаких файлов через приложение php, вы можете оставить файлы, принадлежащие вам: вам. В этих обстоятельствах применяется мировое разрешение (xx4 / 5).

Если вы оставите файлы как принадлежащие вам: у вас есть права доступа к файлам 644 (файлы), это будет означать, что только вы можете редактировать файлы веб-сайта - www-data - это не вы - поэтому он не может редактировать файлы.

Если вы хотите ограничить доступ к apache + you и заблокировать любой другой доступ chown -R you:www-data *. С правами доступа к файлам 640 и правами доступа к папкам 750 вы можете редактировать, www-данные могут читать - потому что тогда apache читает разрешение группы (x4 / 5x).

Ограничьте как минимум пути, по которым вы разрешаете писать apache / php - если есть каталог tmp, в который приложение должно записывать - разрешать запись только в эту папку - и для любых доступных для записи мест, если это вообще возможно, убедитесь, что он находится вне корень документа или предпримите шаги, чтобы гарантировать, что этот доступный для записи путь не доступен через Интернет.

Обратите внимание, что «вы» не должны быть root. Разрешение прямого доступа по ssh от имени root является индикатором других ошибок безопасности (например, не запрещает вход в систему с паролем), но это целый набор вопросов сам по себе.

AD7six
источник
10

Поэтому, если я правильно понимаю вещи, если apache работает как www-данные и я хочу, чтобы apache мог читать каталог, необходимо установить бит x для всемирной (другой) группы (o + x), и это также должен быть установлен во всех родительских каталогах по всей цепочке (www, var). И если я хочу, чтобы apache мог читать из файла, то нужно установить бит o + r.

Это неправда, вам не нужно устанавливать rwx«другое». Вам следует сменить владельца и / или группу конкретной папки / файла, который вы пытаетесь защитить. Например:

chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com

Теперь только члены группы www-dataмогут читать /var/www/cwd.com. И только вы (cwd) можете писать в него. Если вы хотите, чтобы ваши приложения (через Apache) тоже могли записывать / изменять файлы в этом каталоге, вы изменяете их на 770.

Я думаю, что это покрывает все ваши проблемы, я не вижу причин менять пользователя, под которым работает apache.

Роб Ваутерс
источник
2
Спасибо. Это неплохое решение, но если один пользователь знает путь к файлу другого пользователя, он может написать скрипт, который будет читать содержимое файла, а затем загрузить его в веб-браузер, который будет запускать его как apache - эффективно читая файл из каталога другого пользователя. Имеет ли это смысл? Таким образом, даже если вы установите для папки разрешения 750, потенциальная уязвимость по-прежнему существует.
cwd
@cwd ты в итоге понял это?
Рикки Бойс
@cwd Это был именно тот вопрос, который у меня был. Вот почему я спросил это: serverfault.com/questions/807723/…
Nandakumar Edamana