
Externe Befehle als anderer Benutzer mit os/exec ausführen
In Go bietet das Paket os/exec eine Möglichkeit, externe Befehle aus einem Programm auszuführen. Standardmäßig werden Befehle jedoch mit denselben Benutzerrechten wie das Programm selbst ausgeführt.
Befehle als anderer Benutzer ausführen (ohne su/bash)
Um Befehle mit den Rechten eines anderen Benutzers auszuführen Ohne auf die Befehle su oder bash zurückgreifen zu müssen, können Sie syscall.Credential verwenden. Hier ist ein Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import (
"os/exec"
"syscall"
)
func runAsUser(command string, args []string, username string) error {
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
}
cmd := exec .Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{
Credential: &syscall.Credential{Uid: uint32(uid), Gid: uint32(gid)},
}
return cmd.Run()
}
|
Nach dem Login kopieren
Alternative Methode mit Setuid (nicht empfohlen)
Obwohl dies aufgrund potenzieller Sicherheitsrisiken nicht empfohlen wird, können Sie auch syscall.Setuid verwenden, um die effektive Benutzer-ID von zu ändern die jetzige Prozess.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import (
"os"
"syscall"
)
func setUid(username string) error {
u, err := user.Lookup(username)
if err != nil {
return err
}
uid, err := strconv.Atoi(u.Uid)
if err != nil {
return err
}
return syscall.Setuid(uid)
}
|
Nach dem Login kopieren
Hinweis:
- In den obigen Beispielen wird davon ausgegangen, dass der aktuelle Prozess als Root mit den entsprechenden su-Berechtigungen ausgeführt wird.
- Wenn Sie Umgebungsvariablen an den untergeordneten Prozess übergeben müssen, können Sie diese mit Cmd.Env festlegen.
- Es ist wichtig, mit allen Variablen umzugehen Fehler, die während des Prozesses auftreten können.
Das obige ist der detaillierte Inhalt vonWie führe ich externe Befehle als anderer Benutzer in Go aus, ohne su oder bash zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!