[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