Alteração de senha do Root enviar email

Iniciado por Rudnei, 19 de Junho de 2012, 14:35

tópico anterior - próximo tópico

Rudnei

Alguem sabe de alguma ferramenta ou script para que quando seja alterado a senha do root seja enviado um email para algum usuario?

raidicar

#1
Olá, isso é simples, segue um Script em loop infinito, para que não pare de executar.

o comando manual de inicialização pelo terminal seria: nohup /caminho/script_root.sh &
nohup no inicio para que o script fique aberto mesmo após fechar o terminal ou a sessão.
& no final para que o script rode em segundo plano e libere o terminal para uso.
Quando estiver testanto, execute-o normalmente, sem o nohup e o & para que possa interrompe-lo facilmente.
Use nohup e & apenas quando for deixa-lo em definitivo.
Assim ele ficará ativo após fechar a sessão e além disso, o terminal estará liberado para uso.
Você apenas receberá uma mensagem: nohup: ignorando entrada e anexando saída a "nohup.out"
Pressione Enter e pronto, o programa ja esta rodando.

Depois disso, para interromper o script somente o comando kill -9 Numero_do_PID (O comando ps -ef | egrep '('script_root.sh'|'PID')' | grep -v grep informa o numero do PID)

Para iniciar automaticamente, o script pode ser chamado pelo rc.local ou jogado em um diretório de inicio automático ou criar um serviço.
Nesse link http://ubuntuforum-br.org/index.php/topic,93697.0.html tem informações sobre o inicio automatico do script com o sistema.
Como esse programa está com o loop infinito, ao utilizar um arquivo para chamar o script, como o rc.local, deve ser informado o caminho com o & no final e o programa deve estar acima da ultima linha do rc.local(exit 0).
Exemplo de como ficaria o final do arquivo em rc.local:
/root/script_root.sh &
exit 0


Detalhes do script:
# Arquivo /etc/shadow - Armazena uma sequencia de dezenas de caracteres que equivale a informações da senha dos usuários.
# Sempre que a senha do usuário muda, os caracteres referente ao usuário no arquivo etc/shadow mudam.
# Se essas informações mudam após a troca da senha, fica fácil bolar um script.

script
Citar
#! /bin/bash
# Script para envio de e-mail quando a senha de root for alterada.

senha1=$(cat /etc/shadow | grep root | tr -d "$");
# armazena em $senha1 a sequencia de caracteres do arquivo /etc/shadow referente a senha de root.

while true; do
# inicia o loop infinito para que o programa esteja sempre em execução.

   senha2=$(cat /etc/shadow | grep root | tr -d "$");
   # armazena em $senha2 a sequencia de caracteres do arquivo /etc/shadow referente a senha de root.

   if [ $senha1 != $senha2 ]; then
   # Compara $senha1 com $senha2
   # Na primeira volta do laço $senha1 e $senha2 são iguais e essa condição é falsa.
   # Eles são iguais por que buscaram a mesma informação no mesmo lugar.
   # Por isso o programa não entrará nessa condição e nenhum e-mail ser-a enviado.
   # ENTRETANTO, na segunda e demais voltas do laço, o programa busca as informações
   # novamente em /etc/shadow e armazena em $senha2 para comparar novamente $senha2 com $senha1.
   # Apenas quando a senha for alterada, essa condição será verdadeira.
   # Nesse caso será enviado um e-mail e em seguida, redefinido o valor de $senha1.
   # Dessa forma, na próxima volta do laço, $senha1 e $senha2 voltarão a ser iguais e essa
   # condição voltará a ser falsa.
   # Se isto não for feito, será enviado inumeros e-mails até que o script seja interrompido manualmente.

      usuarios=$(last | grep still | awk {'print $1,$7}' | sed -e "s/$/;/g")
      #Armazena em usuários o nome dos usuários que estão logados e desde quando estão logados, separados por ";".
      #Dessa forma saberemos ques estava logado quando a senha foi alterada.

      sendEmail -f meu_email@teste.com -t destinatario@gmail.com -u "Alteracao de senha" -m "Senha de root alterada.
      
      Usuarios logados:
      $usuarios" -s meusmtp.teste.com -xu meuusername -xp minhasenha;
      # envio de e-mail pelo sednEmail informando que a senha foi alterada e
      # informando quem estava logado no sistema nesse momento.

      senha1=$(cat /etc/shadow | grep root | tr -d "$");
      # armazena em $senha1 a sequencia de caracteres do arquivo /etc/shadow referente a NOVA senha de root.

   fi

   sleep 1;
   # pausa de 1 segundo e volta ao inicio do laço (While).
   # A pausa deixa a zero o consumo do processador e memória efetuado pelo script.

done


Explicando o envio de e-mail:
É preciso baixar e instalar o sendEmail. sudo apt-get install sendEmail
sendEmail é um programa que envia e-mails pelo terminal ou script sem precisar de configuração.

Opções do sendEmail Na ordem em que deve ser informados:
-f meu_email@teste.com
-t destinatario@gmail.com
-u "Titulo do email"
-m "mensagem do corpo do email"
-a "/home/aquivo_de_anexo.xml" #Opcional caso queira enviar anexos.
-s meusmtp.teste.com  
-xu meu nome de email
-xp minha senha de email;

xu e xp é para servidores que necessitam de autenticação.

EX:
Enviando e-mail pelo gmail
sendEmail -f rainier.lima@gmail.com -t carlos@terra.com.br -u "Teste de envio de e-mmail" -m "Mensagem de teste, favor desconsiderar" -s smtp.gmail.com -o tls=yes -xu rainier.lima -xp minha_senha
obs:
-o tls=yes não costuma ser necessário para emails corporativos.
(Se tiver uma conta no gmail, altere o email (-f), usuário(-xu), a senha (-xp) e também o destinatário (-t) e faça um teste colando essa linha no terminal)
Para mais de um destinatario, apenas separe-os por espaço: user1@email.com user2@email.com...
Aspas dupla é opçional para destinatários (-t) e para o e-mail de origem (-f) Ex: -f "seu_email@teste.com" -t "user1@email.com user2@email.com..."


Att,
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

Rudnei