Я просто закрутив скриньку Ubuntu 11.10, а потім побіг apt-get install apache2 php5
встановити apache2 та PHP 5 на коробці. Тепер він функціонує як "веб-сервер" і завантажує "Це працює!" сторінки. Зараз я намагаюся посилити безпеку, і у мене є такі запитання щодо веб-серверів Linux:
- Ким повинен працювати апаш?
- У яких групах повинен бути цей користувач?
- Який пакет (и) можуть змусити 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.
Дозволи Per Apache
Якщо я створюю файл як корінь /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
Отже, хто як запущений апаш? Схоже, що перший процес є таким root
, можливо, із /etc/init.d/apache
сценарію, коли система запустилася, а інші, як www-data
спарені з першого. Це правильно?
Далі, якщо я набираю текст, groups www-data
то я бачу www-data : www-data
- так, схоже, бути лише в www-data
групі. Я здогадуюсь, що це теж стандартна практика.
Спільний хостинг та безпека
Отже, якщо я правильно розумію речі, якщо apache працює як www-data
і я хочу, щоб апаш міг читати каталог, x
біт повинен бути встановлений для світової (іншої) групи ( o+x
), і це також потрібно встановити для всіх батьків каталоги весь шлях по ланцюгу ( www
, var
). І якщо я хочу, щоб апаш міг читати з файлу, тоді o+r
слід встановити біт.
На жаль, я вважаю, що це вводить отвір у безпеці для декількох додатків та / або декількох користувачів в одній вікні Linux: Усі веб-файли повинні бути читатими у всьому світі, і тому вони також доступні для інших програм та інших користувачів у системі. Якщо в одному додатку, встановленому в системі, була вразлива безпека, яка дозволяла вводити необроблений, недійсний вхід користувача, який потім був виконаний PHP, то віддалений зловмисник може потім переглядати всі інші файли в веб-системі, які були прочитані у всьому світі. Так само, якщо у вікні було декілька користувачів, і користувач знав шлях веб-файлів іншого користувача, то він / він міг прочитати вміст файлу (і побачити чутливі речі, такі як рядки підключення до бази даних тощо).
Я чув про два пакети, suphp
і phpsuexec
це стосується того, щоб дозволити файли користувачів подаватись "як вони" у спільній системі. Однією з приємностей цього є те, що він дозволяє веб-програмам (як Wordpress) створювати та змінювати файли - дуже корисно для додавання тем, плагінів та оновлення програмного забезпечення. Звичайно, це безпечніше робити ці речі вручну, але чи можна зробити компроміс, можливо, з одним із згаданих вище пакетів? Або, можливо, використовуючи chown
для того, щоб зробити групу каталогів wordpress належати www-data
та встановити клейкий біт групи ( g+s
)?
Я використовував їх лише в якості кінцевого користувача веб-хостингової компанії, і тому я не знаю внесків і виходів з них, і якщо їх навіть розумно встановити в невеликій системі або якщо є якісь інші заходи безпеки, які я повинен використовувати натомість, але я думав, що я згадаю їх тут, оскільки вони здаються одним із можливих способів вирішити деякі мої проблеми.
Повернутися до питань
- Ким повинен працювати апаш?
- У яких групах повинен бути цей користувач?
- Який пакет (и) можуть змусити PHP (і Apache?) Працювати власником файлів? (наприклад, на спільних веб-хостах) Чи варто використовувати ці пакети? Чи їх легко / доцільно підтримувати в невеликій системі?
- Якими повинні бути дозволи за замовчуванням для файлів і папок, які подаються в Інтернеті при запуску apache
www-data
? Для apache / php, що працює як користувач?