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

4

Quando uso, por exemplo firewall-cmd, que corretamente precisa de privilégios de root para executar, eu sou solicitado em uma janela (assim não no terminal como com sudo) para dar minha senha quando tento autocompletar uma opção (por exemplo, escrever "--perm" e aperte TAB ). Isso acontece toda vez que uso o autocompletar, mesmo que eu já tenha inserido minha senha antes e / ou tenha executado um comando com o sudo (que está configurado para não solicitar uma segunda vez por um determinado período).

Existe alguma maneira de tornar a inserção permanente da senha por um determinado período de tempo ou a autenticação de desativação completa para o auto-completar (ainda quero autenticação para executar o programa)?

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

Estou usando bash e meu .bashrc origina o arquivo padrão bash_completion fornecido com o pacote bash-completion no Debian.

Eu posso reproduzir isso com apenas . /etc/bash_completion no meu .bashrc .

A execução de complete -p firewall-cmd resulta em bash: complete: firewall-cmd: no completion specification

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

Authorization failed.
    Make sure polkit agent is running or run the application as superuser.
    
por imsodin 06.11.2016 / 20:01

2 respostas

4

Normalmente, para ver a conclusão associada a um comando como o firewall-cmd, seria usado complete -p firewall-cmd e esperaria ver algo como complete -F _firewall_cmd firewall-cmd voltando. Um examinaria a função _firewall_cmd usando type _firewall_cmd .

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

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

Por firewall-cmd isto O arquivo define a função de conclusão que inicia atualmente

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

O programa / usr / bin / firewall-cmd em si é um script python, que acaba precisando de privilégios de root e pedindo autenticação. Uma chamada de firewall-cmd --state retornará verdadeiro 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, está escrito para precisar dos privilégios para ver se o firewall está em execução e isso está causando os prompts indesejados.

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

    
por 12.11.2016 / 23:03
-2

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

por exemplo. se seu nome de usuário for imosdin, modifique a entrada em sudoers executando o comando visduo e 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.

    
por 06.11.2016 / 20:14