Desative o prompt de autenticação no preenchimento automático de um comando que precisa de privilégios de root

Desative o prompt de autenticação no preenchimento automático de um comando que precisa de privilégios de root

Quando eu uso, por exemplo, firewall-cmd, que precisa corretamente de privilégios de root para ser executado, sou solicitado em uma janela (não no terminal como no sudo) para fornecer minha senha quando tento preencher automaticamente uma opção (por exemplo, escrever "--perm " e pressione TAB). Isso acontece toda vez que uso o preenchimento automático, mesmo que eu já tenha digitado minha senha antes e/ou executado um comando com sudo (que está configurado para não me avisar uma segunda vez por um determinado tempo).

Existe alguma maneira de tornar a inserção da senha permanente por um determinado período ou desabilitar completamente a autenticação para mero preenchimento automático (ainda quero autenticação para realmente executar o programa)?

A solução óbvia é fazer login como root (use su ou sudo -i), mas gostaria de evitar fazer isso.

Estou usando o bash e minhas .bashrcfontes são o bash_completionarquivo padrão enviado com o bash-completionpacote no Debian.

Posso reproduzir isso apenas . /etc/bash_completionno meu arquivo .bashrc.

Executando complete -p firewall-cmdresultados em
bash: complete: firewall-cmd: no completion specification

A razão pela qual pensei que o polkit estava envolvido (veja as tags originais) é que, quando aborto o diálogo de autenticação, recebo o seguinte no stdout:

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

Responder1

Normalmente, para ver a conclusão associada a um comando como firewall-cmd, alguém usaria complete -p firewall-cmde esperaria ver algo como complete -F _firewall_cmd firewall-cmdvoltar. Seria então examinar a _firewall_cmdfunção usando type _firewall_cmd.

O pacote de conclusão bash para Debian usa um complete -Dcomando para configurar uma função de conclusão padrão, que verifica se há uma conclusão específica disponível na primeira vez que é usada e, se houver, carrega-a.

Portanto, é importante tentar a conclusão uma vez antes de verificar como a conclusão está configurada.

Por firewall-cmdesta arquivodefine a função de conclusão que atualmente inicia

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

O próprio programa /usr/bin/firewall-cmd é um script python, que acaba precisando de privilégios de root e solicitando autenticação. Uma chamada firewall-cmd --stateretorna true se o firewall estiver em execução. A intenção do código de conclusão, portanto, parece ser não concluir se o firewall não estiver em execução. No entanto, foi escrito que precisa de privilégios para ver se o firewall está em execução, e isso está causando prompts indesejados.

Excluir a firwall-cmd --state 1> /dev/null || returnlinha da função de conclusão torna a conclusão mais rápida, não solicita senha e outras vantagens gerais.

Responder2

Você pode usar a opção nopasswd do sudo. Basta adicionar a opção nopasswd no arquivo suoders para o seu usuário.

por exemplo, se o seu nome de usuário for imosdin, modifique a entrada em sudoers executando o comando visduoe adicione/modifique a entrada mencionada abaixo.

imsodin ALL=(ALL) NOPASSWD: ALL

Agora, o sistema permitirá que o usuário imsodin execute qualquer comando via sudo sem solicitar senha.

informação relacionada