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.

[ Hits: 30.887 ]

Por: lourival araujo da silva em 04/12/2008


Exportando recursos



O módulo pam_mount permite exportação de pastas compartilhadas pelo Servidor. A utilização do recurso ocorre através da configuração do arquivo correspondente ao módulo referido (/etc/security/pam_mount.conf).

Esse arquivo apresenta três partes constituintes, com funções correspondentes: a. inicialização de ferramentas, b. montagens automáticas e c. desmontagens. Cada uma das partes tem funções específicas:

a. inicialização:

O mecanismo de inicialização do pam_mount ativa a verificação das ferramentas necessárias à montagem dos possíveis compartilhamentos. Cria o ponto de montagem correspondente (caso não esteja criado), faz as checagens necessárias e lê as opções de configuração correspondentes.

debug 0
mkmountpoint 1
fsckloop /dev/loop7
options_allow nosuid,nodev,loop,encryption,fsck
options_require nosuid,nodev

b. montagens automatizadas:

A chamada do processo de montagem dos compartilhamentos, no arquivo correspondente (/etc/pam_mount.conf), é realizada em três colunas (ferramenta, path, opções de montagem).

lsof /usr/bin/lsof %(MNTPT)
fsck /sbin/fsck -p %(FSCKTARGET)
losetup /sbin/losetup -p0 "%(before=\"-e\" CIPHER)" "%(before=\"-k\" KEYBITS)" %(FSCKLOOP) %(VOLUME)
unlosetup /sbin/losetup -d %(FSCKLOOP)
cifsmount /bin/mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"

smbmount /usr/bin/smbmount //%(SERVER)/%(VOLUME) %(MNTPT) -o "username=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"
ncpmount /usr/bin/ncpmount %(SERVER)/%(USER) %(MNTPT) -o "pass-fd=0,volume=%(VOLUME)%(before=\",\" OPTIONS)"
smbumount /usr/bin/smbumount %(MNTPT)
ncpumount /usr/bin/ncpumount %(MNTPT)
fusemount /sbin/mount.fuse %(VOLUME) %(MNTPT) "%(before=\"-o\" OPTIONS)"
fuseumount /usr/bin/fusermount -u %(MNTPT)

# volume user smbfs krueger public /home/user/krueger - - -
# volume user ncpfs krueger public /home/user/krueger user=user.context - -
# volume * smbfs krueger homes /home/&/remote dmask=0711 - -

c. desmontagens correspondentes:

Utilizando uma fórmula geral o arquivo determina a desmontagem qualquer ponto de montagem existente.

umount /bin/umount %(MNTPT)

Ajustamos o perfil do Servidor Samba para que seja possível configurar a exportação dos compartilhamentos criados no servidor. A configuração específica de servidor que apresentamos possui os compartilhamentos atribuídos a grupos específicos. Por isso, a criação de compartilhamentos ocorre por intermédio da criação de grupos:

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
}

O código completo do programa em questão poderá ser encontrado na seção de script shell, no programa consamba.sh. Aqui no VOL.

Abraços a todos.

Página anterior    

Páginas do artigo
   1. Traçando rotas
   2. Gerenciando perfis
   3. Criando o perfil pdc
   4. Verificando o perfil srv
   5. Analisando o perfil cds
   6. Exportando recursos
Outros artigos deste autor

Autenticação via hardware: o módulo pam_usb

Cliente Linux no servidor LDAP

Cliente "automágico" Linux logando no domínio NT/Samba

Bom escudo não teme espada: o módulo pam_cracklib

webCalendar: a agenda e o PAM

Leitura recomendada

ANDRAX - Pentest usando o Android

(IN)segurança Digital

Protegendo seu servidor de e-mail Postfix

Honeypot Kippo 0.8 - Instalação e utilização

Filtragem de vírus com pop3 transparente: pop3vscan

  
Comentários
[1] Comentário enviado por Rhods23 em 04/12/2008 - 23:00h

Meu amigo, só tenho uma palavra a dizer: PERFEITO. :D

[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

Abraço e parabéns!

[3] Comentário enviado por calaff2 em 06/12/2008 - 13:11h

Man manda os script para meu email! para eu testar aqui em casa ! [email protected]

Show de bola nota 10000000000000000 :)

[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ê.

abraços

Araujo

[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).

abraço

araujo

[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.

Abraços

Araujo

[8] Comentário enviado por downloadd em 10/12/2008 - 18:03h

Olá Araujo, sou eu novamente...

Sei que aqui não é o melhor lugar para se tratar do meu problema, afinal é um assunto off-topic, mas postei como pergunta e não tive ajuda nenhuma.

Respondendo:
Sim eu estou usando o smbldap-tools.
Não cheguei alterar os arquivos /etc/nsswitch.conf e /etc/pam.d/login

Já tentei mudar a senha daquela forma que você passou mas mesmo assim, nunca mais consigo logar como root no ldap.

Sim o parâmetro esta presente no arquivo do samba.

Eu segui este tutorial para instalar o Ldap e o samba.
http://www.howtoforge.com/openldap-samba-domain-controller-ubuntu7.10

Tenho que alterar algo nos arquivos /etc/nsswitch.conf e /etc/pam.d/login ?
valeu

[9] Comentário enviado por dfsantos em 19/12/2008 - 15:22h

"downloadd" tente alterar o arquivo /etc/nsswitch.conf para efetuar consulta primeiramente no ldap.. boa sorte

[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

abraço

araujo

[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

<!-- usuarios do grupo L_Asscomercial -->

<volume sgrp="l_asscomercial" fstype="smbfs" server="tmkdc1" path="users/%(USER)" mountpoint="/home/%(USER)/users" />
<volume sgrp="l_asscomercial" fstype="smbfs" server="tmkdc1" path="publica" mountpoint="/home/%(USER)/publica" />
<volume sgrp="l_asscomercial" fstype="smbfs" server="tmkdc1" path="sistemas" mountpoint="/home/%(USER)/sistemas" />
<volume sgrp="l_asscomercial" fstype="smbfs" server="tmkdc1" path="teleatend" mountpoint="/home/%(USER)/teleatend" />
<volume sgrp="l_asscomercial" fstype="smbfs" server="admfile1" path="iq2000" mountpoint="/home/%(USER)/iq2000" />

<!-- usuarios do grupo L_Juridico -->

<volume sgrp="l_juridico" fstype="smbfs" server="admfile1" path="users/%(USER)" mountpoint="/home/%(USER)/users" />
<volume pgrp="l_juridico" fstype="smbfs" server="admfile1" path="publica" mountpoint="/home/%(USER)/publica" />
<volume pgrp="l_juridico" fstype="smbfs" server="admfile1" path="sistemas" mountpoint="/home/%(USER)/sistemas" />
<volume pgrp="l_juridico" fstype="smbfs" server="tmkdc1" path="teleatend" mountpoint="/home/%(USER)/teleatend" />
<volume pgrp="l_juridico" fstype="smbfs" server="admfile1" path="iq2000" mountpoint="/home/%(USER)/iq2000" />
<volume pgrp="l_juridico" fstype="smbfs" server="tmkdc1" path="telelistas" mountpoint="/home/%(USER)/telelistas" />

[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" />

5. gostaria que informasse o progresso do ajuste.

abraços,

lourival

[13] Comentário enviado por aantunes em 02/10/2009 - 18:09h

Lourival,

[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.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts