Adicionando "automagicamente" usuários
Publicado por Iran Macedo (última atualização em 31/08/2010)
[ Hits: 13.524 ]
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.
Gerência do tempo de inicialização das MFs de uma nuvem privada com o OpenNebula
Manutenção básica em partições Windows
Script para conectar a um servidor ssh
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
O que esta havendo com o mercado de ti? (8)
Não consigo cadastrar nenhuma conta online (4)
Hotspot Mikrotik nao carrega pagina de login. (0)