Privilegienverlust mit Golang in v1.7
Problem:
Entwerfen einer benutzerdefinierten Website Der Server in Go erfordert anfängliche Root-Rechte, um sich an Port 80 zu binden. Es ist jedoch wünschenswert, die Root-Rechte so schnell wie möglich aufzugeben möglich.
Hintergrund:
Gos syscall.SetUid() ist aufgrund von Problem Nr. 1435 nicht verfügbar, was das direkte Löschen von Berechtigungen unpraktisch macht. Alternative Methoden wie IPtables führen zu Sicherheitslücken.
Lösung:
Die Go-Sprache bietet eine Lösung für dieses Problem, ohne auf externe Tools oder Workarounds angewiesen zu sein. Durch die Implementierung von benutzerdefiniertem Code können wir eine Bindung an den erforderlichen Port herstellen und anschließend Root-Rechte verlieren.
Implementierung:
Vorteile:
Dieser Ansatz ermöglicht eine flexible Rechteverwaltung. Beispielsweise kann die Anwendung während der Entwicklung ohne zusätzliche Konfigurationen auf einem Nicht-Root-Benutzer und einem hohen Port ausgeführt werden.
Beispielcode:
package main import ( "crypto/tls" "log" "net/http" "os/user" "strconv" "syscall" ) func main() { //... (continued) }
Indem Sie diese befolgen Mit diesen Schritten können Sie Berechtigungen in Ihrer Go-Anwendung effektiv aufheben und so eine sichere und benutzerspezifische Ausführungsumgebung gewährleisten.
Das obige ist der detaillierte Inhalt vonWie kann ich Root-Rechte nach der Bindung an Port 80 in einem Go-Webserver sicher entziehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!