Ist es möglich, Sudo-Befehle in Go auszuführen, ohne das Programm selbst als Sudo auszuführen?

WBOY
Freigeben: 2024-02-09 18:03:08
nach vorne
1249 Leute haben es durchsucht

是否可以在 go 中运行 sudo 命令而不将程序本身作为 sudo 运行

php-Editor Banana ist hier, um eine Frage zur Go-Sprache zu beantworten: Ist es möglich, Sudo-Befehle in Go auszuführen, ohne das Programm selbst als Sudo auszuführen? In der Go-Sprache können wir mithilfe der Command-Funktion im os/exec-Paket Systembefehle, einschließlich sudo-Befehle, im Programm ausführen. Allerdings ist zu beachten, dass, wenn Sie Sudo-Befehle in einem Go-Programm ausführen möchten, das Programm selbst über Sudo-Berechtigungen verfügen muss. Andernfalls kann das Programm den sudo-Befehl nicht erfolgreich ausführen. Wenn Sie Sudo-Befehle in einem Go-Programm ausführen möchten, ist es daher sehr wichtig sicherzustellen, dass das Programm selbst über Sudo-Berechtigungen verfügt.

Frageninhalt

Dieses Programm führt mehrere Befehle aus, die Sudo-Berechtigungen erfordern (z. B. Sudo dnf update). Da das Programm mit dem Befehl go install installiert werden sollte, kann es (soweit ich weiß) nicht als sudo ausgeführt werden, ohne dass ein Benutzer die Konfiguration abschließt.

Das Programm zeigt dem Benutzer die Ausgabe nicht an, um die Ausgabe sauber zu halten. Um anzuzeigen, dass ein Prozess ausgeführt wird, verwendet er Spinner aus der Spinner-Bibliothek.

Kann ich diese Dinge tun?

  • Erhalten Sie Sudo-Berechtigungen aus dem Programm heraus
  • Machen Sie das Programm über sudo lauffähig, auch wenn es mit go install
  • installiert wurde
  • Zeigen Sie die Ausgabe von Sudo-Befehlen (einschließlich Passwortanfragen), ohne dass sie vom Spinner überschrieben werden

Hier ist eine vereinfachte Version dessen, was der Code tun soll:

package main

import (
    "fmt"
    "os"
    "os/exec"
    "time"

    "github.com/briandowns/spinner"
)

func main() {
    // Spinner to show that it's running
    s := spinner.New(spinner.CharSets[14], time.Millisecond*100)
    s.Start()

    // Somehow execute this with sudo
    _, err := exec.Command(os.Getenv("SHELL"), "-c", "dnf update -y").Output()

    // Stop the spinner and handle any error
    if err != nil {
        fmt.Printf("Err: %s", err)
        os.Exit(1)
    }
    s.Stop()

    // Finish
    fmt.Println("Success")
}
Nach dem Login kopieren

Lösung

_, err := exec.Command(os.Getenv("SHELL"), "-c", "sudo dnf update -y").Output()

Fügen Sie in diesem Beispiel sudo vor dem Befehl hinzu, den Sie als sudo ausführen möchten. Nach dem Ausführen des Programms wird sudo nach dem Kennwort gefragt. Wenn Sie dies auf den Beispielcode anwenden, wird die Meldung zur Kennwortanforderung aufgrund der Rotation nicht angezeigt Die Form überschreibt sie, aber wenn Sie dies versuchen, ohne die Form zu drehen, können Sie sie sehen. Auch wenn Sie die Meldung nicht sehen, funktioniert Ihr Befehl in sudo folgendermaßen, wenn Sie das richtige Passwort eingeben und die Eingabetaste drücken. Auf diese Weise müssen Sie die Anwendung nicht als sudo ausführen. Ich habe ähnliche Befehle damit ausgeführt und sie funktionieren.

Das obige ist der detaillierte Inhalt vonIst es möglich, Sudo-Befehle in Go auszuführen, ohne das Programm selbst als Sudo auszuführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!