In Go ist es mit dem os/exec-Paket möglich, externe Befehle im Namen eines anderen Benutzers auszuführen . Dies ist besonders nützlich, wenn Ihre Anwendung als Root ausgeführt wird und Befehle mit den Berechtigungen eines anderen Benutzers ausführen muss.
Eine Methode, dies zu erreichen, ist die Verwendung der syscall.Credential-Struktur. Durch Hinzufügen dieser Struktur zum SysProcAttr-Feld des Cmd-Objekts können Sie die Benutzer-ID (Uid) und Gruppen-ID (Gid) für den externen Prozess angeben. Dadurch wird sichergestellt, dass der Befehl unter den Berechtigungen des angegebenen Benutzers ausgeführt wird.
Hier ein Beispiel:
import ( "os/exec" "syscall" ) func main() { // Get the user ID and group ID for the desired user. u, err := user.Lookup("username") if err != nil { fmt.Printf("%v", err) return } uid, err := strconv.Atoi(u.Uid) if err != nil { fmt.Printf("%v", err) return } gid, err := strconv.Atoi(u.Gid) if err != nil { fmt.Printf("%v", err) return } // Create the command object. cmd := exec.Command("command", "args...") // Set the SysProcAttr field to specify the user credentials. cmd.SysProcAttr = &syscall.SysProcAttr{ Credential: &syscall.Credential{ Uid: uint32(uid), Gid: uint32(gid), }, } // Execute the command. if err := cmd.Run(); err != nil { fmt.Printf("%v", err) return } }
Mit diesem Ansatz können Sie externe Befehle unter den Berechtigungen eines anderen Benutzers ausführen, ohne auf externe Befehle angewiesen zu sein Befehle wie „su“ oder „bash“. Beachten Sie, dass die Berechtigungen des laufenden Go-Prozesses die Möglichkeit umfassen müssen, sich als der gewünschte Benutzer auszugeben.
Das obige ist der detaillierte Inhalt vonWie führe ich externe Befehle als anderer Benutzer in Go aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!