Gerenciamento do Samba com Dialog

Publicado por Anderson Rodrigues (última atualização em 01/06/2010)

[ Hits: 9.659 ]

Homepage: http://pedreiros.homelinux.com

Download rockandroll.sh




Script para gerenciamento do samba feito com Dialog. Para homenagear os que adoram Linux e amam Rock and Roll, dei o nome de rockandroll.sh.

Para ele rodar basta instalar o dialog (ex.: apt-get install dialog ou yum install dialog).

Dar permissão de execução  (chmod +x rockandroll.sh).

E executar:

$ ./rockandroll.sh

Lembrando que esse srcipt ainda está em desenvolvimento, mas como sou ansioso, quis colocar aqui para compartilhar. Fiquem a vontade em editá-lo etc...

Experimente ver as opções -V --version e -h --help que são bastante interessantes também em se ter em um script como esse.

Abraço e até logo.

  



Esconder código-fonte

#!/bin/bash
#SCRIPT PARA ADICIONAR E EXCLUIR USUARIOS DO SAMBA
# AUTOR: Anderson Rodrigues
# Versão 1: 02/10/2009
# Versão 1.1: 09/05/2010: Inserido controle de -V --version e -h --help
#
##################################################################################################################

MENSAGEM_USO="
Uso: $(basename "$0") [-h | -V]

Sistema para gerenciamento do samba, nele você pode inserir, modificar e apagar usuário do samba e do linux.
Cria e apaga grupos, adiciona e retira usuários dos grupos.
Altera senha dos usuários e etc...

Faça bom uso do programa!

-h, --help   Mostra essa tela de ajuda
-V, --version   Mostra a versão do programa
"

#tratamento das opções de linha de comando

case "$1" in

-h | --help)

echo "$MENSAGEM_USO"

exit 0

;;

-V | --version)
   
   echo -n $(basename "$0")
   #Extrai a versão diretamente dos cabeçalhos do programa
   grep '^# Versão ' "$0" | tail -1 | cut -d : -f 1 | tr -d \#
   exit 0
;;

*)


   if test -n "$1"

   then

      echo "Opção Inválida: $1

-h --help para ajuda"


   exit 1

   fi

;;

esac

##### FUNCOES ######

# ADICIONAR USUARIO

aduser() 

{
   dialog --backtitle "$titulo" --inputbox 'Nome completo do usuario:' -1 -1 '' 2> /tmp/nome
   dialog --backtitle "$titulo" --inputbox 'Nome de usuario:' -1 -1 '' 2> /tmp/usuario
 
   Nome=$(cat /tmp/nome)
   Usuario=$(cat /tmp/usuario)
 
   verifica=`cat /etc/passwd | cut -d : -f 1 | grep -i ^$Usuario$`
   
# VERIFICAR SE USUARIO JÁ EXISTE NO SISTEMA 

   if [ $verifica ==NULL ]; then
      
      # SOLICITAR E DEFINIR SENHA DO USUARIO A SER CRIADO
      dialog --backtitle "$titulo" --inputbox 'Digite a senha para '$Usuario':' -1 -1 '' 2> /tmp/senha
            
      Senha=$(cat /tmp/senha)
      
      # ADICIONAR USUARIO NO LINUX
      useradd -c "$Nome" -p `echo $Senha` $Usuario 
      
      # ADICIONAR USUARIO NO SAMBA
      (echo $Senha; echo $Senha) | smbpasswd -s -a $Usuario    

      # EXIBE NA TELA USUARIO QUE FOI CRIADO
      dialog --backtitle "$titulo" --msgbox "Usuario criado:\n\n $Nome - $Usuario \n$verifica" -1 -1
      
      # CHAMA MENU NOVAMENTE
      menu

   else

      dialog --backtitle "$titulo" --msgbox "Usuário '$Usuario' já existe, escolha outro!" -1 -1 
      
      menu
         
   fi

} 

###################################################################################################
# SAIR DO SISTEMA
###################################################################################################

   sair()
   
   { 
   
      dialog --infobox 'Sistema finalizado pelo usuario'  0 0
 
   }
   
###################################################################################################
# EXIBIR USUARIOS
###################################################################################################
   
   exibir_users()

   {

      usuarios=`cat /etc/passwd | cut -d : -f 1`      
      
      usuarios_smb=`cat /etc/samba/smbpasswd | cut -d : -f 1`   
      
      dialog --msgbox "Usuários Linux:\n\n '$usuarios'\n\n Usuários Samba:\n\n $usuarios_smb" -1 -1

      menu 

   }
   
###################################################################################################
# EXCLUIR USUÁRIOS
###################################################################################################

   excluir_user()

   {
      dialog --inputbox 'Digite o nome do usuário que deseja excluir:' -1 -1 '' 2> /tmp/user_del
   
      userdel=$(cat /tmp/user_del)
      
      verifica_user_del=`cat /etc/passwd | cut -d : -f 1 | grep ^$userdel$`
   
   # VERIFICA SE USUARIO A SER EXCLUIDO EXISTE
   if [ $verifica_user_del ==NULL ]; then 
      
      dialog --msgbox "Usuário '$userdel' não existe '$verifica_user_del'" -1 -1
   
      menu
   
   else
   
      smbpasswd -x $userdel

      userdel -r $userdel

      dialog --msgbox "Usuário $userdel excluído com sucesso!" -1 -1   

      menu

   fi

   }

###################################################################################################   
# EXIBIR GRUPOS
###################################################################################################
   
   exibir_grupos()
   
   {

      grupos=`cat /etc/group | cut -d : -f 1`

      dialog --msgbox "Grupos Existentes:\n\n '$grupos'" -1 -1

      gerenciar_grupos

   }

###################################################################################################
# ALTERAR SENHA
###################################################################################################

   alterar_senha()

   {
      dialog --inputbox "Digite o nome do usuário que \n deseja alterar a senha:" -1 -1 '' 2> /tmp/user_alterar
      
      usuario_alterar=$(cat /tmp/user_alterar)      
      
      verifica_alterar=`cat /etc/passwd | cut -d : -f 1 | grep ^$usuario_alterar$`

   if [ $verifica_alterar ==NULL  ]; then

      dialog --msgbox "Usuário '$usuario_alterar' não existe!" -1 -1

      menu
   
   else

      dialog --inputbox "Digite a nova senha para '$usuario_alterar':" -1 -1 '' 2> /tmp/novasenha

      novasenha=$(cat /tmp/novasenha)

      # ADICIONAR USUARIO NO LINUX
      usermod -p `echo $novasenha` $usuario_alterar 
      
      # ADICIONAR USUARIO NO SAMBA
      (echo $novasenha; echo $novasenha) | smbpasswd -s -a $usuario_alterar    
      
      dialog --msgbox "Senha de '$usuario_alterar' alterada com sucesso!" -4 -4

      menu      

   fi

   }

###################################################################################################
# ADICIONAR MAQUINA NO SAMBA
###################################################################################################

   adicionar_maquina()

   {
      
   dialog --inputbox "Digite o nome da máquina a ser adicionada:" -1 -1 '' 2> /tmp/novamaquina

   nova_maquina=$(cat /tmp/novamaquina)
      
   verifica_nova_maquina=`cat /etc/passwd | cut -d : -f 1 | grep ^nova_maquina$`


   if [ $verifica_nova_maquina ==NULL ]; then

      dialog --msgbox "Máquina '$nova_maquina' adicionada com sucesso!" -1 -1
      
      menu      
   else 

      dialog --msgbox "Máquina já existe, escolha outro nome!" -1 -1

      menu

   fi

   }

###################################################################################################
# REMOVER MAQUINA
###################################################################################################

   remover_maquina()

   {

      dialog --msgbox "OPCAO EM DESENVOLVIMENTO" -1 -1
      
      menu

   }
   
###################################################################################################   
# GERENCIAR GRUPOS
###################################################################################################

   gerenciar_grupos()
   
   {
   
   dialog --backtitle "Gerenciar Grupos" --inputbox "Escolha a opção:\n
      \n
      1 - Exibir Grupos\n
      2 - Adicionar usuario em grupo\n
      3 - Remover usuario de um grupo\n
      4 - Criar Grupo\n
      5 - Remover Grupo\n
      0 - Voltar para MENU principal\n" -1 -1 2>/tmp/ger_grupos
      
      Escolha_ger_grupos=$(cat /tmp/ger_grupos)

      case $Escolha_ger_grupos in

         1) exibir_grupos ;;
         2) adicionar_em_grupo ;;
         3) remover_em_grupo ;;
         4) criar_grupo ;;
         5) remover_grupo ;;
         
         6) criar_grupo ;;
         7) alterar_senha ;;
         8) adicionar_maquina ;;
         9) remover_maquina ;;
         0) menu ;;
         *) dialog --msgbox 'Opção Inválida' -1 -1; menu ;; 
      esac
      
   }

###################################################################################################   
# CRIAR GRUPO
###################################################################################################

   criar_grupo()

   {
      dialog --inputbox "Digite o nome do grupos a ser criado" 0 0 '' 2>/tmp/novogrupo
      novogrupo=$( cat /tmp/novogrupo)
      
      verif_grupo=`cat /etc/group | cut -d : -f 1 | grep ^$novogrupo$`

      if [ $verif_grupo ==NULL ]; then      

         groupadd $novogrupo         

         dialog --msgbox "Grupo '$novogrupo' criado com sucesso!" 0 0
         
         gerenciar_grupos         

      else

         dialog --msgbox "Grupo '$novogrupo' já existe!" 0 0 

         gerenciar_grupos

      fi   

   }
###################################################################################################
# ADICIONAR USUARIO EM GRUPO(S)
###################################################################################################

   adicionar_em_grupo()

   {
   
      dialog --inputbox "Digite o nome do usuário:" 0 0 '' 2>/tmp/user_grupo
      
      usuario_grupo=$(cat /tmp/user_grupo)
      
      verifica=`cat /etc/passwd | cut -d : -f 1 | grep -i ^$usuario_grupo$`
   
   if [ $verifica ==NULL ]; then # VERIFICAR SE USUARIO JÁ EXISTE NO SISTEMA 

      dialog --backtitle "$titulo" --msgbox "Usuario não existe!" 0 0
      
      gerenciar_grupos

   else

      
      cat /etc/group | cut -d: -f 1-2 | sed s/:/' '/g | sed s/x/'off'/g | sed s/' '/'\n\"grupo\"\n'/g >/tmp/grupos
      
      lines=`cat /tmp/grupos | wc -l`

        linhas=`xpr $lines - 1`
         
        x=1
                while [ $x -le $linhas ]; do
            
               cat /tmp/grupos | head -$x | tail -1 >> /tmp/novosgrupos
               
               x=`expr $x + 1`
               
               dialog --progressbox "Aguarde..." 0 0
               
            done
            
      echo ")" >>/tmp/novosgrupos
      
      osgrupos=$( dialog --stdout \
      --checklist "ESCOLHA O GRUPO:" 0 0 0 \
      `cat /tmp/grupos`
      )
      
      rm /tmp/grupos
      echo "$osgrupos" >/tmp/grupos
      
      qtd_grupos=`cat /tmp/grupos | wc -w`
      
      y=1
      
         while [ $y -le $qtd_grupos ]; do
         
            group[$y]=`cat /tmp/grupos | cut -d " " -f "$y" | tr '"' " "`
                                     
            echo ${group[$y]}
            
            gpasswd -a $usuario_grupo ${group[$y]}
            
            y=`expr $y + 1`
            
         done
         
         dialog --backtitle "$titulo" --msgbox "Usuario '$usuario_grupo' adicionado com sucesso!" -1 -1
         
         gerenciar_grupos      
         
   fi
   
   }

   
###################################################################################################
# REMOVER USUARIO DE GRUPO(S)
###################################################################################################

   remover_em_grupo()

   {
   
      dialog --inputbox "Digite o nome do usuário:" 0 0 '' 2>/tmp/user_grupo
      
      usuario_grupo=$(cat /tmp/user_grupo)
      
      verifica=`cat /etc/passwd | cut -d : -f 1 | grep -i ^$usuario_grupo$`
   
   if [ $verifica ==NULL ]; then # VERIFICAR SE USUARIO JÁ EXISTE NO SISTEMA 

      dialog --backtitle "$titulo" --msgbox "Usuario não existe!" 0 0
      
      gerenciar_grupos

   else

      
      cat /etc/group | cut -d: -f 1-2 | sed s/:/' '/g | sed s/x/'off'/g | sed s/' '/'\n\"grupo\"\n'/g >/tmp/grupos
      
      lines=`cat /tmp/grupos | wc -l`

        linhas=`xpr $lines - 1`
         
        x=1
                while [ $x -le $linhas ]; do
            
               cat /tmp/grupos | head -$x | tail -1 >> /tmp/novosgrupos
               
               x=`expr $x + 1`
               
               dialog --progressbox "Aguarde..." 0 0
               
            done
            
      echo ")" >>/tmp/novosgrupos
      
      osgrupos=$( dialog --stdout \
      --checklist "ESCOLHA O GRUPO:" 0 0 0 \
      `cat /tmp/grupos`
      )
      
      rm /tmp/grupos
      echo "$osgrupos" >/tmp/grupos
      
      qtd_grupos=`cat /tmp/grupos | wc -w`
      
      y=1
      
         while [ $y -le $qtd_grupos ]; do
         
            group[$y]=`cat /tmp/grupos | cut -d " " -f "$y" | tr '"' " "`
                                     
            echo ${group[$y]}
            
            gpasswd -d $usuario_grupo ${group[$y]}
            
            y=`expr $y + 1`
            
         done
         
         dialog --backtitle "$titulo" --msgbox "Usuario '$usuario_grupo' removido de grupo(s) com sucesso!" -1 -1
         
         gerenciar_grupos      
         
   fi
   
   }

###################################################################################################
# REMOVER GRUPO(S)
###################################################################################################

   remover_grupo()

   {
   
      cat /etc/group | cut -d: -f 1-2 | sed s/:/' '/g | sed s/x/'off'/g | sed s/' '/'\n\"grupo\"\n'/g >/tmp/grupos
      
      lines=`cat /tmp/grupos | wc -l`

        linhas=`xpr $lines - 1`
         
        x=1
                while [ $x -le $linhas ]; do
            
               cat /tmp/grupos | head -$x | tail -1 >> /tmp/novosgrupos
               
               x=`expr $x + 1`
               
               dialog --progressbox "Aguarde..." 0 0
               
            done
            
      echo ")" >>/tmp/novosgrupos
      
      osgrupos=$( dialog --stdout \
      --checklist "ESCOLHA O(S) GRUPO(S) PARA APAGAR:" 0 0 0 \
      `cat /tmp/grupos`
      )
      
      rm /tmp/grupos
      echo "$osgrupos" >/tmp/grupos
      
      qtd_grupos=`cat /tmp/grupos | wc -w`
      
      y=1
      
         while [ $y -le $qtd_grupos ]; do
         
            group[$y]=`cat /tmp/grupos | cut -d " " -f "$y" | tr '"' " "`
                                     
            echo "Apagando grupo:${group[$y]}"
            
            groupdel ${group[$y]}
            
            y=`expr $y + 1`
            
         done
         
         dialog --backtitle "$titulo" --msgbox "Grupo(s) apagados do sistema com sucesso!" -1 -1
         
         gerenciar_grupos      
   
   }

###################################################################################################
# MENU DO SISTEMA
###################################################################################################

   menu()
   
   {
      dialog --backtitle "$titulo" --inputbox "Escolha a Opcao Desejada:\n
      \n
      1 - Adicionar Usuario\n
      2 - Exibir Usuarios\n
      3 - Excluir Usuario\n
      4 - Gerenciar Grupos\n
      5 - Alterar Senha\n
      6 - Adicionar Maquina\n
      7 - Remover Maquina\n
      0 - Sair do Sistema\n" -1 -1 2>/tmp/escolhamenu
   
      EscolhaMenu=$(cat /tmp/escolhamenu)

      case $EscolhaMenu in

         1) aduser ;;
         2) exibir_users ;;
         3) excluir_user ;;
         4) gerenciar_grupos ;;
         5) alterar_senha ;;
         6) adicionar_maquina ;;
         7) remover_maquina ;;
         0) sair ;;
         *) dialog --msgbox 'Opção Inválida' -1 -1; menu ;; 
      esac
      
   }

###################################################################################################
# INICIO
###################################################################################################

titulo="*** SCRIPT ADMINISTRAÇÃO SAMBA *** by Anderson Rodrigues "

# PERGUNTA SE USUARIO DESEJA EXECUTAR SCRIPT OU SAIR DO SISTEMA 

dialog --backtitle "$titulo" --yesno 'Deseja Entrar no Sistema?' -1 -1
# DEFINIR VARIAVEL COM A ESCOLHA ANTERIOR 
Escolha1=$?

#IF PARA Escolha1 (0=sim e 1=não) 

if [ $Escolha1 == 0 ]; then

   menu

else

   sair 

fi

###################################################################################################
##### FIM ##### FIM ##### FIM ##### FIM ##### FIM ##### FIM ##### FIM ##### FIM ##### FIM ##### FIM
###################################################################################################

Scripts recomendados

Script para criação de pacote rpm.

Backup de Base de Dados

Script para renomear arquivos

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - RESTAURANDO MBOX VIA SSH

Ping mesmo com firewall


  

Comentários
[1] Comentário enviado por Brunorb86 em 04/06/2010 - 16:24h

Hum script muito interessante hein leitão... abraço.

[2] Comentário enviado por nickmarinho em 04/06/2010 - 20:49h

Gostei do script, parabéns.
Me aventuro bastante com sh e vou usar muito esse seu.

Abraços

[3] Comentário enviado por ssrobson_9 em 03/12/2010 - 07:08h

Muito show esse script, so queria saber tem umas funções nele q nao funciona no Suse tipo alterar o grupo do usuario como faço essa alteração nele para que eu use ele no meu suse aqui na empresa.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts