Adicionando "automagicamente" usuários
Publicado por Iran Macedo (última atualização em 31/08/2010)
[ Hits: 13.458 ]
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.
Gerar arquivos CSV no postgresql
Desligando infraestrutura de ITM6
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO O AMBIENTE
Programação do Dia da Tv Aberta
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Preciso resolver um erro de DPKG (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (2)
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta