Я просто развернул окно с Ubuntu 11.10, а затем побежал apt-get install apache2 php5
устанавливать apache2 и PHP 5 на него. Теперь он функционирует как «веб-сервер» и загружает «Это работает!» стр. Сейчас я пытаюсь повысить безопасность, и у меня есть следующие вопросы о веб-серверах Linux:
- Кто должен работать как apache?
- В какой группе должен быть этот пользователь?
- Какой пакет (ы) может заставить PHP (и Apache?) Работать как владелец файлов? (как на общих веб-хостах) Должен ли я использовать эти пакеты? Их легко / выполнимо поддерживать в маленькой системе?
- Какими должны быть разрешения по умолчанию для файлов и папок, которые раздаются в сети с запущенным 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
)?
Я использовал их только в качестве конечного пользователя веб-хостинга, и поэтому я не знаю их начальных и конечных параметров, а также целесообразно ли их устанавливать в небольшой системе или если есть какие-то другие меры безопасности, которые я должен использовать вместо этого, но я подумал, что упомяну их здесь, поскольку они кажутся одним из возможных способов решения некоторых моих проблем.
Вернуться к вопросам
- Кто должен работать как apache?
- В какой группе должен быть этот пользователь?
- Какой пакет (ы) может заставить PHP (и Apache?) Работать как владелец файлов? (как на общих веб-хостах) Должен ли я использовать эти пакеты? Их легко / выполнимо поддерживать в маленькой системе?
- Какими должны быть разрешения по умолчанию для файлов и папок, которые раздаются в сети с запущенным apache
www-data
? Для Apache / PHP работает как пользователь?
Ответы:
Не меняйте владельца чего-либо на 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 является индикатором других ошибок безопасности (например, не запрещает вход в систему с паролем), но это целый набор вопросов сам по себе.
источник
Это неправда, вам не нужно устанавливать
rwx
«другое». Вам следует сменить владельца и / или группу конкретной папки / файла, который вы пытаетесь защитить. Например:Теперь только члены группы
www-data
могут читать/var/www/cwd.com
. И только вы (cwd) можете писать в него. Если вы хотите, чтобы ваши приложения (через Apache) тоже могли записывать / изменять файлы в этом каталоге, вы изменяете их на 770.Я думаю, что это покрывает все ваши проблемы, я не вижу причин менять пользователя, под которым работает apache.
источник