Front-end para administração do Samba
Publicado por José Lima 30/09/2005
[ Hits: 8.880 ]
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;
SCRIPT PARA INSTALAÇÃO DE PROGRAMAS NO LINUX
Instalação - Servidor de e-mail
Distribuindo arquivos para máquinas em rede
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (19)
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









