Запуск Apache як іншого користувача


10

Коли я запускаю ps -efHкоманду, щоб перерахувати весь процес, я бачу, як Apache працює як rootі, здається, підпроцеси виконуються як www-data. Ось уривок:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Чи можу я змусити Apache та всі підпроцеси працювати різним користувачем apache2d:apache2d? Якщо так, як? Я десь читав, що налаштування для цього можна знайти, /etc/apache2/httpd.confале цей файл видається порожнім? Чи можна це досягти, змінивши власника та групу /etc/init.d/apache2сценарію, а потім встановивши встановлений прапор на ньому?

Відповіді:


21

Apache повинен запускатися як root спочатку, щоб прив’язати його до порту 80. Якщо ви не запустите його як корінь спочатку, ви не можете прив’язати до порту 80. Якщо ви хочете прив’язати до якогось порту вище 1024, то так, ви можете. Інакше не турбуйтеся про root. Це батьківський процес Apache і не обслуговує жодних запитів. Це породжує дочірні процеси та скасовує привілеї для обробки запитів.

Щоб змінити користувача Apache, встановіть параметри Userта Groupпараметри у вашій конфігурації Apache.


Ну, вибачте за відступ, але зауважую, що haproxy може працювати як haproxy (не як root), а зв'язувати tcp 80 port. Як цього досягти? Будь-яке просвітлення?
kiiwii

1
Це не так. Процеси можуть прив'язуватися до портів під 1024 лише у випадку, коли він має супер привілей користувача. Таким чином, haproxy або починається як root і відкидає привілеї (можливо) або встановлений root (навряд чи).
Багамат

Вам не потрібно запускати його як root, просто потрібно дозволити користувачеві "apache" доступ до портів з обмеженим доступом (тобто, до тих, що нижче 1024). Ця відповідь пояснює, як ви можете використовувати "authbind" для цього: superuser.com/questions/710253/…
Animal451

4

@bahamat це досить добре пояснює, але я додам трохи детальніше.

У ході нормальної роботи процес апач-root, що належить, не виконуватиме жодних дійсних операцій, окрім прослуховування на порту 80 та передачі вхідних з'єднань своїм (безпечно непривілейованим, як www-dataкористувачеві) дітям.

Розташування головного файлу конфігурації залежить від параметрів часу компіляції і залежить від розподілу, але /etc/apache2/apache2.confце гарна вихідна здогадка.

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


3

Принаймні, в Ubuntu налаштування для цього є /etc/apache2/envvars. Налаштуйте їх, потім перезапустіть apache і ви вимкнетесь і працюйте.


Дякую, це мені допомогло! Я налаштовую скриньку бродів ubuntu, і чомусь /etc/apache2/httpd.conf не використовувався для завантаження користувача та групи. envars, здається, робить свою справу!
Грег

2

Також ознайомтеся з Apache2 ITK MPM .

Він розщеплює нитку Apache з присвоєним uid/ gid, це давайте продовжувати використовувати mod_php. Не більше chmod/ chownтощо.


Оголошення за mpm_itkяке є значним поліпшенням щодо suexec / fcgid
Шадур

0

Mac OSX:

Що для мене працювало - це перейти у файл налаштування apache:

/etc/apache2/httpd.conf

У цьому файлі я шукав користувача або групу

і наткнувся на:

User _www
Group _www

Я змінив його на те, що мені потрібно було користувачеві / групі (в моєму випадку користувачеві / групі, яка є власником моїх файлів веб-додатків, які ви можете бачити. І це ви можете перевірити, використовуючи простий 'ls -l' командування)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.