Pular para o conteúdo

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.
lourival araujo da silva araujo_silva
Hits: 34.730 Categoria: Linux Subcategoria: Segurança
  • Indicar
  • Impressora
  • Denunciar

Parte 4: 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.

   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

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

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

webCalendar: a agenda e o PAM

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

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

Computação Forense - Entendendo uma perícia

Arquivo de configuração do mod_security

AUDIT: Auditoria de arquivos no Linux para conhecer quem fez alterações em arquivos

Quad9 - O que é e como usar

webCalendar: a agenda e o PAM

#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

Entre na sua conta para comentar.