То, почему делает nginx, запускает процесс как корень?

Я получил это выполнение. По умолчанию я предполагаю, что Mageia не предоставляет доступ к веб-серверу. Существует 2 способа сделать это.

  1. GUI путь: Используйте drakfirewall приложение. Это открывает диалоговое окно, где можно выбрать сервисы, Вы хотите включить в своей системе. Отмеченный флажок 'Web Server' и доступ к веб-серверу из внешних источников предоставляют.

  2. CLI путь: (это - то, что я сделал, потому что мой экземпляр VirtualBox не имел X). Перейдите в /etc/shorewall/rules.drakx и добавьте строку в файл с и следующие.

    ACCEPT net fw tcp 80,443 -

39
03.06.2014, 22:36
4 ответа

Процесс, который вы заметили, является главным процессом, процессом, который запускает все остальные процессы nginx. Этот процесс запускается сценарием инициализации, запускающим nginx. Причина, по которой этот процесс выполняется от имени пользователя root, просто потому, что вы запустили его как root! Вы можете запустить его как другой пользователь, но вам нужно будет убедиться, что все ресурсы, необходимые nginx, доступны этому пользователю. Обычно это как минимум / var / log / nginx и pid-файл в / var / run /.

Самое главное; Только корневые процессы могут прослушивать порты ниже 1024. Веб-сервер обычно работает на портах 80 и / или 443. Это означает, что он должен быть запущен как root.

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

Изменить: Запуск чего-либо от имени пользователя root несет в себе неявную угрозу безопасности. Обычно разработчики такого программного обеспечения хорошо разбираются в векторах атак и стараются выполнять как можно меньше действий с правами root. В конце концов, вы просто должны быть уверены, что программное обеспечение хорошего качества.

Если вам все еще неудобно, есть способ запустить nginx от имени другого пользователя и по-прежнему использовать порты ниже 1024. Вы можете использовать iptables для перенаправления всего входящего трафика с порта 80 на другой порт, например 8080, и включить прослушивание nginx этот порт.

50
27.01.2020, 19:35

Я хотел бы добавить ответы ко всем остальным. Хотя nginx запускается как root, на самом деле он не работает как root. Пользователь (nginx, www-data и т. Д.), С которым он фактически работает, как правило, имеет ограниченный / заблокированный вход (вы не можете войти с ним, можно получить доступ только к определенным файлам). Это одно из преимуществ использования Linux для веб-серверов в отличие от Windows. Этот процесс называется форком ( вы можете найти более подробную информацию в этой статье Википедии ), и он также использует setuid и / или setgid (, что также объясняется в статье в Википедии ) для изменения пользователя и / или группы. При безопасной настройке хакер не сможет получить доступ к родительскому процессу и использовать учетную запись root. Это не всегда верно, поскольку хакер мог использовать какой-либо эксплойт для получения root-доступа (в nginx 1.4.0 и ниже была уязвимость, которая позволяла хакерам получить root-доступ).

2
27.01.2020, 19:35

Это способ упаковки приложения. На большинстве * nix по умолчанию непривилегированный пользователь не может прослушивать порт <1024, а веб-серверы используют 80 и 443.

Все Linux 2.2+, Solaris 10+ и FreeBSD позволяют пользователям без полномочий root прослушивать порты. ниже 1024, но не по умолчанию. Большинство из них согласились с использованием root , поэтому он остается в использовании.

Помимо доступа для привязки к привилегированному порту, вам необходимо убедиться, что пользователь, запускающий nginx, имеет доступ ко всем нужным файлам. Вам, вероятно, не нужно заходить так далеко, как это , а просто установите правильные разрешения для файлов / каталогов. Вам также необходимо убедиться, что сценарии запуска не делают ничего хитрого, вроде изменений ulimit (как всегда кажется, что mysql).

Возможности Linux

setcap и getcap позволяют изменять или просматривать возможности cap_net_bind_service для исполняемого файла. Это будет действовать для всех, кто запускает двоичный файл.

setcap cap_net_bind_service=+ep /usr/sbin/nginx

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

Системные настройки Freebsd

Настройки зарезервированного порта являются глобальными для системы

sysctl net.inet.ip.portrange.reservedhigh=0
sysctl net.inet.ip.portrange.reservedlow=0

Привилегии Solaris

Solaris обеспечивает точный контроль привилегий на уровне пользователя. Это привилегии для apache, но они, вероятно, будут работать и для nginx.

/usr/sbin/usermod -K defaultpriv=basic,proc_exec,proc_fork,net_privaddr nginx
6
27.01.2020, 19:35

Большинство серверов (Apache, Nginx и т. Д.) Имеют родительский процесс, принадлежащий пользователю root, который затем разветвляет копии рабочих узлов с использованием менее авторизованного пользователя. В данном случае это www-data .

Пример

Если вы посмотрите на файл конфигурации nginx , /etc/nginx/nginx.conf , вы заметите такие строки:

user nginx;
worker_processes 2; #change to the number of your CPUs/Cores
worker_rlimit_nofile 8192;

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

Безопасность

Раскрытие сервисов с корневым доступом часто упоминается как потенциальная небезопасность. Однако вам часто приходится быть пользователем root, чтобы подключиться к портам в диапазоне от 1 до 1024, поэтому вы действительно ничего не можете сделать, если хотите, чтобы сервер прослушивал, скажем, порты 80 или 443.

Также, если служба в порядке. Написанный и настроенный должным образом, он сам по себе не обязательно наносит ущерб вашей безопасности. Приложения, которые работают поверх Apache и Nginx, на самом деле являются истинными источниками атак переполнения буфера или внедрения SQL-сервера, поскольку приложения - это службы, которые открывают точки входа для ввода искаженных данных в стек вашего сервера.

Сами по себе Apache и Nginx обычно не принимают никаких вводимых данных, кроме методов GET / POST, которые они принимают.

17
27.01.2020, 19:35

Теги

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