sudo: lendo a senha automaticamente através de shell script
Oi gente!
Um dia desses me deparei com um problema pra lá de chato, que era ter de executar um comando com permissão de root dentro de um shell script, sem ter que aguardar o prompt de senha toda vez (preciso alterar arquivos de configuração em /etc toda vez que o script roda).
Perguntei aqui no VOL, sem obter resposta satisfatória e escrevi um script que fazia o serviço para ser chamado dentro do script principal, mas toda vez ele pedia a senha, o que não resolveu muita coisa.
Mas no dia 8 de fevereiro de 2011, encontrei a solução, que estava debaixo do meu nariz (que é bem grande por sinal, dá até pra fumar na chuva...) o tempo todo. Relendo a man page do sudo, encontrei a opção "-S", a qual tentei usar várias vezes sem sucesso.
O detalhe faltante, que só percebi hoje, é que essa opção espera um caractere de newline (\n) após a senha fornecida pela saída padrão. Ou seja: simplesmente ecoar a senha pra stdout não funciona, assim:
echo "senha" | sudo -S ./meu_script
porque está faltando a newline. Veja agora como faz para funcionar:
echo -e "senha\n" | sudo -S ./meu_script
Funcionou perfeito da 2.ª vez!!!
Agora atenção: este sistema só é usado por mim! Este PC é de uso exclusivo meu. Colocar senhas em scripts é uma grave falha de segurança e eu fiz isso porque realmente sei o que estou fazendo e os riscos envolvidos.
[2] Comentário enviado por nettask em 24/02/2011 - 23:34h
Como dito pelo bvlucena, eu teria inserido no arquivo /etc/sudoers a linha "nome_do_usuario ALL=NOPASSWD: ALL", dai não é necessário digitar a senha quando usar sudo, sem falar que executaria todos os comandos que podem ser executados como root, lembrando que isso é uma falha de segurança tb, deve ser usado por quem sabe o que está fazendo! até a proxima
[3] Comentário enviado por removido em 25/02/2011 - 00:10h
pensei nisso, mas entre abrir um furo com uma agulha e uma picareta, fiquei com a primeira... as duas opções são péssimas idéias, mas é que no caso do meu script, era para alterar um arquivo de configuração em /etc toda vez que rodasse... enfim! não achei que valia a pena editar um arquivo sério assim... ;-)
[4] Comentário enviado por rbarivi em 25/02/2011 - 07:01h
Existe a possibilidade de inibir o uso de senha para um comando específico no sudo ou vc pode setar o sticky bit do arquivo para que ele ganhe super poderes de root :)
[8] Comentário enviado por maozinha_tribal em 03/09/2011 - 17:24h
da pra compilar o script pra um programa em c
com um programa chamado shc,
dai ele fica em binario e ninguem
vai conseguir roubar a senha
da pra instalar bem facil por apt,
#apt-get install shc
depois do script pronto
dai é só compilar
$shc -f -r -v teste.sh
onde
f - arquivo a ser compilado;
r - modo verbose
v - torna compativel com outras distros;
dai ele fica um arquivo com o nome teste.x
depois da permição apenas de execução pro arquivo
#chmod +x teste.x
pronto
resolvido o problema de segurança...
creditos ao colaborador
Marcos Miras, tirei esta ideia de uma dica dele.
[9] Comentário enviado por AlvesUeliton em 31/03/2018 - 21:49h
Perfeito pra adicionar o Teamviewer em Sessão e Inicialização no Manjaro Linux:
echo -e "SENHAPARASUDO\n" | sudo -S teamviewer --daemon start && teamviewer
Intel(R) Celeron(R) CPU 847 @ 1.10GHz
2nd Generation Core Processor Family Integrated Graphics Controller
64 bits MBR(/GPT) driver=i915 4GB
7 Series/C216 Chipset Family High Definition Audio Controller
[10] Comentário enviado por danueli em 29/08/2019 - 05:07h
Boas Pessoal!
Sei que este tópico é antigo! Mas como estou com um problema identico penso nao valer apena abrir um topico novo.
Eu estou fazendo um init-script para que execute algumas tarefas em primeira mão.
Tais como criar um user admin e encriptar a home desse user usando: apt-get install -y ecryptfs-utils lsof
Estou a conseguir fazer o apt-get instalar.
Agora na hora de executar este comando
[code]echo -e "$UPASSWORD\n" | ecryptfs-migrate-home -u $USUARIO[/code]
já experimentei sem \n , com ' ' , com "${var}"
Retorna sempre este erro no log:
[code]/usr/bin/ecryptfs-migrate-home: 186: shift: can't shift that many[/code]
Já pesquisei info nao entendo o shift :s Não está a passar o echo? PS: a PAssword é relativamente curta para testes...