Gerenciamento do Samba com Dialog
Publicado por Anderson Rodrigues (última atualização em 01/06/2010)
[ Hits: 10.024 ]
Homepage: http://pedreiros.homelinux.com
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.
#!/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
###################################################################################################
Proc_del - Desinstalar programas compilados
Backup copiando para ftp durante 7 dias
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (36)
Instalação dualboot Windows 11 e Debian 13 (0)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (0)









