Adicionando "automagicamente" usuários

Publicado por Iran Macedo (última atualização em 31/08/2010)

[ Hits: 13.457 ]

Download adiciona_usuario

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ões atualizadas deste script

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


Esconder código-fonte

#!/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.


Scripts recomendados

Script para criação de pacotes auto extrator.

Verifica espaço em disco

Cluster beowulf

Restaurar backup de uma conta cpanel mesmo que ela já exista

Script para autenticar Speedy Business


  

Comentários
[1] Comentário enviado por SamL em 11/09/2010 - 22:12h

Gostei do sript e da palavra "automagicamente" xD

[2] Comentário enviado por xirux em 11/01/2012 - 15:02h

Caraca mano, simplesmente matou á pau!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts