Gerenciamento do Samba com Dialog

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

[ Hits: 10.107 ]

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

Configurando IP, Nome de maquina, Gateway e Samba.

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO USUÁRIOS MYSQL

Adicionando novo usuário manualmente

Firewall do mikrotik, limitando icmp (ping)

Instalar o Java diretamente do site oficial


  

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