Apache как не корень

Я прохожу аудит на работе, и существует требование компании, чтобы определенные услуги не работали как пользователь root для систем Linux. Apache запускает первый процесс, поскольку пользователь root для привязки для портирования 80 (или 443) затем порождает остающиеся процессы как www-данные. Существует ли способ настроить апача и Ubuntu (14.04) для запуска первого процесса как www-данных также?

7
задан 4 November 2015 в 14:54

3 ответа

Я не соглашаюсь с существующим ответом (и ста ответами вокруг Интернета).

возможно выполнить Apache2 как что-то другое, чем корень.

Это не то, как это по умолчанию, хотя и случается так, что поведение по умолчанию, которое поставлется с Ubuntu, которая делает вещи действительно трудными для Вас. Все его сценарии и конфигурация ожидают использовать root-then-drop-privileges модель.

я просто обращусь к вещам, обычно цитируемым в качестве "определенно нуждающийся в корне" (выше и в другом месте):

  • Порт 80 . Забудьте в течение минуты, что Вы могли бы хотеть работать на непривилегированном порте (некоторые люди делают, я раньше выполнял Apache как это позади Nginx)... Вы можете все еще связывать низкие порты как некорневое использование платформы поддержки Linux (начиная с 2.6.24); при предоставлении Apache прав связать с любыми портами этому нравится, независимо от пользователя:

    sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/apache2
    

    Или можно использовать iptables для перенаправления порта 80 к непривилегированному порту.

  • файлы конфигурации Чтения и сертификаты . По умолчанию конфигурация может быть считана любым пользователем. Если Вы блокируетесь www-data (или независимо от того, что пользователь выполняет Apache) от чтения конфигурации или сертификатов —, который Вы can— Вы повредите сервер.

    Некоторые люди говорят о начальном корневом процессе, как будто это может быть, может использоваться для получения прав после запуск. Это не имеет место. Это было бы ужасно небезопасно. Это просто упорядочивает непривилегированные дочерние процессы.

Истина - Вы, может повредить вещи сделать эту работу. Не делайте этого. По крайней мере, только когда Вы прочитали целое сообщение.

sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/apache2
sudo /etc/init.d/apache2 stop
sudo chown -R www-data: /var/{log,run}/apache2/
sudo -u www-data apache2ctl start

И там Вы. Рабочий Apache <забастовка> как задира как www-data.

enter image description here

, Но я не сделал бы этого в производстве. Мой код выше не имеет init сценария для него так, необходимо было бы заменить или "зафиксировать" /etc/init.d/apache2, чтобы остановить управляемую корнем версию, выполняемую и запустить www-версию-данных. Это не маленькое обязательство; посмотрите на сценарий.

[еще 1131], чем что-нибудь, privilege-de-escalation модель Apache использовала, протестированное сражение. В течение многих лет. Другие серверы делают это это слишком. Это не злое .

, Если Ваши администраторы собираются войти в hyper-tiffy о том, что Вы выполняете, у Вас есть несколько опций:

  • Делают это в VM (как, я сделал для тестирования этого ответа). lxc, docker, и т.д., и т.д., и т.д. Минимальная установка, прекрасный свет и чистый и могут работать как "нормальный" пользователь на внешней стороне при сходстве с чистым металлом на внутренней части.

  • Использование httpd, который не должен базироваться. Apache имеет целую экосистему вокруг этого, которая ожидает определенные вещи, таким образом, это не будет хороший выбор. Но какой бы ни Вы выбираете, необходимо будет, вероятно, бороться с их init сценариями.

  • , Если Вам только нужен суперосновной материал на non-priv порте, Вы могли бы работать:

    python -m SimpleHTTPServer 8000
    
15
ответ дан 23 November 2019 в 06:10

Короткий ответ:

Вы не можете заставить первый основной процесс Apache запуститься как некорневые для основного процесса нормальным способом. Это вызвано тем, что основной процесс требуется работать как суперпользователь для привязки, чтобы портировать 80 (HTTP) и 443 (HTTPS) и получить доступ к конфигурационным файлам (в /etc/apache2/ по умолчанию), таким образом, рабочие знают то, что они, как предполагается, делают.

Детали об этом ниже, и много веб-серверов в репозиториях имеют подобные типы установок (NGINX воздействует на те же основные принципы также).



Детали


Ведущий процесс Apache - это получает доступ к конфигурационным файлам и связывает рабочих с портами <= 1024:

Основной процесс Apache должен работать как root.

Это вызвано тем, что все конфигурационные файлы в /etc/apache2/... обычно принадлежат, как корень, и для доступа (немного) к SSL частные данные сертификата (/etc/ssl/private/... обычно), этому будет нужно питание суперпользователя.

Административный доступ также необходим для привязки с портами меньше чем 1 024, которые включают порт 80 (HTTP) и 443 (HTTPS) для веб-сервера, работающего с типичными портами HTTP / HTTPS для работы правильно над теми портами.

Основной процесс не делает намного больше, чем это, действительно, и не обрабатывает фактические запросы от клиентов, и при этом он на самом деле не взаимодействует с сетью docroots и т.д.


Рабочие процессы Apache - они обрабатывают запросы от и ответы на веб-браузеры:

Рабочие Apache на самом деле обрабатывают запросы, входящие к веб-серверу, и обрабатывают данные доступа в системе и отправке ответа клиентам. Это, я верю, где Ваша политика IT действительно говорит о выполнении как некорневое.

Это работает как www-data который не является учетной записью уровня администратора и не имеет поднятых полномочий. Это - то, где стандартные средства управления доступом в системе применимы, и действительно, что "Не может выполнить, поскольку корневое" ограничение действительно покрывает - в так, что Вы не хотите, чтобы рабочие процессы работали как корень/суперпользователь.


Почему я думаю, что существует отсутствие передачи между политикой и Вами, или почему я думаю, что Вашим политикам IT нужно пересмотренный, и необходимо говорить с людьми IT в среде:

Если Ваша компания / рабочее место указывает, что "Мы не можем позволить Apache, выполненному как корень вообще", затем согласуйте со штатом IT компании.

Причина, что это - 'плохая' или 'неправильно истолкованная' политика, состоит в том, потому что Вы не можете использовать http://somewebaddress.tld или https://somewebaddress.tld на Вашем домене, если Apache не может связать для портирования 80 или 443 соответственно. Если они не хотят, чтобы основной процесс работал как корень, то необходимо будет вручную изменить владение /etc/apache2/* или предоставьте отдельный каталог данных для конфигураций и затем все подайте Apache, сайты слушают на портах выше, чем 1 024.

8
ответ дан 23 November 2019 в 06:10

Используя sudo с доступом, настроенным только к апачским сценариям управления, обычно считается лучшей практикой. Не полностью устраняет переходное "корневое" состояние вначале, но любого аудитора безопасности, который не понимает, что это не стоит денег, они становятся заплаченными.

Это также довольно просто для установки пользовательской версии Apache в пространстве пользователя для установки всей принадлежности файла меньшему-количеству-привилегированному-пользователю, у которого только есть это управляемое поднятое полномочие через sudo.

1
ответ дан 23 November 2019 в 06:10

Другие вопросы по тегам:

Похожие вопросы: