Stoppen Sie systemctl mithilfe der grafischen Sudo-Eingabeaufforderung

Stoppen Sie systemctl mithilfe der grafischen Sudo-Eingabeaufforderung

Meine Frage ist, wie ich systemd(?) so konfigurieren kann, dass dieses nervige Popup nicht mehr geöffnet wird, wenn ich vergesse, sudo einzugeben. Geben Sie mir einfach eine textbasierte sudo-Eingabeaufforderung oder zeigen Sie einen Fehler an, damit ich den Fehler schnell korrigieren kann.

Dies ist Arch Linux, aktuellste Version (systemd 238.133).

Bildbeschreibung hier eingeben

Antwort1

Dies ist keine 'sudo'-Eingabeaufforderung, sondern eine 'polkit'-Eingabeaufforderung. Eine Möglichkeit, dies zu vermeiden – global zualleSoftware, nicht nur systemctl – besteht darin, eine Polkit-Regel zu schreiben, die die Aktion sofort ablehnt (oder sofort zulässt).

polkit.addRule(function(action, subject) {
    if (subject.user !== "root") {
        if (/^org\.freedesktop\.systemd1\./.test(action.id)) {
            return polkit.Result.NO;
        }
    }
});

(Der subject.userTest könnte weggelassen werden, da von Root aufgerufene Aktionen die Polkit-Prüfungen vollständig umgehen.)

Polkit-Regeln werden in gespeichert /etc/polkit/rules.d/*.rulesund im Allgemeinen wie folgt benannt 80-custom.rules(in aufsteigender Reihenfolge verarbeitet). Weitere Informationen finden Sie unterpolkit(8).


(Das heißt, wenn Ihre Sudo-Konfiguration passwortlos ist, dann gibt es keinen praktischen Sicherheitsunterschied zwischen der Verwendung von „sudo“ und der sofortigen Erlaubnis von Polkit für die Aktion. Und umgekehrt, wenn Ihre Sudoerfordertein Passwort ... warum gibst du es dann nicht einfach in den Polkit-Dialog ein? Es ist das gleiche Passwort.)

Antwort2

Es gibt eine Option --no-ask-password. Erstellen Sie einen Alias:

alias systemctl='systemctl --no-ask-password'

(getestet in Bash, Kubuntu).

Antwort3

Verwenden Sie kein sudo für systemctl,immer; wenn duSindberechtigt, die Wartung durchzuführen und Polkit ordnungsgemäß einzurichten.

Begründung: sudolässt das Programm, das Sie ausführen, effektiv vom angeforderten Benutzer ausführen (normalerweise: root). Einschließlich aller verknüpften Toolkits. Jeder Fehler im Programm, in den Bibliotheken oder in der ...sudo-Konfiguration macht Sie anfällig. Im Fall von ist systemddie systemctlBinärdatei nur einRegler(im Allgemeinen). Esnichterfordert Root-Privilegien (für die meisten Anwendungsfälle), da es keine privilegierten Operationen selbst durchführt, sondern fragt init. Die Verwendung des tatsächlichen rootKontos (entweder direkt oder über sudo) ist eine Alles-oder-Nichts-Lösung (Bombe), während dienurDas Einzige, was erforderlich ist, istautorisieren(nicht: authentifizieren)gegensystemd. Da systemdversteht polkitfürGenehmigung, mitauthentifiziertrootEs wurden einfach zu viele Berechtigungen erteilt.

Betrachten wir einen Fehler in systemctl, der es erlaubt, beliebige Befehle direkt (nicht über ) aufzurufen systemd. Wenn rootdie Berechtigungen über erteilt wurden sudo, kann man jeden Befehl mit EUID=0 ausführen. Wenn man ihn systemctlals nicht privilegierter Benutzer ausführt, kann man einen solchen Befehl nur mit dem Konto ausführen, für das man zuvor Zugriff erhalten hat. Dies ist eine einfache Konsequenz einiger grundlegender Sicherheitsregeln:

  • Verwenden Sie nur die Berechtigungen, die erforderlich sind (nicht den vollständigen Satz == root),
  • erteilen Sie diese Berechtigungen nur dem Code, der sie benötigt (Autorisierung systemdohne Erteilung von Berechtigungen für systemctl).

Was die Rolle des alleinigen Benutzers einer Maschine angeht: Wenn Sie mit einem nicht privilegierten Konto arbeiten, nicht mit diesem root, gehe ich davon aus, dass Sie die von Ihnen ausgeführten Programme daran hindern möchten, überflüssige Berechtigungen zu erhalten. Diese Berechtigungen systemctlnur zu erteilen, weil das rootKonto authorizedzum Befehlen dient systemd, ist eine solche überflüssige Berechtigung.

Darüber hinaus polkitkönnen Sie mit verschiedene Zugriffskriterien für verschiedene Aktionen (Start/Stopp/Neuladen/was auch immer) und verschiedene Dienste festlegen. Sie können genaue Befehle eingeben sudoers, aber die Polkit-Lösung kennt die spezifischen Teile solcher Befehle.

Abschließend: Nicht verwenden, sudowenn eine Methode mit weniger Privilegien verfügbar ist. sudoIst eine Alles-oder-Nichts-Lösung als letztes Mittel.

Wenn Sie möchten, dass die Kennwortabfrage als Text und nicht als Grafik angezeigt wird,DISPLAY nicht setzen, zB:Trennen Sie Ihr Terminal von der grafischen Sitzung, in der der Authentifizierungsagent ausgeführt wird.

verwandte Informationen