Berechtigungen in Go (v1.7) löschen
Bei der Aufgabe, einen benutzerdefinierten Webserver in Golang zu erstellen, ist häufig eine Bindung erforderlich privilegierte Ports wie Port 80. Um die Sicherheit zu gewährleisten, ist es wichtig, Root-Rechte nach der Bindung an solche Ports aufzugeben. In diesem Artikel wird das Problem des Entzugs von Berechtigungen in Go untersucht und eine Lösung bereitgestellt.
In früheren Versionen von Go würde die Verwendung von syscall.SetUid() zum Entzug von Berechtigungen „Nicht unterstützt“ zurückgeben. Alternativ könnte man Port 80 mit iptables auf einen nichtprivilegierten Port umleiten. Diese Lösung birgt jedoch Sicherheitslücken, indem sie Nicht-Root-Prozessen ermöglicht, sich als Webserver auszugeben.
Die Lösung liegt in der Verwendung einer Kombination aus Gos Netzwerk- und Systemaufruffunktionen. Nachdem wir den privilegierten Port geöffnet und die UID ermittelt haben, können wir den gewünschten Benutzer identifizieren, seine UID erhalten und sowohl die UID als auch die GID mithilfe der Glibc-Funktionen setgid() und setuid() festlegen. Es ist wichtig, diesen Code sofort nach dem Binden des Ports, aber vor dem Aufruf von http.Serve auszuführen.
Das bereitgestellte Code-Snippet demonstriert diesen Ansatz. Es lädt zunächst die erforderlichen TLS-Zertifikate und lauscht an einem privilegierten Port. Wenn die Anwendung als Root ausgeführt wird, erfolgt ein Downgrade auf einen angegebenen Benutzer, indem die UID und GID mithilfe von Glibc-Aufrufen festgelegt werden. Anschließend wartet es auf eingehende Anfragen und stellt den Webinhalt bereit.
Diese Lösung geht effektiv auf die Notwendigkeit ein, Berechtigungen in Go-Anwendungen zu verlieren. Es ermöglicht die Erstellung sicherer und robuster benutzerdefinierter Webserver ohne Kompromisse bei der Sicherheit.
Das obige ist der detaillierte Inhalt vonWie kann ich Berechtigungen nach der Bindung an privilegierte Ports in einem Go-Webserver sicher entziehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!