sudo: lendo a senha automaticamente através de shell script

Publicado por Perfil removido em 24/02/2011

[ Hits: 25.493 ]

 


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.

CUIDADO COM O QUE VÃO FAZER, OK?

Abraços!!!

Outras dicas deste autor

Guia de bolso com os principais comandos Linux

Codificação Hexadecimal On-Line

Jogos da Steam sem texturas ou com texturas pretas/escuras [Resolvido]

Linux mais do que um sistema, uma cultura

Transforme a manpage do GNU/Linux em PDF

Leitura recomendada

sed formatando CPF, CNPJ e datas

Recuperando posição do cursor na última linha editada no VIM

gxmessage :: shell script incrementado

OMNI-bot para Enemy Territory - Scripts para facilitar o uso

Atualização dos Menus do Wine

  

Comentários
[1] Comentário enviado por bvlucena em 24/02/2011 - 23:05h

não é melhor alterar o /etc/sudoers ?

[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 :)

[5] Comentário enviado por d1l50n em 25/02/2011 - 10:30h

eu teria feito um
Usuario ALL=(ALL) NOPASSWD: /caminho/do/script

[6] Comentário enviado por tiekookeit em 25/02/2011 - 13:59h

eu ia comentar o sudoers mas aprece que todomundo ja falou isso kkk

[7] Comentário enviado por Nando-XD em 14/03/2011 - 15:14h

sudo "codigo";
echo "senha";

o jeito que eu arrumei foi esse
depois vou dar uma olhada nisso melhor...

[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.

http://www.vivaolinux.com.br/dica/Compilar-shell-script
dêm uma olhada...

[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...

Saudaçoes e agradecido



Contribuir com comentário