Dans Go, en utilisant le package os/exec, il est possible d'exécuter des commandes externes pour le compte d'un autre utilisateur . Ceci est particulièrement utile lorsque votre application s'exécute en tant que root et doit exécuter des commandes avec les privilèges d'un utilisateur différent.
Une méthode pour y parvenir consiste à utiliser la structure syscall.Credential. En ajoutant cette structure au champ SysProcAttr de l'objet Cmd, vous pouvez spécifier l'ID utilisateur (Uid) et l'ID de groupe (Gid) pour le processus externe. Cela garantit que la commande s'exécute sous les privilèges de l'utilisateur spécifié.
Voici un exemple :
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 } }
En utilisant cette approche, vous pouvez exécuter des commandes externes sous les privilèges d'un autre utilisateur sans recourir à des ressources externes. des commandes comme "su" ou "bash". Gardez à l'esprit que les privilèges du processus Go en cours d'exécution doivent inclure la possibilité de usurper l'identité de l'utilisateur souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!