Recentemente, desabilitei sudo
a capacidade de cache de autenticação, para que agora eu sempre solicite uma senha.
E, embora isso seja bom para segurança, causou um pequeno problema para o qual não consegui encontrar uma solução, não consigo executar comandos que seguem as seguintes linhas:
sudo <command> &
No passado, eu teria executado um sudo
comando antes disso, ele teria armazenado em cache minha senha e me permitido executar sudo
comandos sem aviso nos próximos minutos, e, portanto, permitiria executar o comando.
Mas quando eu o executo agora, já que não há armazenamento em cache antes e como ele inicia um novo thread imediatamente e sudo
nem sequer solicita uma senha, não consigo executá-lo dessa maneira.
Portanto, a menos que eu corra sudo -i
antes, não consigo executar um comando nesse formato que está se tornando um pouco chato.
Então, eu queria saber se existe alguma maneira de contornar isso e ainda executar programas e comandos dessa maneira?
Estou executando o Ubuntu GNOME 15.10 com o GNOME 3.18 e, especificamente, o programa que desejo executar dessa maneira é etherape
se isso faz alguma diferença, mas eu realmente gostaria que a solução funcionasse para todos os programas e comandos.
&
não é realmente pesquisável, estou mudando isso para… sudo command in the background
.Respostas:
Em vez de executar
sudo
em segundo plano, digasudo
para executar o comando em segundo plano. Deman sudo
:Por exemplo:
Outra maneira seria usar apenas um shell para executar o comando:
Outra opção seria especificar um programa gráfico para obter a senha e enviar
sudo
para o segundo plano de qualquer maneira:Os programas Askpass são normalmente usados para SSH. Um deles é fornecido pelo
ssh-askpass-gnome
pacote, que é instalado por padrão, pelo menos no Ubuntu 15.10.fonte
Se você estiver disposto a definir
timestamp_timeout
pelo menos algo como0.02
(1,2 segundos, eu diria tão seguro quanto0
) em/etc/sudoers
(necessário no seu caso, mas com as configurações padrão ou comtimestamp_timeout
qualquer coisa que0
não seja a seguinte) , você pode definir um alias como este~/.bashrc
, que não exigirá que você lembre de fazer algo antes de executar o comando e que permitirá que você mantenha o controle do processo .:O truque aqui é o ponto-e-vírgula, que fará com que o Bash analise
sudo -v
primeiro e separadamente, autenticando o usuário e limitando a parte potencial de segundo plano ao[ $? ] && sudo
comando, que verificará sesudo -v
foi bem-sucedido e será executadosudo
novamente (potencialmente em segundo plano), caso tenha sido.fonte
sudo -v
estender o cache de credenciais mesmo se o cache está desativado? E, IIRC <para que os aliases se expandam, o espaço deve estar no final do comando, não no começo.timestamp_timeout
definiu0
. E sim, eu estraguei completamente a coisa da expansão do alias, na verdade o alias não deveria se expandir. Obrigado.alias sudo='sudo -v && sudo'
seria tão bom?;
Bash faz a análisesudo -v
primeiro e separadamente; usar o&&
Bash analisaria ambos como um único comando e os dois em segundo plano imediatamente.Você não pode. O
&
comando envia o plano de fundo imediatamente. Ou seja, um subshell é criado em segundo plano e o comando é executado lá. Quando esse comando emite um prompt, como é o casosudo
, o prompt é exibido em segundo plano e você nunca o vê.A única maneira de contornar isso é trazer o comando de volta ao primeiro plano, fornecer a senha e enviá-la de volta ao segundo plano. Por exemplo:
Agora, digite sua senha, pressione Entere, em seguida, pressione CtrlZpara enviá-la de volta ao plano de fundo e
bg
dizer-lhe para continuar executando.Uma abordagem mais simples seria nunca usar
&
e, em vez disso, enviar tarefas para o plano de fundo manualmente com CtrlZebg
após iniciá-las.Finalmente, considere definir o tempo limite da senha do sudo para algo como 1 ou 2 segundos. Isso ainda lhe daria segurança suficiente (a menos que você esteja tentando se proteger contra o Flash) e permitiria executar comandos como o esperado.
fonte
man sudoers
diztimestamp_timeout
's valor deve especificar minutos com uma possível parte fracionária (que por sinal fazsudo
erro se eu tentar especificar um, não sei porquê).2.5
funciona bem aqui (Arch,sudo
versão 1.8.15).