Ich möchte einen Webserver auf meinem Mac als Nicht-Root-Prozess ausführen. Normalerweise können nur Root-Prozesse an Port 80 (oder an einen beliebigen Port unter 1024) gebunden werden.
Kann ich Port 80 gezielt öffnen, damit Nicht-Root-Prozesse darauf lauschen können?
Antworten:
Dies ist konstruktionsbedingt schwierig. Wenn Sie keinen Root-Zugriff auf Ihren Computer haben, funktioniert keines der folgenden Verfahren, da für die Einrichtung der Änderungen Root erforderlich ist. Einmal geändert, haben Userspace-Programme jedoch Zugriff ohne root.
Um dies zu erreichen, gibt es zwei gängige Methoden. Welche Sie auswählen, hängt davon ab, warum Sie versuchen, die Einschränkung zu umgehen:
Zeigen Sie mit Port 80 auf einen anderen Port, z. B. 8080
Indem Sie Ihren Computer so konfigurieren, dass er den gesamten Datenverkehr von Port 80 an Port 8080 oder einen beliebigen Port Ihrer Wahl weiterleitet, können Sie den Benutzerbereichsservern erlauben, Root-Berechtigungsports in dem Bereich zu erhalten, auf den sie Zugriff haben.
Der Vorgang ist unkompliziert:
( Quelle )
Dies ist eine vorübergehende Änderung und wird zurückgesetzt, sobald Sie neu starten oder wie in der letzten Zeile angegeben leeren.
Sie können die Änderung permanent machen oder den Befehl als Startzeile vor dem Starten des Servers hinzufügen, was aus Sicherheitsgründen wahrscheinlich sicherer ist.
Verwenden Sie Authbind
Authbind wurde speziell entwickelt, um einem Programm den Zugriff auf Ports niedrigerer Ebene zu ermöglichen, ohne ihm vollständigen Root-Zugriff zu gewähren.
Es gibt einen OS X-Port:
https://github.com/Castaglia/MacOSX-authbind
Möglicherweise ist es immer noch auf IPv4-Datenverkehr beschränkt. Möglicherweise müssen Sie jedoch zusätzliche Untersuchungen durchführen, um festzustellen, ob der Datenverkehr Ihren Anforderungen entspricht.
quelle
launchd
.plist
... `"ProgramArguments": [ "path/to/authbind", "/usr/bin/php", "-c", "/www/.router.ini", "-S", "0.0.0.0:80", "-t", "/www", "/www/.router.php"]
Woohoo!ipfw
. Diese Übersicht beschreibt eine alternative Lösung mitpf
.Sie können
ncat
Datenverkehr von einem Webserver weiterleiten, der an einem anderen Port ausgeführt wird:Dadurch wird der Datenverkehr auf Port 80 an localhost: 1234 weitergeleitet. Dies ist ein bisschen verwunderlich, aber ich würde es nirgendwo anders als beim schnellen Testen und definitiv nicht in der Produktion verwenden.
Beachten Sie, dass dies nicht zulässt, dass ein Nicht-Root-Prozess daran gebunden wird. Wenn Sie jedoch einen Port auswählen, an den der Prozess gebunden werden kann (in diesem Beispiel 1234), sieht es so aus, als wäre er an Port 80 gebunden Weiterleiten von Port 80 an Port 1234 mit einer Firewall, jedoch auf einer viel temporäreren Basis.
quelle
ncat
kommt mitnmap
dem über Mac Ports mit installiert werden kannsudo port install nmap
. MacPorts selbst kann über macports.org/install.php installiert werden .Sie können ssh auch für die Portweiterleitung verwenden. Wenn auf einem Server 8080 ausgeführt wird, können Sie den Datenverkehr von Port 80 weiterleiten. Ich verwende hier ein Skript, das den nativen Apache anhält, wenn dieser ausgeführt wird, und den Datenverkehr weiterleitet:
forward8080to80.command:
quelle
Sie sollten in der Lage sein, Port 80 auf Ihrem Router zu öffnen und auf die lokale IP-Adresse Ihres Webservers zu verweisen. Aktivieren Sie dann auf Ihrem Mac die Webfreigabe in den Systemeinstellungen> Freigabeeinstellungen und zeigen Sie auf das Verzeichnis Ihrer Wahl. Dies hat bei mir in der Vergangenheit bis zur Umstellung auf 10.6 Server geklappt.
quelle