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?


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

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


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”.


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ń.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.