Яким користувачем повинні працювати апачі та PHP? Які дозволи повинні мати / var / www файли?


41

Я просто закрутив скриньку Ubuntu 11.10, а потім побіг apt-get install apache2 php5встановити apache2 та PHP 5 на коробці. Тепер він функціонує як "веб-сервер" і завантажує "Це працює!" сторінки. Зараз я намагаюся посилити безпеку, і у мене є такі запитання щодо веб-серверів Linux:

  1. Ким повинен працювати апаш?
  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.

Дозволи 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)?

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

Повернутися до питань

  1. Ким повинен працювати апаш?
  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 реж потреби додатком перезаписувати - дозволяє йому писати тільки цю папку - і для будь-яких перезаписуваних місць , якщо це взагалі можливо , переконайтеся , що він поза кореневого документа або вжити заходів, щоб цей шлях для запису не був доступний через Інтернет.

Зауважте, що "ви" не повинні мати корінь. Дозволити прямий доступ до ssh як root - це показник інших пропусків безпеки (наприклад, не заборонити вхід пароля), але це ще ціла купа питань.


10

Тож якщо я правильно розумію, якщо apache працює як www-data, і я хочу, щоб апаш міг прочитати каталог, біт x повинен бути встановлений для світової (іншої) групи (o + x), і це також потрібно встановити у всіх батьківських каталогах по всій ланцюжку вгору (www, var). І якщо я хочу, щоб апаш міг читати з файлу, тоді слід встановити біт 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.

Я думаю, що це стосується всіх ваших проблем, я не бачу причин змінювати користувачеві, в якому працює апарат.


2
Дякую. Це не погане рішення, але якщо один користувач знає шлях до файлу іншого користувача, він може написати скрипт, який би читав вміст файлу, а потім завантажував його у веб-браузер, який би запускав його як apache - ефективно читати файл із каталогу іншого користувача. Чи має це сенс? Тож навіть якщо встановити дозволи на папки на 750, все ще існує потенційна вразливість безпеки.
cwd

@cwd Ви в кінцевому підсумку з'ясували це?
Ріккі Бойс

@cwd Це саме питання, яке у мене виникло. Ось чому я запитав це: serverfault.com/questions/807723/…
Nandakumar Edamana
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.