Servidor Samba "Autoservice"
Buscamos, no presente arquivo, apresentar um programa em linguagem shell script e interface em modo texto destinado a configurar um Servidor de Domínio Samba. Utilizamos os módulos do PAM para implementar uma política de acesso e exportação de compartilhamentos.
Parte 3: Criando o perfil pdc
Algumas observações sobre a construção dos perfis podem ser feitas a partir da análise do bloco de código que implementa a função pdc:
As funções de adição, exclusão e bloqueio de usuários formam o núcleo comum aos diversos perfis, enquanto a função de criação de domínio constitui o diferencial, pois implementa as configurações de compartilhamento necessárias ao Servidor de Domínio no arquivo smb.conf. E cria os diretórios necessários ao funcionamento do PDC (netlogon e profile).
A função que cria o domínio será compartilhada pelos perfis pdc e cds. E a função valor_invalido será compartilhada por todos os perfis, com a seguinte estrutura:
Incluímos na função cria_dominio, que especifica as condições de funcionamento do Servidor considerado, o controle de origem e de horário de acesso, a fim de deixar o programa em conformidade as práticas de segurança recomendadas pelas normas de referência:
Apenas por uma questão de aproveitamento de código, mantivemos as linhas relacionadas ao winbind, que são necessárias somente ao perfil cld, que incorpora as funções de Cliente de Domínio.
pdc( ){
tput cup 0 19;
trap ' ' 2 3 15;
tput cup 10 12;echo "
####################################################################
PROGRAMA DE CONFIGURAÇÃO DE SERVIDOR DE DOMÍNIO LINUX - Versão 0.3.7
Autor: LOURIVAL ARAÚJO DA SILVA - 5º CTA - RECIFE - PE
Liberado sob GPL em 02 de novembro de 2008
####################################################################
1 - Criar o DOMÍNIO (PDC Samba)
2 - Criar Grupos no Servidor de Domínio
3 - Incluir usuário nos Grupos do Domínio
4 - Excluir usuário do Domínio
5 - Bloquear senha de usuário do Domínio
6 - Desbloquear senha de Usuário do Domínio
7 - Adicionar maquina ao Domínio
8 - Excluir maquina do Domínio
9 - Sair do programa de configuração
####################################################################
####################################################################
"
echo -n " Digite a opção de configuração desejada: "
read opcao
case $opcao in
1) cria_dominio
;;
2) cria_grupo
;;
3) inclui_usuario
;;
4) exclui_usuario
;;
5) bloqueia_usuario
;;
6) desbloqueia_usuario
;;
7) adiciona_maquina
;;
8) exclui_maquina
;;
9) clear;
continue;
;;
*) valor_invalido;
;;
esac
}
tput cup 0 19;
trap ' ' 2 3 15;
tput cup 10 12;echo "
####################################################################
PROGRAMA DE CONFIGURAÇÃO DE SERVIDOR DE DOMÍNIO LINUX - Versão 0.3.7
Autor: LOURIVAL ARAÚJO DA SILVA - 5º CTA - RECIFE - PE
Liberado sob GPL em 02 de novembro de 2008
####################################################################
1 - Criar o DOMÍNIO (PDC Samba)
2 - Criar Grupos no Servidor de Domínio
3 - Incluir usuário nos Grupos do Domínio
4 - Excluir usuário do Domínio
5 - Bloquear senha de usuário do Domínio
6 - Desbloquear senha de Usuário do Domínio
7 - Adicionar maquina ao Domínio
8 - Excluir maquina do Domínio
9 - Sair do programa de configuração
####################################################################
####################################################################
"
echo -n " Digite a opção de configuração desejada: "
read opcao
case $opcao in
1) cria_dominio
;;
2) cria_grupo
;;
3) inclui_usuario
;;
4) exclui_usuario
;;
5) bloqueia_usuario
;;
6) desbloqueia_usuario
;;
7) adiciona_maquina
;;
8) exclui_maquina
;;
9) clear;
continue;
;;
*) valor_invalido;
;;
esac
}
As funções de adição, exclusão e bloqueio de usuários formam o núcleo comum aos diversos perfis, enquanto a função de criação de domínio constitui o diferencial, pois implementa as configurações de compartilhamento necessárias ao Servidor de Domínio no arquivo smb.conf. E cria os diretórios necessários ao funcionamento do PDC (netlogon e profile).
A função que cria o domínio será compartilhada pelos perfis pdc e cds. E a função valor_invalido será compartilhada por todos os perfis, com a seguinte estrutura:
valor_invalido(){
clear
tput cup 17 18;echo "Valor inadequado. Digite um valor valido. "
sleep 2
continue
}
clear
tput cup 17 18;echo "Valor inadequado. Digite um valor valido. "
sleep 2
continue
}
Incluímos na função cria_dominio, que especifica as condições de funcionamento do Servidor considerado, o controle de origem e de horário de acesso, a fim de deixar o programa em conformidade as práticas de segurança recomendadas pelas normas de referência:
cria_dominio(){
echo -n "Digite um nome de Domínio: " # criar o domínio de logon
read dominio
echo -n "Digite o nome do Servidor: "
read servidor
echo -n "Digite o nome da conta do Administrador do Servidor Samba (root): "
read admin
echo -n "Digite a Rede do Servidor (192.168.0.0/16): "
read rede
sudo smbpasswd -a $admin
echo "
[globals]
workgroup = $dominio
netbios name = $servidor
domain master = yes
logon script = netlogon.bat
logon home = \\%U\.profiles
logon path = \\%L\profiles\%U
logon drive = j:
security = user
encrypt passwords = yes
os level = 100
log file = /var/log/samba/log.%m
max log size = 1000
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
hosts allow = 127.0.0.0/8 $rede # Origem dos acessos autorizados
obey pam restrictions = Yes
smb passwd file = /etc/samba/smbpasswd
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
template homedir = /home/%U
template shell = /bin/bash
[netlogon]
comment = Serviço de logon
path = /var/samba/netlogon
guest ok = yes
browseable = no
[profiles]
path = /var/samba/profile
writable = yes
browseable = no
create mask = 0600
directory mask = 0700
[home]
path = /home
browseable = no" >>/tmp/smb.conf
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old
sudo mv /tmp/smb.conf /etc/samba/smb.conf
sudo mkdir -p /var/profiles
sudo chmod 1777 /var/profiles
sudo mkdir -p /var/samba/netlogon
sudo chmod 775 /var/samba/netlogon
echo "Configurando o horário de acesso ao Servidor..."
echo "
login;*;*;Wd0800-1800 & !SaSu0000-2359
ssh;*;*;Wd0800-1800 & !SaSu0000-2359
">/tmp/time.conf
sudo cat /tmp/time.conf >>/etc/security/time.conf
}
echo -n "Digite um nome de Domínio: " # criar o domínio de logon
read dominio
echo -n "Digite o nome do Servidor: "
read servidor
echo -n "Digite o nome da conta do Administrador do Servidor Samba (root): "
read admin
echo -n "Digite a Rede do Servidor (192.168.0.0/16): "
read rede
sudo smbpasswd -a $admin
echo "
[globals]
workgroup = $dominio
netbios name = $servidor
domain master = yes
logon script = netlogon.bat
logon home = \\%U\.profiles
logon path = \\%L\profiles\%U
logon drive = j:
security = user
encrypt passwords = yes
os level = 100
log file = /var/log/samba/log.%m
max log size = 1000
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
hosts allow = 127.0.0.0/8 $rede # Origem dos acessos autorizados
obey pam restrictions = Yes
smb passwd file = /etc/samba/smbpasswd
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
template homedir = /home/%U
template shell = /bin/bash
[netlogon]
comment = Serviço de logon
path = /var/samba/netlogon
guest ok = yes
browseable = no
[profiles]
path = /var/samba/profile
writable = yes
browseable = no
create mask = 0600
directory mask = 0700
[home]
path = /home
browseable = no" >>/tmp/smb.conf
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old
sudo mv /tmp/smb.conf /etc/samba/smb.conf
sudo mkdir -p /var/profiles
sudo chmod 1777 /var/profiles
sudo mkdir -p /var/samba/netlogon
sudo chmod 775 /var/samba/netlogon
echo "Configurando o horário de acesso ao Servidor..."
echo "
login;*;*;Wd0800-1800 & !SaSu0000-2359
ssh;*;*;Wd0800-1800 & !SaSu0000-2359
">/tmp/time.conf
sudo cat /tmp/time.conf >>/etc/security/time.conf
}
Apenas por uma questão de aproveitamento de código, mantivemos as linhas relacionadas ao winbind, que são necessárias somente ao perfil cld, que incorpora as funções de Cliente de Domínio.