Golang löscht Privilegien (v1.7)
Beim Versuch, einen benutzerdefinierten Webserver zu erstellen, standen Sie vor der Herausforderung, Privilegien zu streichen während der Bindung an Port 80, der Root-Zugriff erfordert. Während alternative Lösungen möglicherweise eine Umleitung von Port 80 beinhalten, birgt dies Sicherheitsrisiken. Wie können Sie dieses Problem effektiv lösen?
Der bereitgestellten Antwort zufolge bietet Go eine umfassende Lösung, indem es Ihnen ermöglicht, den Port zu öffnen, die UID zu erkennen und, wenn sie 0 ist, nach dem gewünschten Benutzer zu suchen und ihn abzurufen UID. Anschließend können Sie Glibc-Aufrufe verwenden, um die UID und GID des Prozesses festzulegen.
Es ist wichtig zu betonen, wie wichtig es ist, den Setuid-Code unmittelbar nach der Bindung des Ports aufzurufen. Im Gegensatz zu http.ListenAndServe(TLS)? Um die Hilfsfunktion zu nutzen, müssen Sie Ihren net.Listener unabhängig einrichten und die Setuid-Post-Port-Bindung aufrufen, jedoch vor der Initialisierung von http.Serve.
Das bereitgestellte Code-Snippet demonstriert diesen Ansatz effektiv. Es umfasst eine SSL-Implementierung und ermöglicht die Ausführung im „Entwicklungs“-Modus mit einer Nicht-Root-UID auf einem hohen Port, ohne dass Komplikationen auftreten. Denken Sie daran, die Konfigurationsdatei zu personalisieren, indem Sie Adresse, Port, Benutzer, Gruppe und TLS-Dateinamen festlegen.
Das obige ist der detaillierte Inhalt vonWie können Go-Anwendungen nach der Bindung an Port 80 sicher Privilegien verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!