Maison > développement back-end > Golang > Comment exécuter des commandes externes en tant qu'utilisateur différent dans Go ?

Comment exécuter des commandes externes en tant qu'utilisateur différent dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-31 10:38:08
original
537 Les gens l'ont consulté

How to Run External Commands as a Different User in Go?

Exécuter des commandes externes avec os/exec sous un autre utilisateur

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
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal