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.
O Servidor de Arquivos necessita de contas para usuários e máquinas que o acessam, e pode operar com usuários locais ou usuários do Domínio. A forma mais segura de tê-lo em funcionamento consiste em ter um cadastro local dos usuários que necessitam acessar os serviços no servidor. Cabe ao administrador avaliar se o Servidor de Arquivos deve ser standalone ou um membro do Domínio considerado.
O código referente ao perfil srv é o seguinte:
srv(){
tput cup 0 19;
trap ' ' 1 2 3 9 15;
tput cup 10 12;echo "
######################################################################
PROGRAMA DE CONFIGURAÇÃO DE SERVIDOR DE ARQUIVOS 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 SERVIDOR DE ARQUIVOS SAMBA
2 - Criar o Diretório dos Compartilhamentos no SERVIDOR
3 - Criar Grupos e Compartilhamentos Restritos
4 - Criar Compartilhamento Publico
5 - Incluir usuário nos Grupos do Servidor de Arquivos
6 - Excluir usuário do Servidor de Arquivos
7 - Bloquear senha de usuário do Servidor de Arquivos
8 - Desbloquear senha de Usuário no Servidor de Arquivos
9 - Sair do programa de configuração
A função cria_samba constrói o Servidor propriamente dito e a função cria_base deve ser utilizada para estabelecer o diretório a ser criado com a função de aceitar a criação dos demais compartilhamentos como subdiretórios. Somente depois que são criados os grupos no servidor é que devemos incluir os usuários e os demais compartilhamentos.
Observamos a função que cria o Servidor de Arquivos:
cria_samba(){
echo -n "Digite um nome do seu Domínio ou Grupo de Trabalho: "
read dominio
echo -n "Digite o nome desse Servidor Samba: "
read servidor
echo -n "Digite o nome da conta do Administrador desse Servidor Samba (admin): "
read admin
echo -n "Digite a Rede desse Servidor (192.168.0.0/16): "
read rede
sudo smbpasswd -a $admin
echo -n "Deseja juntar o Servidor Samba a um Domínio ? [sim|nao] "
read resp
if [ $resp == sim ];then
echo -n "Digite o nome do Domínio: "
read ndominio
echo -n "Digite o nome do Servidor de Domínio: "
read nservidor
echo -n "Digite o nome do administrador do Domínio [admin]: "
read nadmin
sudo net rpc join -W $ndominio -S $servidor -U $nadmin
continue
else
clear
continue
fi
echo "
[globals]
workgroup = $dominio
netbios name = $servidor
domain master = no
security = user
encrypt passwords = yes
os level = 30
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
}
A base dos compartilhamentos recebe sgid a fim de possibilitar a criação de outros compartilhamentos:
cria_base(){
echo -n "Indique a localização do Diretório dos compartilhamentos (/dados): " # Criar o diretorio-base
read base
sudo mkdir -p $base
sudo chmod -R 2777 $base/
echo -n "Diretorio-Base criado em $base"
}
O acréscimo de novos compartilhamentos é exportado pelo Servidor através do módulo de configuração do pam_mount, como se vê no compartilhamento público e na criação de grupos:
cria_publico(){
echo -n "Digite o nome do Diretório [publico]: " # Criar compartilhamento de leitura/escrita para todos
read compart
echo -n "Indique o diretório de compartilhamento (/dados): "
read base
echo "Criando compartilhamento publico... "
sudo mkdir -p $base/$compart
if( ! (grep nobody /etc/passwd ) );then
sudo useradd -s /bin/bash -d /dev/null -g nogroup nobody 2>/dev/null
sudo passwd -l nobody 2>/dev/null
sudo smbpasswd -a nobody
fi
sudo chown -R nobody.nogroup $base/$grupo
sudo chmod 2777 $base/$compart
echo "
[$compart]
path = $base/$compart
writable = yes
browseable = yes
public = yes
guest ok = yes" >>/tmp/smb.conf
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old
sudo cat /tmp/smb.conf >>/etc/samba/smb.conf
echo "Compartilhamento publico criado em $base... "
sleep 2
cria_grupo(){
echo -n "Digite o nome do Grupo: " # Incluir grupos no Servidor de domínio
read grupo
echo -n "Digite o caminho do Diretório dos compartilhamentos no Servidor (/dados): "
read base
echo "Criando compartilhamento no Servidor... "
echo -n "Deseja criar o diretório do grupo somente para leitura ? [sim/nao] "
read resp
if [ $resp == sim ];then
sudo groupadd $grupo
echo "Criando compartilhamento somente para leitura... " # Compartilhar somente leitura para
sudo mkdir -p $base/$grupo # os membros do grupo
sudo chgrp -R $grupo $base/$grupo
sudo chmod -R 2750 $base/$grupo
echo "
[$grupo]
path = $base/$grupo
writable = no
browseable = yes
read list = @$grupo
write list = @$grupo
admin users = @$grupo @secinfo" >>/tmp/smb.conf
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old
sudo cat /tmp/smb.conf >>/etc/samba/smb.conf
echo "Criando compartilhamento sem escrita em $base... "
sleep 2
echo "Exportando compartilhamento sem escrita criado no Servidor..."
echo "
volume * smbfs $servidor $compart ~/$compart uid=&,gid=&,dmask=2750, - -
">/tmp/pam_mount.conf
sudo cat /tmp/pam_mount.conf >>/etc/security/pam_mount.conf
sleep 3
else
sudo groupadd $grupo
echo "Criando compartilhamento para leitura e escrita do grupo... " # Compartilhar leitura/escrita
sudo mkdir -p $base/$grupo # somente para os membros do grupo
sudo chgrp -R $grupo $base/$grupo
sudo chmod -R 2770 $base/$grupo
sudo echo "
[$grupo]
path = $base/$grupo
writable = yes
browseable = yes
read list = @$grupo
write list = @$grupo
admin users = @$grupo @secinfo" >>/tmp/smb.conf
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old
sudo cat /tmp/smb.conf >>/etc/samba/smb.conf
echo "Criando compartilhamento com escrita em $base... "
sleep 2
echo "Exportando compartilhamento com escrita criado no Servidor..."
echo "
volume * smbfs $servidor $compart ~/$compart uid=&,gid=&,dmask=2770 - -
">/tmp/pam_mount.conf
sudo cat /tmp/pam_mount.conf >>/etc/security/pam_mount.conf
sleep 3
fi
echo -n " Grupo $grupo criado em $base."
sleep 2
}
As configurações podem ser editadas e adaptadas às necessidades específicas da organização considerada.
[2] Comentário enviado por downloadd em 05/12/2008 - 10:13h
Olá Araujo...
Notei que você manda bem no assunto SAMBA, pois você já contribuiu com vários artigos sobre o samba, e por isso, gostaria de te fazer uma pergunta.
Eu uso samba+Ldap e se eu trocar a senha de root do linux, não consigo mais acessar o Ldap como root, nem se eu voltar a senha antiga do root. Por conta disso, não consigo mais incluir os usuários do samba no grupo "Domain Admins".
Detalhe que o restante continua funcionando normal; logins no linux, samba, squid... tudo normal, só esta questão mesmo que não sei como resolver.
Você poderia me ajudar? -> luiz.rissi at gmail.com
[4] Comentário enviado por araujo_silva em 07/12/2008 - 18:23h
Caro calaff2
Estou aguardando a publicação no VOL do script incluido na seção linux/shell-script/avançado.
Caso não eseja livre até o dia 09 eu o envio diretamente para você.
[5] Comentário enviado por araujo_silva em 07/12/2008 - 18:42h
Companheiro downloadd
Caso você esteja utilizando as ferramentas do smbldap-tools, modifique a senha utilizando a ferramenta "smbldap-passwd root" ao invés de utilizara "passwd root".
Não sei como estão configurados os arquivos /etc/nsswitch.conf, nem a prioridade que o arquivo /etc/pam.d/login atribui aos usuários do domínio e aos usuários locais. Esses arquivos vão determinar quais bases serão consultadas prioritariamente.
Faça consultas recursivas na árvore do ldap, antes e depois de alterar a senha do root:
# ldapsearch -x
Verifique se o parâmetro "ldap passwd sync = Yes" está presente no seu arquivo de configuração do samba (/etc/samba/smb.conf).
[6] Comentário enviado por spartac0s em 08/12/2008 - 10:42h
Ola Araujo.
Seu script ficou muito. parabens, mais estou com uma duvida aqui não estou sabendo como salvar os arquivos.
O gerenciamento de perfis salvei como ComSamba.sh
agora os outros PDC, SRV E CDS eu nao estou sabendo com qual o nome salvar. e e que local. se vc poder me responder agradeço muito obrigado.
[7] Comentário enviado por araujo_silva em 08/12/2008 - 14:54h
Blz spartac0s
O programa inteiro está na fila de liberação, na seção /linux/scripts-shell/avançado, aqui no VOL. É que é muito grande para incluir no arquivo, cerca de 1000 linhas. Está inscrito com o nome consamba.sh. Caso demore posso enviar pro seu e-mail a partir de amanha.
[10] Comentário enviado por araujo_silva em 19/12/2008 - 15:45h
downloadd
peço que verifique se apos as sugestoes sobre a alteração no nsswitch.conf e login houve alteração no comportamento da altenticação. E informe se a senha que esta sendo trocada esta sendo atualizada no paramentro "rootpw" do arquivo de configuração do cliente ldap
[11] Comentário enviado por aantunes em 17/06/2009 - 17:25h
Alguem sabe me informar como faço para configurar o novo pam_mount.conf.xml?
O que acontece, já configurei varias volumes para mount. só que ele não está validando o grupo segue o pedaço do arquivo
[12] Comentário enviado por araujo_silva em 11/07/2009 - 12:01h
Caro aantunes,
1. primeiro deve haver os seguintes compartilhamentos , localizados no home de cada usuario: 'users','publica','sistemas','teleatend','iq2000','telelistas';
2. substitua o nome do grupo 'l_juridico' pelo 'id', no parâmetro 'options' de cada volume;
3. salvo se você tiver um concentrador de domínio (ldap), com servidores distribuídos, não haverá como mapear dois conjuntos de compartilhamentos originados em 'admfile1' e 'tmkdc1', pois o pam_mount irá montar os compartilhamentos a que tiver acesso no login do usuário;
4. substitua pela configuração abaixo, ajustando conforme sua necessidade:
<!-- usuarios do grupo l_juridico -->
<volume sgrp="l_juridico" fstype="smbfs" server="admfile1" path="users/%(USER)" mountpoint="/home/%(USER)/users" />
<!-- usuarios do grupo l_juridico -->
<volume fstype="smbfs" server="admfile1" path="users/%(USER)"
mountpoint="/home/%(USER)/users" options="uid=%(USER),gid=1001,dmask=0711,workgroup=DOMINIO" />
[14] Comentário enviado por aantunes em 02/10/2009 - 18:14h
Lourival,
Obrigado pela ajuda. O projeto morreu, pois a empresa tem muito muito sistema Windows, sites feitos em asp.
Mas assim que tiver oportunidade estarei fazendo esse teste.