Deshabilite la solicitud de autenticación al completar automáticamente un comando que necesita privilegios de root

Deshabilite la solicitud de autenticación al completar automáticamente un comando que necesita privilegios de root

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 .bashrcfuentes son el bash_completionarchivo estándar que se envía con el bash-completionpaquete en Debian.

Puedo reproducir esto solo . /etc/bash_completionen mi .bashrc.

Correr complete -p firewall-cmdresulta 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-cmdy esperaría ver algo como complete -F _firewall_cmd firewall-cmdregresar. Luego se examinaría la _firewall_cmdfunción usando type _firewall_cmd.

El paquete de finalización de bash para Debian utiliza un complete -Dcomando 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-cmdesto 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 --statedevuelve 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 || returnlí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 visduoy 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.

información relacionada