Wie kann ich Root-Rechte nach der Bindung an Port 80 in einem Go-Webserver sicher entziehen?

DDD
Freigeben: 2024-11-21 08:43:10
Original
292 Leute haben es durchsucht

How Can I Safely Drop Root Privileges After Binding to Port 80 in a Go Web Server?

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:

  1. Binden an den gewünschten Port.
  2. Überprüfen Sie die aktuelle Benutzer-ID (UID).
  3. Wenn die UID 0 (Root) ist, identifizieren Sie den beabsichtigten Benutzer und die zugehörige UID und GID.
  4. Verwenden Sie die Glibc-Aufrufe setuid() und setgid(), um die UID und GID des Prozesses entsprechend zu ändern.

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)
}
Nach dem Login kopieren

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage