
Cuando uso, por ejemplo, firewall-cmd, que necesita correctamente privilegios de root para ejecutarse, se me solicita en una ventana (no en la terminal como ocurre con sudo) que proporcione mi contraseña cuando intento autocompletar una opción (por ejemplo, escribir "--perm " y presione TAB). Esto sucede cada vez que uso el autocompletado, incluso si ya ingresé mi contraseña antes y/o ejecuté un comando con sudo (que está configurado para no avisarme por segunda vez durante un tiempo determinado).
¿Hay alguna forma de hacer que el ingreso de la contraseña sea permanente durante un tiempo determinado o de desactivar completamente la autenticación para el mero autocompletado (todavía quiero autenticación para ejecutar el programa)?
La solución obvia es iniciar sesión como root (use su o sudo -i), pero me gustaría evitar hacerlo.
Estoy usando bash y mis .bashrc
fuentes son el bash_completion
archivo estándar que se envía con el bash-completion
paquete en Debian.
Puedo reproducir esto solo . /etc/bash_completion
en mi .bashrc
.
Correr complete -p firewall-cmd
resulta en
bash: complete: firewall-cmd: no completion specification
La razón por la que pensé que polkit estaba involucrado (ver etiquetas originales) es que cuando cancelo el diálogo de autenticación obtengo lo siguiente en la salida estándar:
Authorization failed.
Make sure polkit agent is running or run the application as superuser.
Respuesta1
Normalmente, para ver la finalización asociada con un comando como firewall-cmd, uno usaría complete -p firewall-cmd
y esperaría ver algo como complete -F _firewall_cmd firewall-cmd
regresar. Luego se examinaría la _firewall_cmd
función usando type _firewall_cmd
.
El paquete de finalización de bash para Debian utiliza un complete -D
comando para configurar una función de finalización predeterminada, que busca si hay una finalización específica disponible la primera vez que se usa y, de ser así, la carga.
Por lo tanto, es importante intentar completar una vez antes de ver cómo se configura la finalización.
Para firewall-cmd
esto
archivodefine la función de finalización que actualmente comienza
_firewall_cmd()
{
local cur prev words cword split
_init_completion -s || return
firewall-cmd --state 1> /dev/null || return
El programa /usr/bin/firewall-cmd en sí es un script de Python, que termina necesitando privilegios de root y solicitando autenticación. Una llamada de firewall-cmd --state
devuelve verdadero si el firewall se está ejecutando. Por lo tanto, la intención del código de finalización parece ser no completar si el firewall no se está ejecutando. Sin embargo, está escrito para necesitar privilegios para ver si el firewall se está ejecutando, y esto está provocando mensajes no deseados.
Eliminar la firwall-cmd --state 1> /dev/null || return
línea de la función de finalización hace que la finalización sea más rápida, no solicita la contraseña y otras ventajas generales.
Respuesta2
Puede utilizar la opción nopasswd de sudo. Simplemente agregue la opción nopasswd en el archivo suoders para su usuario.
por ejemplo, si su nombre de usuario es imosdin, modifique la entrada en sudoers ejecutando el comando visduo
y agregue/modifique la entrada mencionada a continuación.
imsodin ALL=(ALL) NOPASSWD: ALL
Ahora, el sistema permitirá al usuario de imsodin ejecutar cualquier comando mediante sudo sin solicitar una contraseña.