Я просто развернул окно с 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 работает как пользователь?