Heim > Backend-Entwicklung > Golang > Wie kann ich Berechtigungen nach der Bindung an privilegierte Ports in einem Go-Webserver sicher entziehen?

Wie kann ich Berechtigungen nach der Bindung an privilegierte Ports in einem Go-Webserver sicher entziehen?

Barbara Streisand
Freigeben: 2024-11-27 02:29:13
Original
581 Leute haben es durchsucht

How Can I Securely Drop Privileges After Binding to Privileged Ports in a Go Web Server?

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage