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

Publicado por Perfil removido em 24/02/2011

[ Hits: 37.285 ]

 


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

Placa Wireless Qualcomm Atheros QCA6174 em kernel 4.4.0-31

LFS - Linux From Scratch - Obtendo os fontes direto do lfslivecd

LILO - Gerenciador de boot para Linux

Slackware com resolução 1280x768

O que fazer após instalar o Ubuntu 18.04 LTS

Leitura recomendada

hwclock - Ajustando data e hora do hardware

Linux Omni-bot Autosetup 2011, programinha que facilita o uso do Omni-bot

Resolvendo waiting ou idle transaction no PostgreSQL

Renomeando arquivos de maiúsculo para minúsculo

Como realizar consultas em vários servidores simultaneamente

  

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

[11] Comentário enviado por andrehtgti2 em 22/04/2021 - 19:01h



[12] Comentário enviado por andrehtgti2 em 22/04/2021 - 19:04h

Muito bom!

Esse

echo -e "senha\n" | sudo -S ./meu_script

me ajudou a fazer um script que é auto executado para fazer um replace de um string em um arquivo quando o linux inicia:


pass=`zenity --forms --add-password="SenhaA" --title="Digite a senha de root" --text="\nSenha root utilizada no comando do replace\n\n"`

echo -e $pass | sudo -S sed -i 's/"$@"/"$@" --profile-directory="Profile 2"/g' /opt/app/aht/conf



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts