Externe Befehle unter einem anderen Benutzer mit Go ausführen
In der riesigen Landschaft der Systemprogrammierung ist die Möglichkeit, externe Befehle unter der Schirmherrschaft auszuführen eines anderen Benutzers ist oft unabdingbar. Während herkömmliche Methoden möglicherweise die Nutzung der Dienstprogramme „su“ oder „bash“ beinhalten, kann ein effizienterer und reiner Go-basierter Ansatz erreicht werden.
Um diese Aufgabe zu erfüllen, bietet das Paket os/exec einen umfassenden Satz von Funktionen zur Verwaltung der externen Prozessausführung. Sein Standardverhalten führt jedoch Befehle unter den Berechtigungen des aktuellen Prozesses aus. Um Befehle als anderer Benutzer auszuführen, tauchen wir in den Bereich der syscall.Credential-Struktur ein.
Durch Hinzufügen einer Credential-Struktur zum SysProcAttr-Feld des Cmd-Objekts können wir die Anmeldeinformationen (d. h. UID und) angeben GID), unter der der externe Befehl ausgeführt werden soll. Der folgende Codeausschnitt demonstriert diesen Ansatz:
package main import ( "fmt" "os/exec" "strconv" "syscall" ) func main() { // Capture the UID of the desired user u, err := user.Lookup("another_user") if err != nil { fmt.Printf("%v", err) return } // Parse the UID into an integer and construct the Credential uid, err := strconv.Atoi(u.Uid) if err != nil { fmt.Printf("%v", err) return } credential := &syscall.Credential{Uid: uid} // Compose the command command := exec.Command("ls", "-l") // Configure the command's SysProcAttr with the Credential command.SysProcAttr = &syscall.SysProcAttr{} command.SysProcAttr.Credential = credential // Execute the command and process its output output, err := command.CombinedOutput() if err != nil { fmt.Printf("%v", err) return } fmt.Println(string(output)) }
Mit diesem Ansatz erhalten wir eine detaillierte Kontrolle über die Ausführungsumgebung unserer externen Befehle und können so den Benutzer genau angeben, unter dem sie ausgeführt werden sollen.
Das obige ist der detaillierte Inhalt vonWie kann ich als anderer Benutzer in Go externe Befehle ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!