Я установил сервер nginx. Я только что проверил порты прослушивания и увидел следующее:
$ sudo lsof -nP -i | grep LISTEN
sshd 614 root 3u IPv4 7712 0t0 TCP *:22 (LISTEN)
nginx 822 root 7u IPv4 8745 0t0 TCP *:80 (LISTEN)
nginx 827 www-data 7u IPv4 8745 0t0 TCP *:80 (LISTEN)
nginx 828 www-data 7u IPv4 8745 0t0 TCP *:80 (LISTEN)
nginx 829 www-data 7u IPv4 8745 0t0 TCP *:80 (LISTEN)
nginx 830 www-data 7u IPv4 8745 0t0 TCP *:80 (LISTEN)
.
.
.
И мне просто интересно, почему четыре пользователя nginx запускаются от имени пользователя «www-data», а один - от имени пользователя root?
Ответы:
Процесс, который вы заметили, является основным процессом, который запускает все остальные процессы nginx. Этот процесс запускается сценарием инициализации, который запускает nginx. Причина, по которой этот процесс выполняется от имени пользователя root, заключается в том, что вы просто запустили его как пользователь root! Вы можете запустить его как другой пользователь, но вам нужно будет убедиться, что все ресурсы, необходимые nginx, доступны для этого пользователя. Обычно это будет / var / log / nginx и pid-файл в / var / run /.
Самое главное; Только корневые процессы могут прослушивать порты ниже 1024. Веб-сервер обычно работает на порте 80 и / или 443. Это означает, что его нужно запускать с правами root.
В заключение, главный процесс, запускаемый пользователем root, является полностью нормальным и в большинстве случаев необходим для нормальной работы.
Изменить: Запуск чего-либо от имени пользователя root несет в себе скрытую угрозу безопасности. Обычно разработчики этого вида программного обеспечения много знают о векторах атак и очень стараются выполнить как можно меньше, чем root. В конце концов, вы просто должны верить, что программное обеспечение хорошего качества.
Если вы все еще чувствуете себя неловко, есть способ запустить nginx от имени другого пользователя и по-прежнему использовать порты ниже 1024. Вы можете использовать iptables для перенаправления всего входящего трафика через порт 80 на другой порт, например 8080, и прослушивать nginx на этом порту.
источник
iptables
это, вероятно, излишне. Я бы увидел ответ @ slm.iptables
могут привести к путанице.Большинство серверов (Apache, Nginx и т. Д.) Имеют родительский процесс, которым владеет root, который затем копирует копии рабочих узлов, используя менее авторизованного пользователя. В этом случае это
www-data
.пример
Если вы посмотрите на
nginx
конфигурационный файл/etc/nginx/nginx.conf
, вы заметите такие строки:У большинства серверов есть опции, подобные этой, которые определяют, каким пользователем запускать подчиненные узлы и сколько их.
Безопасность
Предоставление услуг с корневым доступом часто упоминается как потенциальная небезопасность. Однако вам часто нужно иметь права root для привязки к портам в диапазоне от 1 до 1024, так что на самом деле вы ничего не можете сделать, если хотите, чтобы сервер прослушивал, скажем, порты 80 или 443.
Также, если служба хорошо написана и настроена правильно, она сама по себе не обязательно наносит ущерб вашей безопасности. Приложения, которые работают поверх Apache & Nginx, действительно являются истинными источниками переполнения буфера или атак с использованием SQL-сервера, поскольку приложения - это сервисы, которые предоставляют точки входа для искаженных данных, которые будут внедрены в стек вашего сервера.
Apache & Nginx, как правило, не принимают никаких входных данных, кроме методов GET / POST, которые они принимают.
источник
Это способ упаковки приложения. На большинстве * nix настройкой по умолчанию является непривилегированный пользователь, который не может прослушивать порт <1024, а веб-серверы используют 80 и 443.
Linux 2.2+, Solaris 10+ и FreeBSD позволяют пользователям без полномочий root прослушивать порты ниже 1024, но только по умолчанию. Большинство согласилось на использование,
root
поэтому оно остается в использовании.Помимо доступа к привязке к привилегированному порту, вам нужно убедиться, что у пользователя, работающего с nginx, есть доступ ко всем нужным файлам. Вам, вероятно , не нужно заходить так далеко, но просто установите правильное разрешение для файлов / каталогов. Вы также должны убедиться, что загрузочные скрипты не делают ничего хитрого, как
ulimit
изменения (как всегда кажется mysql).Возможности Linux
setcap
иgetcap
позволит вам изменить или просмотретьcap_net_bind_service
возможность для исполняемого файла. Это будет действовать для всех, кто исполняет двоичный файл.SELinux предоставляет возможность конфигурировать и контролировать возможности на уровне пользователя.
Настройки системы Freebsd
Настройки зарезервированного порта являются глобальными для системы
Привилегии Solaris
Solaris обеспечивает точный контроль привилегий на уровне пользователя. Это привилегии для apache, но они, вероятно, будут работать и для nginx.
источник
Я хотел бы добавить к каждому остальное ответы. Хотя nginx запускается от имени пользователя root, на самом деле он не работает от имени пользователя root. Пользователь (nginx, www-data и т. Д.), С которым он на самом деле работает, обычно является закрытым / закрытым логином (вы не можете войти с ним, доступны только определенные файлы). Это один из плюсов использования Linux для веб-серверов, в отличие от Windows. Этот процесс называется a
fork
( вы можете найти более подробную информацию в этой статье Википедии ), и он также используетsetuid
и / илиsetgid
( что также объясняется в статье Википедии)) изменить пользователя и / или группу. В безопасной настройке хакер не сможет получить доступ к родительскому процессу и использовать корневую учетную запись. Это не всегда так, поскольку хакер может использовать какой-либо эксплойт для получения root-доступа (в nginx 1.4.0 и ниже была уязвимость, которая позволяла хакерам получить root-доступ).источник