it-swarm.com.de

Nginx als Benutzer ohne Rootberechtigung ausführen

Ich habe Nginx mit Ansible installiert. Um auf Centos7 zu installieren, habe ich das yum-Paket verwendet, so dass es standardmäßig als root user ausgeführt wurde. Ich möchte, dass es in der Centos-Box als anderer Benutzer (ex - nginx user) gestartet und ausgeführt wird. Wenn ich versuche, es mit einem anderen Benutzer auszuführen, erhalte ich die folgende Fehlermeldung:

Job für nginx.service ist fehlgeschlagen, da der Steuerungsprozess mit .__ beendet wurde. Fehlercode. Siehe "systemctl status nginx.service" und "journalctl -xe" für Details.

Ich weiß, dass es nicht ratsam ist, als root zu laufen. Wie kann ich das umgehen und nginx als Benutzer ohne Rootberechtigung ausführen? Vielen Dank

5
Sarith

Fügen Sie Folgendes in Ihrem /etc/nginx/nginx.conf hinzu:

user nginx;

Sie sollten den Benutzer erstellen und rekursiv Berechtigungen für die Webroot-Verzeichnisse erteilen.

Auf diese Weise wird nur der Master-Prozess als root ausgeführt. Weil: Nur Root-Prozesse können Ports unter 1024 überwachen. Ein Webserver wird normalerweise an Port 80 und/oder 443 ausgeführt. Das bedeutet, dass er als Root gestartet werden muss.

So führen Sie den Master-Prozess als Benutzer ohne Rootberechtigung aus:

Ändern Sie den Besitz von Folgendem:

  • fehlerprotokoll 
  • access_log
  • pid
  • client_body_temp_path
  • fastcgi_temp_path
  • proxy_temp_path
  • scgi_temp_path
  • uwsgi_temp_path

Ändern Sie die Listen-Direktiven in Ports über 1024, melden Sie sich als gewünschten Benutzer an und führen Sie nginx mit nginx -c /path/to/nginx.conf aus.

11
Farhad Farahi

Für den Fall, dass es zum Testen/Debuggen hilfreich ist, führe ich manchmal eine Nginx-Instanz als nicht privilegierter Benutzer auf meinem Debian (Stretch) -Laptop aus.

Ich verwende eine minimale Konfigurationsdatei wie folgt:

worker_processes 1;
error_log stderr;
daemon off;
pid nginx.pid;

events {
  worker_connections  1024;
}

http {
  include             /etc/nginx/mime.types;
  default_type        application/octet-stream;

  sendfile on;

  keepalive_timeout   65;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
  ssl_prefer_server_ciphers on;
  access_log access.log;
  server {
    listen            8080;
    server_name       localhost;

    location / {
      include /etc/nginx/uwsgi_params;
      uwsgi_pass localhost:8081;
    }
  }
}

und ich starte den Prozess mit:

/usr/sbin/nginx -c nginx.conf -p $PWD
1
David Douard