Adicionando "automagicamente" usuários
Publicado por Iran Macedo (última atualização em 31/08/2010)
[ Hits: 13.817 ]
Download 1283081968.adiciona_usuario (versão 2)
Uma das tarefas mais tediosas é criar usuários para rede Windows (Samba - PDC) em servidores Linux. É um tal de verifica se já existe esse usuário, adiciona, muda bash, troca senha... e isso usuário por usuário.
Pensando nisso criei um script que automatiza essa tarefa, deixando-nos apenas o trabalho de digitar o novo Login, Nome do usuário e seu Grupo principal. Esse script toma alguns cuidados, como verificar se o Login digitado já existe, verifica se já existe um diretório antigo em /home de algum outro usuário que usava o mesmo nome, trata letras digitadas em caixa alta, ativa a troca de senha no primeiro acesso para o novo usuário de forma automática e relê a configuração do Samba no final do uso do software.
Após rodar o programa e digitar os novos Login, Nome do usuário e grupo principal, basta revisar as informações e confirmar a entrada dos dados. Depois é só passar a senha genérica para o usuário do Samba (S3nh4123) e pedir para que ele faça logon em uma estação de trabalho Windows. Será pedida a troca da senha no primeiro logon. O seu trabalho? Feito em pequenos 5 passos! :)
Você pode adicionar 1, 10, 100 usuários numa única sessão. Depois de terminado e ao fechar o programa com um único comando, a configuração do Samba é relida automaticamente, validando suas modificações.
Também responde aos parâmetros -V ou --version e aos parâmetros -h ou --help.
Além da automação que este script oferece ao administrador, ele também é uma fonte de estudos para aqueles que estão correndo atrás para aprender Shell Script. ;)
Este script foi severamente testado nas distribuições Debian e Ubuntu. Está funcionando redondo. Mas se você encontrar algum bug, por favor, me comunique. Meu e-mail está no cabeçalho do script.
Espero que gostem! :)
Versão 2 - Enviado por Iran Macedo em 29/08/2010
Changelog: Corrigido um bug no comando "antivirus -V" ou "antivirus --version", onde o script apontava para um local fixo no computador local aonde foi criado.
O script corrigido pode ser baixado aqui.
*** Evite copiar o script direto da página. Sua exibição no HTML modifica alguns códigos e as cores dos textos não vão aparecer corretamente! Ao invés de copiá-lo, baixe o script que contem o código correto!
Abs.
Download 1283081968.adiciona_usuario
#!/bin/bash
#############################################################
#
# Script 1.1 para adicionar novos usuarios.
# Prepara usuarios para SAMBA em Primary Domain Controller (PDC).
#
#############################################################
#
# Programa: adiciona_usuario
# Versão 1.1
# Licença de uso: BSD
# Use, compartilhe, mantenha os créditos de quem criou e/ou ajudar a desenvolver.
#
#############################################################
#
# Versão 1.0 - Comandos sem tratamentos em bloco único.
# Versão 1.1 - Programa em blocos distintos, uso de funções, tratamentos de erros, validação das informações
# passadas pelo usuário, cores, inclusão do -V e --version (versão) e do -h e --help (ajuda).
# Tratamento na digitação das informações em letras maiúsculas.
# Cópia automática deste programa para /usr/bin/ no primeiro uso. Verifica permissões do usuário.
#
#############################################################
#
# Por Iran Macedo.
# E-mail: macedo dot if at gmail dot com
# última modificação: 15/08/2010.
#
#############################################################
param="$1" #Variável para Função Parametros. Devolve o primeiro parâmetro.
prog="$0" #Variável para Função Parametros. Devolve o comando utilizado para rodar este prog.
cicle=C
cadastro=0
rodou=0
# Verifica se o programa já está em /usr/bin. Se já está, segue sem alterações. Se não está,
# faz um hardlink deste para /usr/bin.
instalado=$(ls /usr/bin/ |grep -sow $(basename "$0")) > /dev/null 2>&1
if [ -z $instalado ];then
ln "$prog" /usr/bin/adiciona_usuario
clear
echo ""
echo -e "{FONTE}33[36;1m Olá! Rodando este programa pela primeira vez? :)
Da próxima vez, rode este programa somente digitando o comando: {FONTE}33[0m
{FONTE}33[36;1;5m [ adiciona_usuario ]{FONTE}33[0m {FONTE}33[36;1m pelo seu Terminal.
E lembre-se, este programa precisa ser rodado pelo Root ;)
root@pc# adiciona_usuario{FONTE}33[0m
Pressione [ ENTER ] para continuar..."
read
fi
#FUNÇÃO PRINCIPAL
###
Main() {
Parametros
Cores
Title
rodou=1
case $cicle in
[Ss]) Sair ;;
[Cc]) Continue ;;
*) Ops ;;
esac
} #Fim Main
#FUNÇÃO PARAMETROS
# Se o usuário usar algum parametro, as informações serão passadas e o programa será fechado logo após.
# Parametros -V e --version (versão), -h e --help (ajuda).
###
Parametros() {
# Variável rodou verifica se o programa foi rodado por inteiro (adiciona_usuario)
# ou se foi utilizado um dos parâmetros (adiciona_usuario -V, por exemplo).
if [ "$rodou" = "0" ];then
# param = $1, primeiro parâmetros após o comando.
case "$param" in
-V | --version) echo ""
echo " Programa: "$(basename "$0" ) ;
# Pega a versão direto do cabeçalho.
echo -n " Versão atual: " ;
grep -m 1 "Versão" /etc/init.d/adiciona_usuario |cut -d - -f 1 |tr -d \# ;
# Pega a data da modificação direto do cabeçalho.
echo -n " Data da última modificação: " ;
grep -m 1 "modificação" /etc/init.d/adiciona_usuario |cut -d : -f 2 |tr -d \# ;
echo " Criado por Iran Macedo."
echo "";
exit 0 ;;
-h | --help) Mensagem_Uso ;
exit 0 ;;
# Para qualquer outro parametro, mensagem de uso.
# Caso $param tenha um outro parâmetro, inválido.
*) if [ -n "$param" ];then
echo ""
echo -e "{FONTE}33[31;1;5m Ooops!!!"
echo -e " Opção inválida: $param!{FONTE}33[0m"
echo
echo " Parâmetros válidos: "
echo " -h | --help |-V | --version"
exit 1
fi ;;
esac
fi
} #Fim Parametros
#FUNÇÃO DE AJUDA
# Esta função é invocada quando utilizados os parametros -h ou --help.
###
Mensagem_Uso() {
clear
echo "
adiciona_usuario"
echo -n "
Local do arquivo ";whereis adiciona_usuario
echo "
Programa para adição de usuários Windows no PDC Samba.
Para evitar erros, propositalmente não coloquei aqui as opções de
desabilitar ou excluir usuários do PDC. Caso seja esta a sua necessidade, utilize
o programa [ delete_usuario ] que pode ser baixado no site vivaolinux.com.br.
Uso: $(basename "$0") [-h | -V]
-h, --help Opcional. Mostra esta tela de ajuda e sai.
-v, --version Opcional. Mostra a versão atual deste programa e sai.
Para rodar o programa, digite [ adiciona_usuario ] no seu Terminal.
Este programa adiciona um hardlink na pasta /usr/bin, não sendo necessário utilizar o caminho completo para o programa.
Criado por Iran Macedo.
"
} #Fim Mensagem_Uso
#FUNÇÃO TITULO
###
Title() {
clear
echo
echo " ***************************************************"
echo " * PROGRAMA PARA ADICIONAR NOVOS USUARIOS *"
echo " * SERVIDOR PDC - EMPRESA versão 1.1 *"
echo " ***************************************************"
#XXX Mude o EMPRESA pelo nome da sua empresa! ;)
echo
if [ "$cadastro" = "1" ];then #Se já houve algum cadastro de usuário nesta sessão.
echo -e " * Ultimo usuário cadastrado: {FONTE}33[1;36m $LAST {FONTE}33[0m" #ULTIMO USUÁRIO REALMENTE CADASTRADO.
echo -e " * Ultimo login digitado: {FONTE}33[1;36m $NOME {FONTE}33[0m" #ULTIMA TENTATIVA DE CADASTRO.
else
echo -e " * Ultimo usuário cadastrado: {FONTE}33[1;36m Nenhum {FONTE}33[0m"
echo -e " * Ultimo login digitado: {FONTE}33[1;36m Nenhum {FONTE}33[0m"
fi
echo ""
# Verifica poderes de superadmin.
if [ "$USER" != "root" ];then
echo -e " {FONTE}33[1;31m* Você não está logado como root!!! {FONTE}33[0m"
echo " * Por favor, verifique suas permissões!"
echo ""
exit 1
fi
} #Fim Title
#FUNÇÃO Continue
###
Continue() {
unset LOGIN
echo -n " - Digite o [ LOGIN ] do novo usuario: " ;
read LOGIN ;
# Tratando possível erro na digitação (em maiúsculas).
LOGIN=$(echo "$LOGIN" |tr [[:upper:]] [[:lower:]])
unset NAME ;
# Filtra o arquivo passwd e compara variável LOGIN com as entradas.
NAME=$(cat /etc/passwd |grep -siow $LOGIN) > /dev/null 2>&1 ;
# Se variável NAME estiver vazia, usuário não existe. Continuamos.
if [ -z "$NAME" ];then
unset NOME
unset GRUPO
echo -n " - Digite o [ NOME ] completo do novo usuario: "
read NOME
echo -n " - Digite o [ GRUPO ] principal do usuario: "
read GRUPO
# Tratando possível erro na digitação (em maiúsculas).
GRUPO=$(echo "$GRUPO" |tr [[:upper:]] [[:lower:]])
unset GROUP
# Filtra o arquivo group e compara variável GRUPO com as entradas.
GROUP=$(cat /etc/group |grep -siow $GRUPO) > /dev/null 2>&1
Verify # Próximo passo, função Verify.
# Se variável NAME estiver cheia, então o usuário existe. Chama Warn para avisar.
else Warn
fi ;
clear ;
} #Fim Continue
# $? = STATUS DO ÚLTIMO COMANDO DADO
# STATUS = 0 OU 1 (FUNCIONOU) <-- RESPOSTA DE SUCESSO DO GROUPADD!
#STATUS >= 2 E <= 6 (ERRO) <-- RESPOSTA DE ERRO DO GROUPADD!
#FUNÇÃO GRUPO
###
Add_group() {
groupadd "$GRUPO" > /dev/null 2>&1
# Se o comando anterior (Add_group) retornar erros do 2 ao 6,
# apagar grupo adicionado e avisar. Voltar ao Principal.
###
if [ $? -ge "2" -a $? -le "6" ];then #ASSEGURA CONTRA ERROS
delgroup --only-if-empty --quiet $GRUPO > /dev/null 2>&1
echo
echo -e "{FONTE}33[1;31m * Dados inválidos! Tente de novo. {FONTE}33[0m"
echo
echo " * [ "$GRUPO" ] não pode ser utilizado como GRUPO!"
echo " * Pressione ENTER para Continuar."
read
cadastro=1
clear
Main
fi
DONE=1 #SE DER ALGUM ERRO, SETA 1 SE O GRUPO FOI ADICIONADO.
} #Fim Add_group
#FUNÇÃO USUARIO
###
Add_user() {
groupadd "$LOGIN" > /dev/null 2>&1
# Se o comando anterior (Add_group) retornar erros do 2 ao 6,
# apagar grupo adicionado e avisar. Voltar ao Principal.
if [ $? -ge "2" -a $? -le "6" ];then #ASSEGURA CONTRA ERROS
test "$DONE" = "1" && delgroup --only-if-empty --quiet $GRUPO > /dev/null 2>&1
echo
echo -e "{FONTE}33[1;31m * Dados inválidos! Tente de novo. {FONTE}33[0m"
echo
echo " * [ "$LOGIN" ] não pode ser utilizado como LOGIN!"
echo " * Pressione ENTER para voltar."
read ""
cadastro=1
clear
Main
fi
# Se não tivermos erros por comparação (DONE) ou erros do comando anterior
# (Add_user), adicionamos as demais informações do usuário.
ls /home |grep -siow "$LOGIN" > /dev/null 2>&1
# Algumas vezes deletamos usuários, mas não apagamos as suas pastas.
# Desta forma, ao criar um novo usuário com o mesmo Login que um anterior,
# a possibilidade de erro ao usar uma pasta com permissões dúbias é grande.
if [ "$?" = "0" ];then
delgroup --only-if-empty --quiet $GRUPO > /dev/null 2>&1
delgroup --only-if-empty --quiet $LOGIN > /dev/null 2>&1
echo " "
echo -e " {FONTE}33[1;31m * Diretório já existente! Por favor, verifique o diretório /home! {FONTE}33[0m"
echo " * Pressione [ ENTER ] para voltar!"
read
Main
fi
useradd -d /home/"$LOGIN" -m -c "$NOME" -s /bin/false -g "$GRUPO" "$LOGIN" > /dev/null 2>&1
gpasswd -a "$LOGIN" "users" > /dev/null 2>&1
gpasswd -a "$LOGIN" "sambashare" > /dev/null 2>&1
gpasswd -a "$LOGIN" "$LOGIN" > /dev/null 2>&1
gpasswd -a "$LOGIN" "$GRUPO" > /dev/null 2>&1
#XXX Adicione mais grupos aqui, se necessário!
# OS DOIS COMANDOS ABAIXO SAO PARA USO DO SAMBA EM PDC
# CASO NAO USE PDC, COMENTE-OS!
# ESTA LINHA SETA A SENHA DO USUARIO.
(echo "S3nh4123";echo "S3nh4123")| smbpasswd -s -a "$LOGIN" > /dev/null 2>&1
# Pede alteração de senha no primeiro logon do Windows (para uso de perfil remoto).
net sam set pwdmustchangenow "$LOGIN" yes > /dev/null 2>&1
echo
echo " * Usuario $NOME cadastrado com sucesso!"
echo
echo " * Troca de senha no primeiro logon no Windows ativada!"
echo
echo -n " * Grupos de "$LOGIN": ";groups $LOGIN
echo
unset cicle
echo -n " ** Pressione C para CONTINUAR ou S para SAIR: "
read cicle
clear
cadastro=1 #SETA A VARIAVEL DO PAINEL (ULTIMO CADASTRO E LOGIN REALIZADO).
DONE=0 #Zera variável DONE para ser utilizada por um novo usuário.
} #Fim Add_user
#FUNÇÃO WARNING
#CASO O LOGIN ESTEJA EM USO OU POSSUI CARACTERES INVÁLIDOS, ADMIN RECEBE AVISO.
###
Warn() {
echo
echo -e "{FONTE}33[1;31m * ATENÇÃO!!! Login $LOGIN em uso ou inválido! {FONTE}33[0m"
echo
echo -n " * Grupos de "$LOGIN": ";groups $LOGIN
echo
unset cicle
echo -n " - Pressione C para CONTINUAR ou S para SAIR: "
read cicle
clear
Main
} #Fim Warn
#FUNÇÃO VERIFICAR
# Somente pede a confirmação do usuário antes de continuar com o procedimento.
###
Verify() {
echo
echo " * Estes dados estão corretos?"
echo
echo " - LOGIN: "$LOGIN""
echo " - NOME: "$NOME""
echo " - GRUPO: "$GRUPO""
echo
unset VER
echo -n " * Pressione S para SIM ou N para NÃO: "
read VER
Confirme #Após verificação, chama função Confirme.
} #Fim Verify
#FUNÇÃO CONFIRMAR
#RECEBE VARIAVEL VER DE VERIFY.
###
Confirme() {
case $VER in
[Ss]) if [ -z "$GROUP" ];then #SE RESPOSTA = SIM E NÃO EXISTIR O GRUPO...
Add_group
Add_user
else #SE RESPOSTA = SIM E GRUPO EXISTIR.
Add_user
fi ;
LAST=$NOME ;;
[Nn]) echo ; #SE RESPOSTA = NÃO...
echo " * Informações descartadas!" ;
echo
unset cicle ;
echo -n " * Pressione C para CONTINUAR ou S para SAIR: " ;
read cicle ;
clear ;
Main ;;
*) echo ; #PARA QUALQUER OUTRA RESPOSTA.
echo " * Opção inválida!: [ $VER ]" ;
Verify ;;
esac
# Independente da resposta, o programa loopa para Main.
Main
} #Fim Confirme
#FUNÇÃO OPS
#PARA RESPOSTA INVALIDA DA FUNÇÃO PRINCIPAL
###
Ops() {
echo -e "{FONTE}33[1;31m *** ATENÇÃO!!! OPÇÃO INVÁLIDA: [ "$cicle" ] {FONTE}33[0m" ;
echo
unset cicle ;
echo -n " *** Digite C para CONTINUAR ou S para SAIR: " ;
read cicle ;
clear ;
# Programa loopa para Main.
Main ;
} #Fim Ops
#FUNÇÃO SAIR
#HORA DE RELER O SAMBA E VOLTAR PARA O TRABALHO :)
###
Sair() {
#XXX Estes são alguns meios de invocar o serviço do Samba. Verifique qual
# o seu Linux utiliza, descomente-o e comente os demais.
service smbd reload ;
service nmbd reload ;
#service samba reload ;
#/etc/init.d/samba reload ;
clear ;
echo " Seu último dígito: [ "$cicle" ]" #PARA O CASO DO PROGRAMA FECHAR E VC NÃO ENTENDER NADA.
echo
echo -e "{FONTE}33[1;31m Bye Admin! {FONTE}33[0m" ;
echo ;
exit 0 ;
} #Fim Sair
#FUNÇÃO CORES
# Carrega cores para os destaques em tela.
#XXX Adicione mais cores, caso necessário!
###
Cores() {
vermelho="{FONTE}33[0;31m"
ciano="{FONTE}33[0;36m"
} #Fim Cores
Main #ENCERRA A FUNÇÃO MAIN.
Substituir strings em arquivos ascII
Controlando bloqueios de máquinas com squid.conf
Medindo a velocidade de conexão
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Instalando partes faltantes do Plasma 6
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Estou tentando ser legalista, mas tá complicado! (9)
espelhar monitores nao funciona (2)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (1)









