Dans Go, le package os/exec fournit un moyen d'exécuter des commandes externes à partir d'un programme. Cependant, par défaut, les commandes sont exécutées avec les mêmes privilèges utilisateur que le programme lui-même.
Pour exécuter des commandes avec les privilèges d'un autre utilisateur sans recourir aux commandes su ou bash, vous pouvez utiliser syscall.Credential. Voici un exemple :
import ( "os/exec" "syscall" ) func runAsUser(command string, args []string, username string) error { // Look up the target user's UID and GID u, err := user.Lookup(username) if err != nil { return err } uid, err := strconv.Atoi(u.Uid) if err != nil { return err } gid, err := strconv.Atoi(u.Gid) if err != nil { return err } // Create a command and set its SysProcAttr to run as the specified user cmd := exec.Command(command, args...) cmd.SysProcAttr = &syscall.SysProcAttr{ Credential: &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)}, } // Run the command return cmd.Run() }
Bien que cela ne soit pas recommandé en raison de risques de sécurité potentiels, vous pouvez également utiliser syscall.Setuid pour modifier l'ID utilisateur effectif de le courant processus.
import ( "os" "syscall" ) func setUid(username string) error { // Look up the target user's UID u, err := user.Lookup(username) if err != nil { return err } uid, err := strconv.Atoi(u.Uid) if err != nil { return err } // Set the effective user ID to the specified user return syscall.Setuid(uid) }
Remarque :
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!