Front-end para administração do Samba
Publicado por José Lima 30/09/2005
[ Hits: 8.561 ]
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;
Detecta e bloqueia tentativa de acesso ao SSH
Gerenciamento de logs em servidores de aplicação
Conversor de logs do svn para rss
Função que indica o estado do funcionamento do script
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Função que recebe 20 números inteiros e retorna o 6° maior elemento do... (0)
Melhorando a precisão de valores flutuantes em python[RESOLV... (15)
Mint começou a apresentar varios erros (2)