Daher wollte ich einen Node-Server auf Port 80 ausführen, aber ich wollte nicht den gesamten Prozess mit Root-Berechtigungen ausführen. Aus Sicherheitsgründen hielt ich dies für das Beste.
Also dachte ich, eine gute Lösung wäre, als root zu verwenden:
su - (myuser) -c 'Node Forever Script ausführen'
Ich erhalte jedoch EACCESS-Fehler, aber es ist in Ordnung, das Skript direkt als root auszuführen. Ich höre, wie andere dasselbe tun und für sie arbeiten. Kann es sein, dass ich etwas anderes mache?
Gibt es eine bessere Strategie, um dies zu tun, den Port für Root-Berechtigungen zu öffnen und dann die Root-Berechtigungen zu löschen, sobald die Anwendung ausgeführt wird?
Antworten:
Ja, das kann man. Sehen Sie sich diesen Blog-Beitrag an, der besser erklärt, als ich kann.
https://thomashunter.name/blog/drop-root-privileges-in-node-js/
Ich kopiere den entsprechenden Code hierher, falls der Blog nicht mehr verfügbar ist
quelle
su - <user>
wechselt zu,<user>
bevor Sie etwas anderes tun, sodass der NodeJS-Server als Benutzer gestartet wird und keine Ahnung hat, wie Root densu
Befehl ausführt. Da Benutzer keine privilegierten Ports verwenden dürfen, wird dies niemals funktionieren.Es gibt zwei Möglichkeiten, dies zu umgehen, die ich mir auf Anhieb vorstellen kann:
Verwenden einer Dateifunktion , mit der nicht privilegierte Benutzer privilegierte Ports öffnen können. Obwohl sie in diesem Fall im Allgemeinen nicht mit Skripten arbeiten, sollten sie dies tun, da Sie, soweit ich weiß, den Server mit starten
node <filename>
. (Korrigieren Sie mich, wenn ich falsch liege.)Verwenden eines Reverse-Proxys wie NGINX , der als Root vor dem Anwendungsserver ausgeführt wird. In diesem Fall stellen Benutzer eine direkte Verbindung zu NGINX her, das dann die Verbindungen zum Anwendungsserver weiterleitet. Sie können jedoch leichter mehrere Server / Instanzen ausführen und NGINX-Cache-Ressourcen verwenden. Dies ist in der Regel der bevorzugte Ansatz für die Bereitstellung von Anwendungsservern.
quelle
Wenn Sie Gnu / Linux verwenden, können Sie Funktionen verwenden, um der Anwendung die Möglichkeit zu geben, privilegierte Ports zu öffnen, und keine anderen Funktionen (root bietet alle Funktionen).
Eine sehr grundlegende Einführung finden Sie hier: https://unix.stackexchange.com/questions/101263/was-ist-die-verschiedene- Wege-zum- Festlegen-der- Dateiberechtigungen-etc- on- gnu- linux
[edit:] Die GNU / Linux-Fähigkeit, nach der Sie suchen, ist cap_net_bind_service. Verwenden Sie unter Solaris PRIV_NET_PRIVADDR. Ausführlichere Informationen finden Sie unter man-Funktionen (7) (Linux) oder man-Berechtigungen (5) (Solaris).
quelle