Uruchom nginx jako użytkownik inny niż root

17

Śledziłem ten proces, instalując nginx na moim Ubuntu 10.04 Lucid Server http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Zgubiłem się po stworzeniu skryptu init do uruchomienia nginx, a następnie wywołaniu /etc/init.d/nginx start. Gdy to zrobiłem, otrzymałem następujący błąd:

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)

Jedynym sposobem, w jaki mogę go uruchomić, jest użycie sudogo i uruchomienie procesu as root, czego nie chcę.

Byłem chowncały katalog ( chown -R nginx:nginx /opt/nginx) i mam również chmod -R 755katalog.

Dodanie userdyrektywy zgodnie z sugestią CS3 również daje mi ten błąd, ale z dodatkową linią.

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)

Jakieś pomysły?

Jan
źródło
and I've also chmod -R 755 the directory as wellRób to dalej, a ostatecznie zapłacisz za to cenę. Przerażające jest obserwowanie, ilu ludzi jest w Internecie, sugerując to jako pierwszy port do „rozwiązania” każdego problemu. Unix nie da przyjaznej opinii, jeśli zrobisz coś kretyńskiego.

Odpowiedzi:

11

Przede wszystkim powinny być uruchamiane skrypty init

sudo /etc/init.d/name

gdy nie jesteś zalogowany jako root (gdy zalogowany użytkownik jest włączony sudo)

Po drugie, po uruchomieniu sudo /etc/init.d/nginx start ==> uruchamia główny proces nginx jako proces root i proces roboczy jako użytkownik określony w dyrektywie użytkownika nginx.conf (np. Www-data)

Czy możesz potwierdzić, czy cały proces w Nginxie jest uruchamiany przez roota podczas uruchamiania sudo /etc/init.d/nginx?

z

ps aux | grep [n]ginx

na przykład.

wprowadź opis zdjęcia tutaj

Sugestia: Ubuntu 10.04 LTS ma doskonałą obsługę pakietów ubuntu od zespołu nginx. Po co więc męczyć się instalowaniem ze źródła, jeśli nie masz wymagań dotyczących niestandardowego modułu wewnątrz nginx?

Skonsultuj się tutaj

Pakiet binarny zawiera już bardzo potrzebne moduły

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
kaji
źródło
Proces roboczy, który mam, ma identyfikator, a nie nazwę. Czy jest jakaś szansa, że ​​jest to identyfikator użytkownika nginx? Jestem całkiem nowy w Ubuntu. Nie wiedziałem, że pakiet apt ma włączone wszystkie te flagi. Jak się tego dowiedziałeś?
Jan
sprawdziłeś, czy użytkownik określony w pliku nginx.conf istnieje, czy nie? Oficjalne repo nie ma tego Nginx! Proszę używać PPA z określonego adresu URL
kaji
Użyłem innej nazwy użytkownika, która jest dłuższa niż limit 8 znaków. Właśnie dlatego wyświetla się identyfikator użytkownika, prawda?
Jan
tak, to jest jeden scenariusz
kaji
1
nginx -V to twoja odpowiedź
kaji
1

Dodaj dyrektywę użytkownika w pliku nginx.conf

Odniesienie: http://wiki.nginx.org/CoreModule#user

Shyam Sundar CS
źródło
Przepraszam, czy mógłbyś być bardziej szczegółowy? Zrobiłem to już bezskutecznie.
Jan
Uruchamianie czegokolwiek pomiędzy portami od 1 do 1024 wymaga uprawnień roota. Dyrektywa użytkownika zapewnia, że ​​nginx działa jako użytkownik inny niż root ze względów bezpieczeństwa.
Shyam Sundar CS
Ponadto, aby dzienniki mogły być otwierane i zapisywane, katalog nginx powinien zostać udostępniony użytkownikowi, z którego próbujesz uruchomić.
Shyam Sundar CS
1

Moje 5 kopek na ten temat

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

.. dostaniesz wszystkie inne ścieżki, które powinieneś zastąpić w niestandardowej konfiguracji lub z opcją „-g”.

gaRex
źródło
Następujące polecenie pokazuje wszystkie wiersze z danych wyjściowych i wyróżnia te zawierające termin „ścieżka”:nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards
0

W moim przypadku brakowało odwołania do pliku w moim pliku nginx.conf:

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

Stał się: error_log warn;

Tak więc przypadkowo usunąłem odwołanie /var/log/nginx/error.log, co spowodowało komunikat o błędzie odmowy uprawnień.

ilker
źródło