shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Script para mudar senhas


From: pinguimrmbr
Subject: Re: Script para mudar senhas
Date: Fri, 05 Nov 2004 09:27:17 -0000
User-agent: eGroups-EW/0.82

> Periodicamente necessito trocar a senha de todos os usuários do 
linux 
> (não do samba), e gostaria de criar um script que buscasse uma 
lista de 
> usuários em um arquivo qualquer e gerasse uma sequencia 
alphanumerica de 
> 6 digitos para cada nome de usuário deste arquivo. Depois o script 
iria 
> checar se existe cada usuário do arquivo no meu sistema, caso 
existe, 
> ele mudaria o passwd para o que foi gerado no arquivo.

Olas

Quer pagar quanto ?????? :)

A primeira questao é: por que vc nao faz com que as senhas tenham 
data de expiracao e o usuario encarrega-se de trocar a sua senha ? É 
simples:

passwd usuario -x 90 -w 5 -i 3

esse comando fará com que usuario tenha uma senha valida por 90 dias, 
será avisado da expiracao da senha 5 dias antes e sua conta tornar-se-
á inativa 3 dias apos a expiracao da senha, caso a mesma nao tenha 
sido trocada. Olha que divertida fica a linha do /etc/shadow para o 
usuario:
usuario:$1$BrxE6JiM$PZMJvswxTuceKeB6nMYvJ/:12727:0:90:5:3::
                                                    ^--Olha os nossos 
parametros aqui :)


Entretanto, se vc quer seguir pelo caminho do aruqiov, precisamos ai 
de 3 conceitos:

1) Como ler o arquivo qualquer
2) Como gerar as senhas 
3) Como casar os usuarios/senhas com o sistema de senhas ( 
tipicamente passwd / shadow )

em (1), digamos que vc tenha o seguinte arquivo:

usuario1
usuario2
usuario3


Para ler um arquivo, um cat arquivo resolve... Vamos jogar a saida 
dele numa lista e trabalhar com cada uma de suas linhas, num for ou 
while read. Para efeitos de didatismo, vou usar o for. Entao, a 
primeira parte do nosso script fica:

#!/bin/bash

LISTA=`cat arquivo.txt`

for USER in $LISTA ; do 

# eu poderia usar uma construcao for USER in `cat arquivo.txt` ; do
# com o mesmo efeito
# Agora, devemos gerar a senha, absolutamente aleatoria. 
# As funcoeszz do Aurelio tem uma funcao zzsenha que faz todo o 
# trabalho para voce. Voce as encontra em 
# http://aurelio.net/zz/funcoeszz

    PASS=`zzsenha 6`

# Essa linha acima responde nosso conceito (2)    
# Agora que ja temos os dois parametros, precisamos verificar se o 
# usuario existe no sistema. Para isso, vamos usar o comando grep no 
# arquivo /etc/passwd. Se fizermos grep usuario1 /etc/passwd e o 
# usuario existir, o grep vai me retornar o registro do usuario, senao
# nao retorna nada. Como jogar isso numa estrutura de condicao para
# ter algo como :
# Se $USER existe ; entao mude a senha ; fim-se ?

   if grep $USER /etc/passwd ; then

   # Aqui, pegamos o sucesso ou falha da execucao do comando grep,
   # ou seja, estamos falando que, se o comando grep trouxe algum
   # resultado ( no caso, encontrou o usuario ), faça algo. 
   # O trecho de codigo abaixo foi chupinhado do Pucca, na mensagem
   # http://br.groups.yahoo.com/group/shell-script/message/10806
       echo "Modificando senha do usuario $USER para $PASS"
       echo $PASS | passwd $USER --stdin
   fi
done
    

Removendo-se os comentarios:

#!/bin/bash

LISTA=`cat arquivo.txt`

for USER in $LISTA ; do 
    PASS=`zzsenha 6`
   if grep $USER /etc/passwd ; then
       echo "Modificando senha do usuario $USER para $PASS"
       echo $PASS | passwd $USER --stdin
   fi
done

Bem pequeno, nao ? O trabalho pesado ja foi feito pelos Thobias e 
Aurelio na construcao do zzsenha, pelo Pucca na manha do --stdin, 
entao a coisa ficou facil. 

Claro que vc pode optar por nao usar a funcao zzsenha e escrever sua 
propria funcao aleatoria para gerar senhas aleatorias mas, 
sinceramente, eu prefiro utilizar o ótimo trabalho ja feito do que 
reinventar a roda, afinal, uma das qualidades que um programador deve 
buscar é a preguiça :)

Ja que vc esta comecando, pegue o final de semana e passeie pelas 
paginas do Aurelio ( www.aurelio.net ) e do Thobias ( 
www.thobias.org ). Voce vai aprender MUITO la

Um abraço

MrBiTs









reply via email to

[Prev in Thread] Current Thread [Next in Thread]