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?

John
quelle
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
kaji
quelle
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

Shyam Sundar CS
quelle
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.

gaRex
quelle
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.

ilker
quelle