
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 .bashrc
fontes são o bash_completion
arquivo padrão enviado com o bash-completion
pacote no Debian.
Posso reproduzir isso apenas . /etc/bash_completion
no meu arquivo .bashrc
.
Executando complete -p firewall-cmd
resultados 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-cmd
e esperaria ver algo como complete -F _firewall_cmd firewall-cmd
voltar. Seria então examinar a _firewall_cmd
função usando type _firewall_cmd
.
O pacote de conclusão bash para Debian usa um complete -D
comando 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-cmd
esta
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 --state
retorna 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 || return
linha 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 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.