Deaktivieren Sie die Eingabeaufforderung zur Authentifizierung bei der automatischen Vervollständigung eines Befehls, der Root-Berechtigungen erfordert

Deaktivieren Sie die Eingabeaufforderung zur Authentifizierung bei der automatischen Vervollständigung eines Befehls, der Root-Berechtigungen erfordert

Wenn ich z. B. Firewall-cmd verwende, das korrekterweise Root-Rechte zur Ausführung benötigt, werde ich in einem Fenster (also nicht im Terminal wie bei sudo) aufgefordert, mein Passwort einzugeben, wenn ich versuche, eine Option automatisch zu vervollständigen (z. B. schreibe „--perm“ und drücke TAB). Dies geschieht jedes Mal, wenn ich die automatische Vervollständigung verwende, selbst wenn ich mein Passwort bereits zuvor eingegeben und/oder einen Befehl mit sudo ausgeführt habe (das so konfiguriert ist, dass ich für eine bestimmte Zeit nicht ein zweites Mal dazu aufgefordert werde).

Gibt es eine Möglichkeit, die Eingabe des Kennworts entweder für eine bestimmte Zeit dauerhaft zu machen oder die Authentifizierung für die bloße Autovervollständigung vollständig zu deaktivieren (für die tatsächliche Ausführung des Programms möchte ich dennoch eine Authentifizierung)?

Die naheliegende Lösung besteht darin, sich als Root anzumelden (verwenden Sie su oder sudo -i), aber das möchte ich vermeiden.

Ich verwende Bash und meine .bashrcQuellen sind die Standarddatei, bash_completiondie mit dem bash-completionPaket in Debian geliefert wird.

. /etc/bash_completionIch kann dies mit nur in meinem reproduzieren .bashrc.

Das Ausführen von complete -p firewall-cmdErgebnissen in
bash: complete: firewall-cmd: no completion specification

Der Grund für meine Annahme, dass Polkit beteiligt war (siehe Original-Tags), ist, dass ich beim Abbrechen des Authentifizierungsdialogs Folgendes auf der Standardausgabe erhalte:

Authorization failed.
    Make sure polkit agent is running or run the application as superuser.

Antwort1

Normalerweise würde man, um die mit einem Befehl wie Firewall-cmd verbundene Fertigstellung anzuzeigen, verwenden complete -p firewall-cmdund erwarten, dass etwas wie „comming“ complete -F _firewall_cmd firewall-cmdzurückkommt. Anschließend würde man die _firewall_cmdFunktion mithilfe von untersuchen type _firewall_cmd.

Das Bash-Vervollständigungspaket für Debian verwendet einen complete -DBefehl zum Einrichten einer Standardvervollständigungsfunktion, die bei der ersten Verwendung prüft, ob eine bestimmte Vervollständigung verfügbar ist, und diese gegebenenfalls lädt.

Daher ist es wichtig, den Abschluss einmal zu versuchen, bevor man sich ansieht, wie der Abschluss eingerichtet ist.

Dafürfirewall-cmdDateidefiniert die Vervollständigungsfunktion, die aktuell startet

_firewall_cmd()
{
    local cur prev words cword split
    _init_completion -s || return
    firewall-cmd --state 1> /dev/null || return

Das Programm /usr/bin/firewall-cmd selbst ist ein Python-Skript, das letztendlich Root-Rechte benötigt und eine Authentifizierung anfordert. Ein Aufruf von firewall-cmd --stategibt true zurück, wenn die Firewall läuft. Die Absicht des Vervollständigungscodes scheint daher zu sein, keine Vervollständigung durchzuführen, wenn die Firewall nicht läuft. Er ist jedoch so geschrieben, dass die Rechte erforderlich sind, um zu prüfen, ob die Firewall läuft, und dies verursacht die unerwünschten Eingabeaufforderungen.

Durch das Löschen der firwall-cmd --state 1> /dev/null || returnZeile aus der Vervollständigungsfunktion wird die Vervollständigung beschleunigt, es erfolgt keine Kennwortabfrage und es gibt weitere allgemeine Vorteile.

Antwort2

Sie können die Option nopasswd von sudo verwenden. Fügen Sie einfach die Option nopasswd in der Suoders-Datei für Ihren Benutzer hinzu.

Wenn Ihr Benutzername beispielsweise imosdin ist, ändern Sie den Eintrag in sudoers, indem Sie den Befehl ausführen visduound den unten genannten Eintrag hinzufügen/ändern.

imsodin ALL=(ALL) NOPASSWD: ALL

Jetzt ermöglicht das System dem Imsodin-Benutzer, beliebige Befehle über sudo auszuführen, ohne nach einem Kennwort zu fragen.

verwandte Informationen