Führen Sie nginx als Benutzer ohne Rootberechtigung aus


17

Ich habe diesen Prozess befolgt, um nginx auf meinem Ubuntu 10.04 Lucid Server zu installieren: http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Nach dem Erstellen eines Init-Skripts zum Starten von Nginx und dem anschließenden Aufrufen von /etc/init.d/nginx start habe ich mich verlaufen. Als ich das tat, bekam ich den folgenden Fehler:

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)

Ich kann es nur ausführen, wenn ich es verwende sudound der Prozess so abläuft root, wie ich es nicht möchte.

Ich habe chowndas gesamte Verzeichnis ( chown -R nginx:nginx /opt/nginx) und auch chmod -R 755das Verzeichnis.

Das Hinzufügen der userDirektive, wie von CS3 vorgeschlagen, gibt mir ebenfalls diesen Fehler, jedoch mit einer zusätzlichen Zeile.

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)

Irgendwelche Ideen?


and I've also chmod -R 755 the directory as wellMach so weiter und du wirst irgendwann einen Preis dafür zahlen. Es ist beängstigend mitzuerleben, wie viele Leute im Internet dies als erste Anlaufstelle für die "Behebung" eines Problems empfehlen. Unix gibt kein freundliches Feedback, wenn Sie etwas Schwachsinniges tun.

Antworten:


11

Zunächst sollen Init-Skripte ausgeführt werden

sudo /etc/init.d/name

wenn Sie nicht als root angemeldet sind (wenn der angemeldete Benutzer sudo aktiviert ist)

Zweitens: Wenn Sie sudo /etc/init.d/nginx start ==> ausführen, wird der Master-Nginx-Prozess als Root- und Worker-Prozess als der Benutzer ausgelöst, den Sie in Ihrer Benutzeranweisung nginx.conf angegeben haben (z. B. www-data).

Können Sie überprüfen, ob Ihr gesamter Prozess unter nginx von root ausgeführt wird, wenn Sie sudo /etc/init.d/nginx starten?

mit

ps aux | grep [n]ginx

z.B.

Bildbeschreibung hier eingeben

Vorschlag: Ubuntu 10.04 LTS hat ausgezeichnete Ubuntu-Paket-Unterstützung vom Nginx-Team. Warum sollten Sie sich also die Mühe machen, von der Quelle aus zu installieren, wenn Sie kein benutzerdefiniertes Modul in nginx benötigen?

Konsultieren Sie hier

Das Binärpaket enthält bereits so ziemlich alle benötigten Module

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

Der Worker-Prozess, den ich habe, hat eine ID, keinen Namen. Gibt es eine Chance, dass dies die Nginx-Benutzer-ID ist? Ich bin ziemlich neu in Ubuntu. Ich wusste nicht, dass das Apt-Paket alle diese Flags aktiviert hatte. Wie haben Sie das herausgefunden?
John

Haben Sie überprüft, ob der in Ihrer nginx.conf angegebene Benutzer existiert oder nicht? Offizielles Repo hat diesen Nginx nicht! Bitte benutzen Sie PPA von der angegebenen URL
kaji

Ich habe einen anderen Benutzernamen verwendet, der länger als 8 Zeichen ist. Deshalb wird die Benutzer-ID angezeigt, oder?
John

Ja, das ist ein Szenario
Kaji

1
Nginx-V ist Ihre Antwort
Kaji

1

Fügen Sie die Benutzeranweisung in die Datei nginx.conf ein

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


Entschuldigung, könnten Sie genauer sein? Ich habe das schon vergebens getan.
John

Für die Ausführung zwischen den Ports 1 bis 1024 sind Root-Berechtigungen erforderlich. Die Benutzeranweisung stellt sicher, dass nginx aus Sicherheitsgründen als Benutzer ohne Rootberechtigung ausgeführt wird.
Shyam Sundar CS

Damit die Protokolle geöffnet und geschrieben werden können, muss dem Benutzer, von dem aus Sie versuchen, das Verzeichnis nginx angezeigt werden.
Shyam Sundar CS

1

Meine 5 Kopeken dazu

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

.. gibt dir alle anderen Pfade, die du in der benutzerdefinierten Konfiguration oder mit der Option "-g" überschreiben solltest.


Der folgende Befehl zeigt alle Zeilen der Ausgabe an und hebt diejenigen hervor, die den Begriff 'path' enthalten:nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards

0

In meinem Fall fehlte in meiner nginx.conf ein Dateiverweis:

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

Wurde: error_log warn;

Also habe ich versehentlich den Verweis /var/log/nginx/error.log gelöscht, wodurch die Fehlermeldung "Berechtigung verweigert" ausgelöst wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.