
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 .bashrc
Quellen sind die Standarddatei, bash_completion
die mit dem bash-completion
Paket in Debian geliefert wird.
. /etc/bash_completion
Ich kann dies mit nur in meinem reproduzieren .bashrc
.
Das Ausführen von complete -p firewall-cmd
Ergebnissen 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-cmd
und erwarten, dass etwas wie „comming“ complete -F _firewall_cmd firewall-cmd
zurückkommt. Anschließend würde man die _firewall_cmd
Funktion mithilfe von untersuchen type _firewall_cmd
.
Das Bash-Vervollständigungspaket für Debian verwendet einen complete -D
Befehl 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-cmd
Dateidefiniert 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 --state
gibt 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 || return
Zeile 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 visduo
und 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.