Запустите nginx как пользователь без полномочий root


17

Я следовал этому процессу, чтобы установить nginx на свой Ubuntu 10.04 Lucid Server http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Я заблудился после создания сценария инициализации для запуска nginx и затем вызова /etc/init.d/nginx start. Когда я это сделал, я получил следующую ошибку:

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:17:27 [emerg] 859#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

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

У меня есть chownвесь каталог ( chown -R nginx:nginx /opt/nginx), а также chmod -R 755каталог.

Добавление userдирективы, предложенной CS3, также дает мне эту ошибку, но с дополнительной строкой.

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:48:34 [warn] 1606#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /opt/nginx/conf/nginx.conf:2
2012/03/16 18:48:34 [emerg] 1606#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

Есть идеи?


and I've also chmod -R 755 the directory as wellПродолжайте делать это, и вы в конечном итоге заплатите за это. Страшно наблюдать, как много людей в Интернете предлагают это в качестве первого порта для решения любой проблемы. Unix не даст дружескую обратную связь, если вы сделаете что-то идиотское.

Ответы:


11

Прежде всего, сценарии инициализации должны быть запущены

sudo /etc/init.d/name

когда вы не вошли в систему как root (когда вошедший в систему пользователь включен sudo)

Во-вторых, когда вы запускаете sudo /etc/init.d/nginx start ==>, он запускает основной процесс nginx как root и рабочие процессы как пользователь, которого вы указали в пользовательской директиве nginx.conf (например, www-data)

Можете ли вы подтвердить, что все ваши процессы в nginx запускаются пользователем root при запуске sudo /etc/init.d/nginx start?

с

ps aux | grep [n]ginx

например.

введите описание изображения здесь

Предложение: Ubuntu 10.04 LTS имеет отличную поддержку пакетов ubuntu от команды nginx. Итак, зачем беспокоиться об установке из исходного кода, если у вас нет требований к пользовательскому модулю внутри nginx?

Проконсультируйтесь здесь

Бинарный пакет уже поставляется с довольно необходимыми модулями

nginx version: nginx/1.0.12
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-upstream-fair

У рабочего процесса, который у меня есть, есть идентификатор, а не имя. Есть ли шанс, что это идентификатор пользователя nginx? Я довольно новичок в Ubuntu. Я не знал, что в пакете apt были включены все эти флаги. Как ты это узнал?
Джон

Вы проверили, существует ли пользователь, которого вы указали в nginx.conf, или нет? Официальный репо не имеет этого Nginx! Пожалуйста, используйте PPA с указанного URL
kaji

Я использовал другое имя пользователя, длина которого превышает 8 символов. Вот почему отображается идентификатор пользователя, верно?
Джон

да, это один сценарий
Кадзи

1
nginx -V ваш ответ
Кадзи

1

Добавьте директиву пользователя внутри nginx.conf

Ссылка: http://wiki.nginx.org/CoreModule#user


Извините, не могли бы вы быть более конкретным? Я сделал это уже безрезультатно.
Джон

Для запуска чего-либо между портами с 1 по 1024 требуются права суперпользователя. Пользовательская директива гарантирует, что nginx работает от имени пользователя root по соображениям безопасности.
Shyam Sundar CS

Кроме того, для открытия и записи журналов должен быть выбран каталог nginx для пользователя, от которого вы пытаетесь запустить.
Shyam Sundar CS

1

Мои 5 копеек по этому поводу

nginx -V 2>&1 | sed 's/ --/\n--/g' | grep path

.. даст вам все другие пути, которые вы должны переопределить в пользовательском конфиге или с опцией "-g".


Следующая команда показывает все строки из вывода и выделяет те, которые содержат термин «путь»:nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards

0

В моем случае отсутствовала ссылка на файл в моем nginx.conf:

error_log /var/log/nginx/error.log warn;

Стало: error_log предупреждать;

Поэтому я случайно удалил ссылку /var/log/nginx/error.log, которая вызвала сообщение об ошибке «Отказано в доступе».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.