Front-end para administração do Samba
Publicado por José Lima 30/09/2005
[ Hits: 8.807 ]
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;
Debian - inicializando VMs (VirtualBox) no boot
Bloqueia ataques do tipo bruteforce
Script de busca (google em shell)
Testando se a conexão com a Internet está ativa
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
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Programa fora de escala na tela do pc (28)
Linux é a solução para o fim do Windows10? (0)
converter algoritmo C++ em C? (1)
Problemas com Driver NVIDIA (1)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)









