Front-end para administração do Samba
Publicado por José Lima 30/09/2005
[ Hits: 8.544 ]
Front-end utilizando o XDialog para administração do Samba: usuários, grupos, computadores, scripts de login, homes dos usuários... completo.
#!/bin/sh # Interface grafica para administracao de grupos e # usuarios do samba utilizando o XDialog como ferramenta # de desenvolvimento # Criado por Jose Alves de Lima - ilsinho@ig.com.br - em 18/07/2005 # Funcoes especificas ################################## # MENSAGENS # ################################## ################# Mensagem inicial Mensagem_Inicial() { Xdialog --title "Administração de Usuários - SAMBA"\ --ok-label "Continuar"\ --msgbox "Você poderá utilizar esta ferramenta para \n administração de grupos e usuários \n do Samba. Bom proveito. \n\n José Alves \n ilsinho@ig.com.br" 15 45 case $? in 0) Menu_Inicial;; 255) Mensagem_Finalizar;; esac } ################# Mensagem finalizar Mensagem_Finalizar() { Xdialog --title "Finalizar Programa"\ --ok-label "Finalizar"\ --cancel-label "Não finalizar"\ --yesno "\nTem certeza que deseja finalizar o programa?\n" 0 0 case $? in 0) exit 0;; 1) Menu_Inicial;; 255) exit 0;; esac } ################# Mensagem - Grupo adicionado Grupo_Adicionado() { Xdialog --title "Grupo criado"\ --msgbox "O grupo foi criado com sucesso." 10 45 case $? in 0) Grupo_Adicionar;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Grupo removido Grupo_Removido() { Xdialog --title "Grupo removido"\ --msgbox "O grupo foi removido com sucesso." 10 45 case $? in 0) Grupo_Remover;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Grupo existente Grupo_Existente() { Xdialog --title "Grupo existente"\ --msgbox "O grupo que você informou já existe." 10 45 case $? in 0) Grupo_Adicionar;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Grupo inexistente Grupo_Inexistente() { Xdialog --title "Grupo inexistente"\ --msgbox "O grupo que você informou não existe." 10 45 case $? in 0) Grupo_Remover;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Usuario adicionado Usuario_Adicionado() { Xdialog --title "Usuário criado"\ --msgbox "O usuário foi cadastrado com sucesso. \n Criado pasta do usuário em /HOME. \n Cadastre uma senha para o usuário." 10 45 case $? in 0) Usuario_Adicionar;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Usuario removido Usuario_Removido() { Xdialog --title "Usuario removido"\ --msgbox "O usuario foi removido com sucesso. \n Pasta pessoal do usuário em /HOME removida" 10 45 case $? in 0) Usuario_Remover;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Usuario existente Usuario_Existente() { Xdialog --title "Usuário existente"\ --msgbox "O usuário que você informou já existe." 10 45 case $? in 0) Usuario_Adicionar;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Usuario inexistente Usuario_Inexistente() { Xdialog --title "Usuário inexistente"\ --msgbox "O usuário que você informou não existe." 10 45 case $? in 0) Usuario_Remover;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Usuario grupo inexistente UsuarioGrupo_Inexistente() { Xdialog --title "Grupo inexistente"\ --msgbox "O grupo que você informou não existe." 10 45 case $? in 0) Usuario_Adicionar;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Usuario login inexistente UsuarioLogin_Inexistente() { Xdialog --title "Login inexistente"\ --msgbox "O login que você informou não existe." 10 45 case $? in 0) Usuario_Login;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Usuario senha alterado UsuarioLogin_Alterado() { Xdialog --title "Senha cadastrada/alterada"\ --msgbox "A senha foi cadastrada/alterada com sucesso." 10 45 case $? in 0) Usuario_Login;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Usuario senha errada UsuarioLogin_SenhaErrada() { Xdialog --title "Senhas diferentes"\ --msgbox "A senha e a repetição \n da senha não coincidem. \n Por favor digite novamente." 10 45 case $? in 0) Usuario_Login;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Script individual adicionado ScriptIndividual_Adicionado() { Xdialog --title "Script adicionado"\ --msgbox "O script foi adicionado com sucesso." 10 45 case $? in 0) Script_Individual;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Script individual - caminho inexistente ScriptIndividual_CaminhoInexistente() { Xdialog --title "Caminho inexistente"\ --msgbox "O arquivo informado \n não existe em /HOME/NETLOGON." 10 45 case $? in 0) Script_Individual;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Script individual - usuario inexistente ScriptIndividual_UsuarioInexistente() { Xdialog --title "Usuário inexistente"\ --msgbox "O login informado não existe." 10 45 case $? in 0) Script_Individual;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Script grupo adicionado ScriptGrupo_Adicionado() { Xdialog --title "Script adicionado"\ --msgbox "O script foi adicionado com sucesso." 10 45 case $? in 0) Script_Grupo;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Script grupo - login inexistente ScriptGrupo_LoginInexistente() { Xdialog --title "Arquivo com login inexistente"\ --msgbox "O arquivo de login informado \n não existe em /TMP." 10 45 case $? in 0) Script_Grupo;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Script grupo - script inexistente ScriptGrupo_ScriptInexistente() { Xdialog --title "Script inexistente"\ --msgbox "O arquivo de script informado \n não existe em /HOME/NETLOGON." 10 45 case $? in 0) Script_Grupo;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Computador adicionado Computador_Adicionado() { Xdialog --title "Computador criado"\ --msgbox "O computador foi adicionado com sucesso." 10 45 case $? in 0) Computador_Adicionar;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Computador removido Computador_Removido() { Xdialog --title "Computador removido"\ --msgbox "O computador foi removido com sucesso." 10 45 case $? in 0) Computador_Remover;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Computador inexistente Computador_Inexistente() { Xdialog --title "Computador inexistente"\ --msgbox "O computador que você informou não existe." 10 45 case $? in 0) Computador_Remover;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Computador existente Computador_Existente() { Xdialog --title "Computador existente"\ --msgbox "O computador que você informou já existe." 10 45 case $? in 0) Computador_Adicionar;; 255) Mensagem_Finalizar;; esac } ################# Mensagem - Computador inexistente ComputadorGrupo_Inexistente() { Xdialog --title "Grupo inexistente"\ --msgbox "O grupo que você informou não existe." 10 45 case $? in 0) Computador_Adicionar;; 255) Mensagem_Finalizar;; esac } ################################## # TAREFAS # ################################## ################# Opcoes de trabalho iniciais Menu_Inicial() { Xdialog --title "Opções de Trabalho"\ --ok-label "Continuar"\ --cancel-label "Finalizar"\ --menubox "\nEscolha uma opção de trabalho \n para administração de grupos e usuários do Samba:\n\n" 15 56 6 \ "Grupo" "Administração de grupos de usuários do Samba"\ "Usuário" "Administração de usuários do Samba"\ "Computador" "Administração de computadores do Samba" 2> /tmp/menu.tmp.$$ opcao=$? escolha=`cat /tmp/menu.tmp.$$` rm -f /tmp/menu.tmp.$$ case $opcao in 0) case $escolha in Grupo) Menu_Grupo;; Usuário) Menu_Usuario;; Computador) Menu_Computador;; esac;; 1) Mensagem_Finalizar;; 255) Mensagem_Finalizar;; esac } ################## # grupos # ################## ################# Opções de trabalho - administracao de grupos Menu_Grupo() { Xdialog --title "Administração de Grupos"\ --ok-label "Continuar"\ --cancel-label "Menu anterior"\ --menubox "\nEscolha uma opção de trabalho \n para administração de grupos do Samba:\n\n" 15 56 6 \ "Listar" "Lista grupos do Samba"\ "Adicionar" "Adiciona grupo ao Samba"\ "Remover" "Remove grupo do Samba" 2> /tmp/menu.tmp.$$ opcao=$? escolha=`cat /tmp/menu.tmp.$$` rm -f /tmp/menu.tmp.$$ case $opcao in 0) case $escolha in Listar) Grupo_Listar;; Adicionar) Grupo_Adicionar;; Remover) Grupo_Remover;; esac;; 1) Menu_Inicial;; 255) Mensagem_Finalizar;; esac } ################# Grupo - Listar grupos Grupo_Listar() { rm -f /tmp/grupos cat /etc/group | grep 5[0-100] | awk -F: {'print $1'} | sort >> /tmp/grupos Xdialog --title "Lista de Grupos"\ --no-cancel\ --tailbox "/tmp/grupos" 40 30 case $? in 0) Menu_Grupo;; 255) Mensagem_Finalizar;; esac } ################# Grupo - Adicionar grupo Grupo_Adicionar() { Xdialog --title "Novo Grupo"\ --cancel-label "Menu anterior"\ --inputbox "\nDigite o nome para o novo grupo. \n O nome do grupo deve ser uma única palavra \n e em letras minúsculas.\n\n" 13 45 2> /tmp/input.tmp.$$ opcao=$? input=`cat /tmp/input.tmp.$$` input_search=""$input\$"" rm -f /tmp/input.tmp.$$ case $opcao in 0) NomeGrupo=`cat /etc/group | awk -F: {'print $1'} | grep "$input_search"` if [ -z $NomeGrupo ]; then groupadd $input; Grupo_Adicionado; else Grupo_Existente; fi;; 1) Menu_Grupo;; 255) Mensagem_Finalizar;; esac } ################# Grupo - Remover grupo Grupo_Remover() { Xdialog --title "Remover Grupo"\ --cancel-label "Menu anterior"\ --inputbox "\nDigite o nome do grupo que deve ser removido. \n\n ESTA AÇÃO NÃO PODERÁ SER DESFEITA.\n\n" 13 45 2> /tmp/input.tmp.$$ opcao=$? input=`cat /tmp/input.tmp.$$` input_search=""$input\$"" rm -f /tmp/input.tmp.$$ case $opcao in 0) NomeGrupo=`cat /etc/group | awk -F: {'print $1'} | grep "$input_search"` if [ ! -z $NomeGrupo ]; then groupdel $input; Grupo_Removido; else Grupo_Inexistente; fi;; 1) Menu_Grupo;; 255) Mensagem_Finalizar;; esac } ################## # usuarios # ################## ################# Opções de trabalho - administracao de usuarios Menu_Usuario() { Xdialog --title "Administração de Usuários"\ --ok-label "Continuar"\ --cancel-label "Menu anterior"\ --menubox "\nEscolha uma opção de trabalho \n para administração de usuários do Samba:\n\n" 17 56 6 \ "Listar" "Lista usuários do Samba"\ "Adicionar" "Adiciona usuário ao Samba"\ "Remover" "Remove usuário do Samba"\ "Logon" "Definir script de logon para usuário"\ "Senha" "Cadastra ou altera a senha no Samba" 2> /tmp/menu.tmp.$$ opcao=$? escolha=`cat /tmp/menu.tmp.$$` rm -f /tmp/menu.tmp.$$ case $opcao in 0) case $escolha in Listar) Usuario_Listar;; Adicionar) Usuario_Adicionar;; Remover) Usuario_Remover;; Logon) Menu_Script;; Senha) Usuario_Login;; esac;; 1) Menu_Inicial;; 255) Mensagem_Finalizar;; esac } ################# Usuario - Listar usuario Usuario_Listar() { rm -f /tmp/usuarios sed -e '/^#/d' /etc/samba/smbpasswd | awk -F: {'print $1'} | sed -e '/[$]/d' | sort >> /tmp/usuarios Xdialog --title "Lista de Usuários"\ --fixed-font\ --no-cancel\ --tailbox "/tmp/usuarios" 40 40 case $? in 0) Menu_Usuario;; 255) Mensagem_Finalizar;; esac } ################# Usuario - Adicionar usuario Usuario_Adicionar() { Xdialog --title "Novo Usuário"\ --cancel-label "Menu anterior"\ --3inputsbox "\nPara cadastrar um novo usuário \n digite os dados abaixo." 20 48 "Nome completo:" "" "Login:" "" "Grupo:" "" 2> /tmp/novousuario opcao=$? name=`cat /tmp/novousuario | awk -F/ {'print $1'}` login=`cat /tmp/novousuario | awk -F/ {'print $2'}` login_search=""$login\$"" group=`cat /tmp/novousuario | awk -F/ {'print $3'}` group_search=""$group\$"" rm -f /tmp/novousuario case $opcao in 0) Usuario=`cat /etc/passwd | awk -F: {'print $1'} | grep "$login_search"` Grupo=`cat /etc/group | awk -F: {'print $1'} | grep "$group_search"` if [ -z $Usuario ]; then if [ ! -z $Grupo ]; then useradd -c "$name" -g $group -d /dev/null -s /bin/false $login; smbpasswd -a -n $login; mkdir /home/$login; chmod -R 700 /home/$login; chown -R $login:$group /home/$login; Usuario_Adicionado; rm -f /tmp/novousuario; else UsuarioGrupo_Inexistente fi else Usuario_Existente; rm -f /tmp/novousuario; fi;; 1) Menu_Usuario;; 255) Mensagem_Finalizar;; esac } ################# Usuario - Remover usuario Usuario_Remover() { Xdialog --title "Remover Usuário"\ --cancel-label "Menu anterior"\ --inputbox "\nDigite o login do usuario que deve ser removido. \n\n ESTA AÇÃO NÃO PODERÁ SER DESFEITA.\n\n" 13 45 2> /tmp/input.tmp.$$ opcao=$? input=`cat /tmp/input.tmp.$$` input_search=""$input\$"" rm -f /tmp/input.tmp.$$ case $opcao in 0) Usuario=`cat /etc/samba/smbpasswd | awk -F: {'print $1'} | grep "$input_search"` if [ ! -z $Usuario ]; then smbpasswd -x $input; rm -fR /home/$input; rm -f /home/netlogon/$input.bat; userdel $input; Usuario_Removido; else Usuario_Inexistente; fi;; 1) Menu_Usuario;; 255) Mensagem_Finalizar;; esac } ################# Usuario - Cadastrar/Alterar Senha - Login Usuario_Login() { Xdialog --title "Usuário - Senha"\ --cancel-label "Menu anterior"\ --password\ --password\ --3inputsbox "\nPara cadastrar/alterar a senha do usuário \n digite os dados abaixo." 20 48 "Login:" "" "Senha:" "" "Repetição da senha:" "" 2> /tmp/senha opcao=$? login=`cat /tmp/senha | awk -F/ {'print $1'}` login_search=""$login\$"" password_one=`cat /tmp/senha | awk -F/ {'print $2'}` password_two=`cat /tmp/senha | awk -F/ {'print $3'}` rm -f /tmp/senha case $opcao in 0) Usuario=`cat /etc/samba/smbpasswd | awk -F: {'print $1'} | grep "$login_search"` if [ ! -z $Usuario ]; then if [ "$password_one" = "$password_two" ]; then ( echo $password_one ; echo $password_two ) | smbpasswd -s $login; UsuarioLogin_Alterado; else UsuarioLogin_SenhaErrada; fi else UsuarioLogin_Inexistente; fi;; 1) Menu_Usuario;; 255) Mensagem_Finalizar;; esac } ########################## # usuarios - script # ########################## ################# Opções de trabalho - usuarios Menu_Script() { Xdialog --title "Script de logon"\ --ok-label "Continuar"\ --cancel-label "Menu anterior"\ --menubox "\nEscolha uma opção de trabalho \n para definir o script de logon para usuários do Samba:\n\n" 17 56 6 \ "Individual" "Atribui script para um único usuário"\ "Grupo" "Atribui script para grupos de usuários" 2> /tmp/menu.tmp.$$ opcao=$? escolha=`cat /tmp/menu.tmp.$$` rm -f /tmp/menu.tmp.$$ case $opcao in 0) case $escolha in Individual) Script_Individual;; Grupo) Script_Grupo;; esac;; 1) Menu_Usuario;; 255) Mensagem_Finalizar;; esac } ################# Script - individual Script_Individual() { Xdialog --title "Script individual"\ --cancel-label "Menu anterior"\ --2inputsbox "\nPara designar um script de logon \n a um usuário digite abaixo." 18 48 "Login do usuário:" "" "Arquivo de script \n (deve estar em /home/netlogon):" "" 2> /tmp/script opcao=$? login=`cat /tmp/script | awk -F/ {'print $1'}` login_search=""$login\$"" file=`cat /tmp/script | awk -F/ {'print $2'}` rm -f /tmp/script case $opcao in 0) Usuario=`cat /etc/passwd | awk -F: {'print $1'} | grep -e "$login_search"` if [ ! -z $Usuario ]; then if [ -r /home/netlogon/$file ]; then cp -f /home/netlogon/$file /home/netlogon/$login.bat ScriptIndividual_Adicionado; else ScriptIndividual_CaminhoInexistente fi else ScriptIndividual_UsuarioInexistente; fi;; 1) Menu_Script;; 255) Mensagem_Finalizar;; esac } ################# Script - grupo Script_Grupo() { Xdialog --title "Script individual"\ --cancel-label "Menu anterior"\ --2inputsbox "\nPara designar um script de logon \n a um grupo de usuários digite abaixo." 18 48 "Arquivo com login \n (deve estar em /tmp):" "" "Arquivo de script \n (deve estar em /home/netlogon):" "" 2> /tmp/script opcao=$? fileLogin=`cat /tmp/script | awk -F/ {'print $1'}` fileScript=`cat /tmp/script | awk -F/ {'print $2'}` rm -f /tmp/script case $opcao in 0) if [ -r /home/netlogon/$fileScript ]; then if [ -r /tmp/$fileLogin ]; then for login in `cat /tmp/$fileLogin` ; do login_search=""$login\$"" Usuario=`cat /etc/passwd | awk -F: {'print $1'} | grep -e "$login_search"` if [ ! -z $Usuario ]; then cp -f /home/netlogon/$fileScript /home/netlogon/$login.bat fi done ScriptGrupo_Adicionado else ScriptGrupo_LoginInexistente fi else ScriptGrupo_ScriptInexistente fi;; 1) Menu_Script;; 255) Mensagem_Finalizar;; esac } ################## # computadores # ################## ################# Opções de trabalho - administracao de computadores Menu_Computador() { Xdialog --title "Administração de Computadores"\ --ok-label "Continuar"\ --cancel-label "Menu anterior"\ --menubox "\nEscolha uma opção de trabalho \n para administração de usuários do Samba:\n\n" 15 56 6 \ "Listar" "Lista computadores do Samba"\ "Adicionar" "Adiciona computador ao Samba"\ "Remover" "Remove computador do Samba" 2> /tmp/menu.tmp.$$ opcao=$? escolha=`cat /tmp/menu.tmp.$$` rm -f /tmp/menu.tmp.$$ case $opcao in 0) case $escolha in Listar) Computador_Listar;; Adicionar) Computador_Adicionar;; Remover) Computador_Remover;; esac;; 1) Menu_Inicial;; 255) Mensagem_Finalizar;; esac } ################# Computador - Listar computador Computador_Listar() { rm -f /tmp/computadores sed -e '/^#/d' /etc/samba/smbpasswd | awk -F: {'print $1'} | sed -n '/\$/p' | sort >> /tmp/computadores Xdialog --title "Lista de Computadores"\ --fixed-font\ --no-cancel\ --tailbox "/tmp/computadores" 40 40 case $? in 0) Menu_Computador;; 255) Mensagem_Finalizar;; esac } ################# Computador - Adicionar computador Computador_Adicionar() { Xdialog --title "Novo Computador"\ --cancel-label "Menu anterior"\ --3inputsbox "\nPara cadastrar um novo computador \n digite os dados abaixo." 18 48 "Computador:" "" "Comentário:" "" "Grupo:" "" 2> /tmp/novocomputador opcao=$? computer=`cat /tmp/novocomputador | awk -F/ {'print $1'}` computer_search=""$computer\$"" comment=`cat /tmp/novocomputador | awk -F/ {'print $2'}` group=`cat /tmp/novocomputador | awk -F/ {'print $3'}` group_search=""$group\$"" rm -f /tmp/novocomputador case $opcao in 0) Computador=`cat /etc/passwd | awk -F: {'print $1'} | grep -e "$computer_search"` Grupo=`cat /etc/group | awk -F: {'print $1'} | grep -e "$group_search"` if [ -z $Computador ]; then if [ ! -z $Grupo ]; then useradd -c "$comment" -g $group -d /dev/null -s /bin/false $computer$; smbpasswd -a -m $computer; Computador_Adicionado; rm -f /tmp/novocomputador; else ComputadorGrupo_Inexistente fi else Computador_Existente; rm -f /tmp/novocomputador; fi;; 1) Menu_Computador;; 255) Mensagem_Finalizar;; esac } ################# Computador - Remover computador Computador_Remover() { Xdialog --title "Remover Computador"\ --cancel-label "Menu anterior"\ --inputbox "\nDigite o nome do computador que deve ser removido. \n\n ESTA AÇÃO NÃO PODERÁ SER DESFEITA.\n\n" 13 45 2> /tmp/input.tmp.$$ opcao=$? input=`cat /tmp/input.tmp.$$` input_search=""$input\$"" rm -f /tmp/input.tmp.$$ case $opcao in 0) Computador=`cat /etc/samba/smbpasswd | awk -F: {'print $1'} | grep -e "$input_search"` if [ ! -z $Computador ]; then smbpasswd -x $input; userdel $input; Computador_Removido; else Computador_Inexistente; fi;; 1) Menu_Computador;; 255) Mensagem_Finalizar;; esac } Mensagem_Inicial;
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO USUÁRIOS A PARTIR DE ARQUIVO
Criar gráficos, estatística da "Google-Scholar" usando wget
FindBackdoor - Detectar possíveis backdoors em arquivos PHP (WordPress)
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
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[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