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: 32.285 ]

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


Verificando o perfil srv



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

      #####################################################################
      #####################################################################

"
echo -n "      Digite a opcao de configuração desejada: "
read opcao
   case $opcao in  
   1) cria_samba
;;
   2) cria_base
;;
   3) cria_grupo
;;
   4) cria_publico
;;
   5) inclui_usuario
;;
   6) exclui_usuario
;;
   7) bloqueia_usuario
;;
   8) desbloqueia_usuario
;;
   9)
      clear
      continue
;;
   *) valor_invalido;
;;
   esac
}

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

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

obey pam restrictions = Yes
passwdb backend = /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


[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

   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

   echo "Exportando compartilhamento publico criado no Servidor..."
   echo "
volume * smbfs $servidor $compart ~/$compart uid=&,gid=&,dmask=0750 - -
">/tmp/pam_mount.conf
   sudo cat /tmp/pam_mount.conf >>/etc/security/pam_mount.conf
   sleep 3
}

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.

Página anterior     Próxima página

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

Mudança de hábito: autenticando usuários em base de dados MySQL

webCalendar: a agenda e o PAM

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

Cliente Linux no servidor LDAP

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

Leitura recomendada

Entendendo as permissões no Linux

Enjaulamento de usuário no sistema operacional

Descobrindo chave WPA2 com Aircrack-ng

Monitorando redes utilizando Ntop

Segurança na Internet

  
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 ! calaff2@hotmail.com

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts