Instalação e configuração de Servidor Samba PDC + OpenLDAP + DHCP + DNS + Debian Squeeze

  1. Domínio que vamos utilizar: douglasqsantos.com.br
  2. Faixa de ip: 10.0.0.0/24
  3. Ip do Servidor: 10.0.0.26

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.

Sempre quanto terminar a edição de algum arquivo .ldif no vim sempre pressione F7 para ele remover os espaços nos finais de linha que sempre da merda ;)

Vamos fazer a configuração do DNS + DHCP primeiro que é a mais light.

Vamos atualizar os repositórios e fazer um upgrade do sistema

aptitude update && aptitude dist-upgrade -y

Agora vamos instalar o bind

aptitude install bind9 dnsutils -y

Agora vamos parar ele para fazer algumas manutenções

/etc/init.d/bind9 stop

Vamos criar os diretorios necessários

mkdir -p /var/lib/named/etc
mkdir -p /var/lib/named/dev
mkdir -p /var/lib/named/var/log
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/cache/bind/dynamic
mkdir -p /var/lib/named/var/run/bind/run
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
mknod /var/lib/named/dev/zero c 1 8

Vamos acertar as permissões

chmod 666 /var/lib/named/dev/{null,random}
chown -R bind:bind /var/lib/named/var/*

Vamos acertar a localização dos diretórios e as permissões

mv /etc/bind /var/lib/named/etc
ln -sf /var/lib/named/etc/bind /etc/bind
cp /etc/localtime /var/lib/named/etc
chown -R bind:bind /var/lib/named/etc/bind
chown -R root:bind /var/lib/named/var/cache/bind/dynamic
chmod -R 775 /var/lib/named/var/cache/bind/dynamic

Vamos informar para o bind aonde fica a jaula

vim /etc/default/bind9
RESOLVCONF=yes
OPTIONS="-u bind -t /var/lib/named"

Acertando o arquivo que controla a consulta de dns

vim /etc/resolv.conf
domain douglasqsantos.com.br
nameserver 10.0.0.26

Gerando a chave para o DHCP poder atualizar as zonas de DNS, OBS: demora um pouco para gerar a chave.

cd /etc/bind/
dnssec-keygen -a hmac-md5 -b 128 -n USER dhcpupdate

Agora vamos visualizar o conteudo da nossa chave, vamos utilizar ela no arquivo de zonas e no arquivo de configuração do DHCP.

cat /etc/bind/K*.key
dhcpupdate. IN KEY 0 3 157 hsEAzU7JwA/mj+8P/fsntg==

Vamos acertar algumas opções do bind

vim /etc/bind/named.conf.options
#/etc/bind/named.conf.options
options {
 directory "/var/cache/bind";
 managed-keys-directory "/var/cache/bind/dynamic";
 auth-nxdomain no;
 listen-on-v6 { any; };
 listen-on { 127.0.0.1/32; 10.0.0.0/24; };
 allow-query { any; };
 recursion no;
 version "Nao Disponivel";
### Habilita DNSSEC ###
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside auto;
};
 
#Controles 
include "/etc/bind/rndc.key";
controls {
        inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; };
};
 
#LOGS
logging {
 channel xfer-log {
 file "/var/log/named.log";
 print-category yes;
 print-severity yes;
 print-time yes;
 severity info;
 };
 category xfer-in { xfer-log; };
 category xfer-out { xfer-log; };
 category notify { xfer-log; };
 
 channel update-debug {
 file "/var/log/named-update-debug.log";
 severity  debug 3;
 print-category yes;
 print-severity yes;
 print-time      yes;
 };
 channel security-info    {
 file "/var/log/named-auth-info.log";
 severity  info;
 print-category yes;
 print-severity yes;
 print-time      yes;
 };
 category update { update-debug; };
 category security { security-info; };
 
 };

Vamos acertar as referências de arquivos para o bind

vim /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.internal-zones";

Criando o arquivo que vai conter as zonas internas

vim /etc/bind/named.conf.internal-zones
#Definindo quem vão ser os nossos hosts internos, ex: a nossa rede e a maquina local
acl "internal_hosts" {
 10.0.0.0/24;
 127.0.0.1/32;
};
 
 
#Definição da View interna
view "internal" {
 
#Definindo quais clientes vão poder consultar essa view
 match-clients {
 internal_hosts;
 };
 
#O nossos clientes da view interna vão poder efetuar consultas recursivas
 recursion yes;
 
 
#Zonas hint aonde temos as definições dos root masters
 zone "." {
   type hint;
   file "/etc/bind/db.root";
 };
 
#Zonas internas
 zone "localhost" {
   type master;
   file "/etc/bind/db.local";
 };
 
zone "127.in-addr.arpa" {
   type master;
   file "/etc/bind/db.127";
 };
 
 zone "0.in-addr.arpa" {
   type master;
   file "/etc/bind/db.0";
 };
 
 zone "255.in-addr.arpa" {
   type master;
   file "/etc/bind/db.255";
 };

 #Dominios locais
 zone "douglasqsantos.com.br" {
   type master;
   file "db.douglasqsantos.com.br.internal";
   allow-transfer { none; };
   allow-update { key dhcpupdate; };
 };
 
#Zona reversa do dominio na rede 10.0.0.0/24
zone "0.0.10.in-addr.arpa" {
  type master;
  file "db.0.0.10.internal";
  allow-transfer { none; };
  allow-update { key dhcpupdate; };
};   

#Chave para sincronismo entre dhcp e dns que visualizamos com o cat /etc/bind/K*.key
key "dhcpupdate" {
algorithm hmac-md5;
secret "hsEAzU7JwA/mj+8P/fsntg==";
};
 
};

Criando a zona interna do domínio

vim /var/lib/named/var/cache/bind/db.douglasqsantos.com.br.internal
$TTL 86400
@ IN SOA  dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. (
        2012022903  ; Serial
         3600       ; Refresh
         1800        ; Retry
         1209600      ; Expire
         3600 )     ; Minimum
 
;
 
@               IN      NS   douglasqsantos.com.br.
douglasqsantos.com.br. IN TXT "v=spf1 a mx ip4:10.0.0.0/24 -all"
mail.douglasqsantos.com.br IN TXT "v=spf1 a -all"
 
@               IN      NS   ns1.douglasqsantos.com.br.
@               IN      NS   ns2.douglasqsantos.com.br.
@               IN      MX   0 mail.douglasqsantos.com.br.
 
;NAME SERVERS
@               IN      A    10.0.0.26
ns1             IN      A    10.0.0.26
ns2             IN      A    10.0.0.26
dns             IN      A    10.0.0.26
pdc   IN  A    10.0.0.26
ldap    IN  A    10.0.0.26
ldap2   IN  A    10.0.0.26
kdc1    IN  A    10.0.0.26
kdc2    IN  A    10.0.0.26
 
;MAIL SERVERS
mail            IN      A    10.0.0.26
imap            IN      CNAME mail
pop             IN      CNAME mail
smtp            IN      CNAME mail
webmail         IN      CNAME mail
 
;WEB SERVERS
www             IN      A    10.0.0.26
ftp             IN      CNAME www
mailadmin       IN      CNAME www
 
; Dominio Kerberos e LDAP
_kerberos.douglasqsantos.com.br.                              IN TXT           "douglasqsantos.com.br"
_kerberos.srv.douglasqsantos.com.br.                          IN TXT           "douglasqsantos.com.br"
_kerberos._tcp.douglasqsantos.com.br.                         IN SRV 0 100 88  ldap.douglasqsantos.com.br.
_kerberos._udp.douglasqsantos.com.br.                         IN SRV 0 100 88  ldap.douglasqsantos.com.br.
_kerberos-adm._tcp.douglasqsantos.com.br.                     IN SRV 0 100 749 ldap.douglasqsantos.com.br.
_kerberos-master._udp.douglasqsantos.com.br.                  IN SRV 0 100 88  ldap.douglasqsantos.com.br.
_kerberos.douglasqsantos.com.br.                              IN SRV 0 100 88  ldap.douglasqsantos.com.br.
_kpasswd.douglasqsantos.com.br.                               IN SRV 0 100 464 ldap.douglasqsantos.com.br.
_kpasswd._udp.douglasqsantos.com.br.                          IN SRV 0 100 464 ldap.douglasqsantos.com.br.
_ldap._tcp.douglasqsantos.com.br.                             IN SRV 0 100 389 ldap.douglasqsantos.com.br.
_ldap.douglasqsantos.com.br.          IN SRV 0 100 389 ldap.douglasqsantos.com.br. 
; Busca de Informações de LDAP e Samba
_ldap_dc.douglasqsantos.com.br.                               IN TXT           "dc=douglasqsantos,dc=com,dc=br"
_samba_pdc_domain.douglasqsantos.com.br.                      IN TXT           "DOUGLASQSANTOS"
_samba_pdc_ip_address.douglasqsantos.com.br.                  IN TXT           "10.0.0.26"

Agora vamos criar a zona inversa

vim /var/lib/named/var/cache/bind/db.0.0.10.internal
$TTL 86400
@ IN SOA  dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. (
                        2012022901  ; Serial
                        3600       ; Refresh
                        1800        ; Retry
                        604800      ; Expire
                        3600 )     ; Minimum
 
; 
@   IN  NS   douglasqsantos.com.br.
@               IN  NS   ns1.douglasqsantos.com.br.
@               IN  NS   ns2.douglasqsantos.com.br.
@               IN  MX   0 mail.douglasqsantos.com.br.
 
;NAME SERVERS
26      IN  PTR    douglasqsantos.com.br.
26      IN  PTR    ns1.douglasqsantos.com.br.
26      IN  PTR    ns2.douglasqsantos.com.br.
26      IN  PTR    dns.douglasqsantos.com.br.

;LDAP e Kerberos
26  IN  PTR    ldap.douglasqsantos.com.br.
26  IN  PTR    ldap2.douglasqsantos.com.br.
26  IN  PTR    kdc1.douglasqsantos.com.br.
26  IN  PTR    kdc2.douglasqsantos.com.br.
26  IN  PTR    pdc.douglasqsantos.com.br.

;MAIL SERVERS
26    IN  PTR    mail.douglasqsantos.com.br.
 
;WEB SERVERS
26      IN  PTR    www.douglasqsantos.com.br.

Vamos criar o managed-key

touch /var/lib/named/var/cache/bind/managed-keys.bind

Agora vamos reiniciar o nosso bind

/etc/init.d/bind9 restart

Vamos testar uma consulta

nslookup www
Server:   10.0.0.26
Address:  10.0.0.26#53

Name: www.douglasqsantos.com.br
Address: 10.0.0.26

Vamos testar o reverso

host 10.0.0.26
26.0.0.10.in-addr.arpa domain name pointer dns.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa domain name pointer ns1.douglasqsantos.com.br
26.0.0.10.in-addr.arpa domain name pointer ns2.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa domain name pointer www.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa domain name pointer kdc1.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa domain name pointer kdc2.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa domain name pointer ldap.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa domain name pointer mail.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa domain name pointer ldap2.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa domain name pointer douglasqsantos.com.br.

Vamos testar o reverso agora pelo dig

dig -x 10.0.0.26
; <<>> DiG 9.7.3 <<>> -x 10.0.0.26
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24795
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 10, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:
;26.0.0.10.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
26.0.0.10.in-addr.arpa. 86400 IN  PTR douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR dns.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR ns1.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR ns2.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR www.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR kdc1.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR kdc2.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR ldap.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR mail.douglasqsantos.com.br.
26.0.0.10.in-addr.arpa. 86400 IN  PTR ldap2.douglasqsantos.com.br.

;; AUTHORITY SECTION:
0.0.10.in-addr.arpa.  86400 IN  NS  douglasqsantos.com.br.
0.0.10.in-addr.arpa.  86400 IN  NS  ns1.douglasqsantos.com.br.
0.0.10.in-addr.arpa.  86400 IN  NS  ns2.douglasqsantos.com.br.

;; ADDITIONAL SECTION:
ns1.douglasqsantos.com.br.  86400 IN  A 10.0.0.26
ns2.douglasqsantos.com.br.  86400 IN  A 10.0.0.26
douglasqsantos.com.br.  86400 IN  A 10.0.0.26

;; Query time: 0 msec
;; SERVER: 10.0.0.26#53(10.0.0.26)
;; WHEN: Tue Feb 28 16:40:00 2012
;; MSG SIZE  rcvd: 327

Vamos testar agora as consultas de serviços exemplo LDAP

host -t SRV _ldap._tcp.douglasqsantos.com.br.
_ldap._tcp.douglasqsantos.com.br has SRV record 0 100 389 ldap.douglasqsantos.com.br.

Vamos a mais uma consulta sobre o serviço LDAP

host -t SRV _ldap.douglasqsantos.com.br.
_ldap.douglasqsantos.com.br has SRV record 0 100 389 ldap.douglasqsantos.com.br.

Como pode ser notados esses registros servem para nos mostrar informações sobre o serviço do ldap o 0 significa prioridade do serviço quanto mais baixo mais prioridade o 100 significa peso então ele tem 100% ou seja master e o 389 significa a porta do serviço e o ldap.douglasqsantos.com.br. significa o host que esta respondendo este serviço.

Agora vamos instalar o servidor DHCP

aptitude install isc-dhcp-server -y

Vai ocorrer um erro a respeito da interface de rede mais isso vamos corrigir mais a frente

Vamos editar o arquivo de configuração do dhcp server

vim /etc/dhcp/dhcpd.conf
#Definindo o dominio
option domain-name "douglasqsantos.com.br"; 
#Definindo os servidores de DNS
option domain-name-servers 10.0.0.26, 8.8.8.8;
#Definindo o servidor de NetBios(WINS)
option netbios-name-servers 10.0.0.26;
#Definindo o tipo de netbios
option netbios-node-type 8;
#Defindo o broadcast da nossa rede
option broadcast-address 10.0.0.255;
#Defindo que o servidor é autoritativo para a rede
authoritative;
#Estilo de atualização do servidor DNS, este metodo vai ser o padrão de atualização do dns
#ele gera um registro (RR) TXT nos arquivos de zonas do DNS e os atualiza
ddns-update-style interim; 
#Força o servidor dhcp fazer atualizações para os endereços ips estáticos
update-static-leases on;
#Defindo o tipo de log que vai ser enviado para o syslog
log-facility local7;
#Defindo a chave de atualização entre o dhcp e o dns a chave que visualizamos com cat /etc/bind/K*.key
key dhcpupdate {
algorithm hmac-md5;
secret hsEAzU7JwA/mj+8P/fsntg==;
}
#defindo a zona que vamos efetuar atualizações
zone douglasqsantos.com.br. { 
   primary 127.0.0.1; 
   key dhcpupdate; 
} 
#definindo a zona que vamos efetuar atualizações para reverso
zone 0.0.10.in-addr.arpa. { 
   primary 127.0.0.1; 
   key dhcpupdate; 
}

#Tempo de emprestimo de um ip
default-lease-time 600; 
#tempo maximo de emprestimo de um ip
max-lease-time 7200;
#Declaração da sub-net
subnet 10.0.0.0 netmask 255.255.255.0 { 
#Declaração do range de ips disponiveis para emprestimo
range 10.0.0.20 10.0.0.60; 
#Define qual a subrede para este escopo
option subnet-mask 255.255.255.0;
#define qual o router para esse escopo
option routers 10.0.0.24; 
#Definindo um ip fixo
host douglas-xp {
 hardware ethernet 08:00:27:ED:99:94;
 fixed-address 10.0.0.21;
}

} #Fim do escopo

Definir em qual interface o dhcp vai trabalhar

sed -i 's/INTERFACES=""/INTERFACES="eth0"/g' /etc/default/isc-dhcp-server

Agora vamos fazer um ajuste no rsyslog

echo "local7.debug /var/log/dhcpd.log" >> /etc/rsyslog.conf

Agora vamos reiniciar o rsyslog

/etc/init.d/rsyslog restart

Agora vamos subir o servidor de dhcp

/etc/init.d/isc-dhcp-server restart
Stopping ISC DHCP server: dhcpd failed!
Starting ISC DHCP server: dhcpd.

Podemos acompanhar o trabalho do dhcp em /var/log/dhcpd.log

tail -f /var/log/dhcpd.log 
Feb 28 16:52:11 debian dhcpd: Copyright 2004-2010 Internet Systems Consortium.
Feb 28 16:52:11 debian dhcpd: All rights reserved.
Feb 28 16:52:11 debian dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Feb 28 16:52:11 debian dhcpd: Internet Systems Consortium DHCP Server 4.1.1-P1
Feb 28 16:52:11 debian dhcpd: Copyright 2004-2010 Internet Systems Consortium.
Feb 28 16:52:11 debian dhcpd: All rights reserved.
Feb 28 16:52:11 debian dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Feb 28 16:52:11 debian dhcpd: Wrote 0 deleted host decls to leases file.
Feb 28 16:52:11 debian dhcpd: Wrote 0 new dynamic host decls to leases file.
Feb 28 16:52:11 debian dhcpd: Wrote 0 leases to leases file.

Vamos ver um exemplo de maquina que pegou o ip e foi registrada no DNS

tail -f /var/log/dhcpd.log
Feb 28 16:53:34 debian dhcpd: DHCPDISCOVER from 08:00:27:ed:99:94 via eth0
Feb 28 16:53:34 debian dhcpd: DHCPOFFER on 10.0.0.21 to 08:00:27:ed:99:94 via eth0
Feb 28 16:53:34 debian dhcpd: Added new forward map from douglas-xp.douglasqsantos.com.br to 10.0.0.21
Feb 28 16:53:34 debian dhcpd: added reverse map from 21.0.0.10.in-addr.arpa. to douglas-xp.douglasqsantos.com.br
Feb 28 16:53:34 debian dhcpd: DHCPREQUEST for 10.0.0.21 (10.0.0.26) from 08:00:27:ed:99:94 via eth0
Feb 28 16:53:34 debian dhcpd: DHCPACK on 10.0.0.21 to 08:00:27:ed:99:94 via eth0

Agora vamos testar o dns para ver se esta resolvendo mesmo

nslookup douglas-xp.douglasqsantos.com.br
Server:   10.0.0.26
Address:  10.0.0.26#53

Name: douglas-xp.douglasqsantos.com.br
Address: 10.0.0.21

Agora vamos testar o reverso desta maquina

dig -x 10.0.0.21

; <<>> DiG 9.7.3 <<>> -x 10.0.0.21
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30583
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:
;21.0.0.10.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
21.0.0.10.in-addr.arpa. 300 IN  PTR douglas-xp.douglasqsantos.com.br.

;; AUTHORITY SECTION:
0.0.10.in-addr.arpa.  86400 IN  NS  ns2.douglasqsantos.com.br.
0.0.10.in-addr.arpa.  86400 IN  NS  douglasqsantos.com.br.
0.0.10.in-addr.arpa.  86400 IN  NS  ns1.douglasqsantos.com.br.

;; ADDITIONAL SECTION:
ns1.douglasqsantos.com.br.  86400 IN  A 10.0.0.26
ns2.douglasqsantos.com.br.  86400 IN  A 10.0.0.26
douglasqsantos.com.br.  86400 IN  A 10.0.0.26

;; Query time: 0 msec
;; SERVER: 10.0.0.26#53(10.0.0.26)
;; WHEN: Tue Feb 28 16:56:04 2012
;; MSG SIZE  rcvd: 178

Como pode ser notado temos agora o DHCP trabalhando em conjunto com o DNS

Agora vamos a configuração do OpenLDAP

Vamos fazer a instalação dos pacotes necessários.

aptitude update && aptitude dist-upgrade -y && aptitude install slapd ldap-utils -y
#Aqui vamos ter que informar a senha para o Administrador do nosso LDAP.

Agora vamos checar se o nosso servidor esta trabalhando.

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config
dn: cn=module{0},cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: olcBackend={0}hdb,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}hdb,cn=config

Agora vamos inserir a senha do admin hdb do LDAP e trocar a senha do admin do config do LDAP, mas primeiro temos que gerar um hash da senha.

slappasswd -s senha
{SSHA}F4oAyMcAPBlNgRascGQgR5KspB6/HWos

OBS: NÃO PODE HAVER ESPAÇOS APÓS APÓS O ÚLTIMO CARACTER DA LINHA NO ARQUIVO .LDIF SENÃO VAMOS OBTER ERRO NA IMPORTAÇÃO DOS ARQUIVOS EXEMPLO DE ERRO

ldap_add: Invalid syntax (21) additional info: objectClass: value #1 invalid per syntax

Vamos consultar a nossa base LDAP

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcRootDN olcRootPW
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}hdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config
olcRootDN: cn=admin,cn=config

dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=douglasqsantos,dc=com,dc=br
olcRootPW: {SSHA}ICTJMI27hEsmf2Y29dNuuj31+viZNUMp

OBS: Em alguns casos note que não temos um olcRootPW depois de dn: olcDatabase={0}config,cn=config, que é a senha da administração da configuração do LDAP, com isso vamos ter que inserir uma, caso contrário podemos modificar ela.

Agora vamos criar o arquivo para ser importado com a senha do nosso admin do config LDAP, caso ela ainda não exista.

vim /root/admin.mod.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}F4oAyMcAPBlNgRascGQgR5KspB6/HWos

Agora vamos importar a nova senha para o LDAP

ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/admin.mod.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

Agora se precisarmos trocar a senha do admin da instalação do LDAP temos que criar o arquivo para efetuar a modificação da senha e importar ele aqui eu vou utilizar a mesma senha tanto para o admin de consultas como para o admin interno do LDAP

vim ~/root.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}F4oAyMcAPBlNgRascGQgR5KspB6/HWos

Vamos agora importar a nossa senha.

ldapmodify -Y EXTERNAL -H ldapi:/// -f ~/root.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

Agora vamos fazer uma consulta a respeito dos admins do nosso LDAP

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcRootDN olcRootPW
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}hdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config
olcRootDN: cn=admin,cn=config
olcRootPW: {SSHA}F4oAyMcAPBlNgRascGQgR5KspB6/HWos

dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=douglasqsantos,dc=com,dc=br
olcRootPW: {SSHA}F4oAyMcAPBlNgRascGQgR5KspB6/HWos

Vamos agora criar o nosso sufixo para o nosso domínio e a configuração de acesso.

vim ~/config.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=douglasqsantos,dc=com,dc=br
-
replace: olcRootDN
olcRootDN: cn=admin,dc=douglasqsantos,dc=com,dc=br
-
replace: olcAccess
olcAccess: to attrs=userPassword by dn="cn=admin,dc=douglasqsantos,dc=com,dc=br" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=douglasqsantos,dc=com,dc=br" write by * read

Agora vamos inserir essas configurações no nosso servidor LDAP.

ldapmodify -Y EXTERNAL -H ldapi:/// -f ~/config.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"

Vamos checar agora a configuração do nosso servidor LDAP.

ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb 
Enter LDAP Password: senha
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcLastMod: TRUE
olcRootPW: {SSHA}NY5Op1B2glPKpZWTFb266Jyir9dzG+Rt
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcSuffix: dc=douglasqsantos,dc=com,dc=br
olcRootDN: cn=admin,dc=douglasqsantos,dc=com,dc=br
olcAccess: {0}to attrs=userPassword by dn="cn=admin,dc=douglasqsantos,dc=com,dc=br" write by anonymous auth by self write by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to dn.base="" by * read
olcAccess: {3}to * by dn="cn=admin,dc=douglasqsantos,dc=com,dc=br" write by * read

Agora vamos criar o dominio do nosso LDAP

vim ~/raiz.ldif
dn: dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: dcObject
objectclass: organization
o: Douglas
dc: douglas
description: LDAP Server

Agora vamos importar o nosso domínio para a base LDAP

ldapadd -x -c -D cn=admin,dc=douglasqsantos,dc=com,dc=br -W -f ~/raiz.ldif 
Enter LDAP Password: 
adding new entry "dc=douglasqsantos,dc=com,dc=br"

Caso já tenha sido configurado pela instalação o domínio vamos obter a seguinte saída

ldapadd -x -c -D cn=admin,dc=douglasqsantos,dc=com,dc=br -W -f ~/raiz.ldif 
Enter LDAP Password: 
adding new entry "dc=douglasqsantos,dc=com,dc=br"
ldap_add: Already exists (68)

Agora vamos criar os contêiner que vão ficar armazenados os nossos usuários, grupos e máquinas

vim ~/ous.ldif 
dn: ou=Usuarios,dc=douglasqsantos,dc=com,dc=br
ou: Usuarios
objectClass: organizationalUnit
objectClass: top

dn: ou=Grupos,dc=douglasqsantos,dc=com,dc=br
ou: Grupos
objectClass: organizationalUnit
objectClass: top

dn: ou=Maquinas,dc=douglasqsantos,dc=com,dc=br
ou: Maquinas
objectClass: organizationalUnit
objectClass: top

Agora temos que importar o nosso arquivo para o LDAP

ldapadd -x -c -D cn=admin,dc=douglasqsantos,dc=com,dc=br -W -f ~/ous.ldif 
Enter LDAP Password: 
adding new entry "ou=Usuarios,dc=douglasqsantos,dc=com,dc=br"

adding new entry "ou=Grupos,dc=douglasqsantos,dc=com,dc=br"

adding new entry "ou=Maquinas,dc=douglasqsantos,dc=com,dc=br"

Exemplo de erro de importação da ous por casa de espaço no aquivo

ldapadd -x -c -D cn=admin,dc=douglasqsantos,dc=com,dc=br -W -f ~/ous.ldif 
Enter LDAP Password: 
ldapadd: attributeDescription "dn": (possible missing newline after line 10, entry "ou=Usuarios,dc=douglasqsantos,dc=com,dc=br"?)
ldapadd: attributeDescription "dn": (possible missing newline after line 11, entry "ou=Usuarios,dc=douglasqsantos,dc=com,dc=br"?)
adding new entry "ou=Usuarios,dc=douglasqsantos,dc=com,dc=br"
ldap_add: Type or value exists (20)
  additional info: objectClass: value #0 provided more than once

Agora vamos criar o admin do LDAP

Vamos gerar a senha

slappasswd -s senha
{SSHA}gIeWDqs/mJwIGFuNeGbwg8G0/tZav3d8

Agora que já temos a senha vamos criar o arquivo para importar para o LDAP

vim ~/admin.ldif
dn: cn=admin, dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: simpleSecurityObject
objectclass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: {SSHA}gIeWDqs/mJwIGFuNeGbwg8G0/tZav3d8

Agora vamos importar o arquivo do admin

ldapadd -x -c -D cn=admin,dc=douglasqsantos,dc=com,dc=br -W -f ~/admin.ldif
Enter LDAP Password: 
adding new entry "cn=admin, dc=douglasqsantos,dc=com,dc=br"

Caso o nosso admin já tenho sido criado na instalação do ldap vamos ter o seguinte retorno no comando acima

ldapadd -x -c -D cn=admin,dc=douglasqsantos,dc=com,dc=br -W -f ~/admin.ldif
Enter LDAP Password: 
adding new entry "cn=admin, dc=douglasqsantos,dc=com,dc=br"
ldap_add: Already exists (68)

OBS: Acho melhor excluir os usuários locais deixar somente o usuário root para o sistema local, caso ache necessário utilize a seguinte padronização somente nome do usuário para efetuar login no servidor local e nome.sobrenome para logar na base do LDAP.

Vou disponibilizar um script para efetuar a migração dos usuários locais para um arquivo ldif que pode ser importado para a base LDAP

vim expldif.sh
#!/bin/bash
#Aqui neste script estamos fazendo migração dos usuários que tem uid com 4 digitos
SUFFIX='dc=douglasqsantos,dc=com,dc=br'
LDIF='usuariosldif.ldif'

for line in $(grep "x:[1-9][0-9][0-9][0-9]:" /etc/passwd | sed -e "s/ /%/")
do
 UID1=$(echo $line | cut -d: -f1)
 NAME=$(echo $line | cut -d: -f5 | cut -d, -f1)
 if [ ! "$NAME" ]
 then
 NAME=$UID1
 else
 NAME=$(echo $NAME | sed -e "s/%/ /")
 fi
 SN=$(echo $NAME | awk '{print $2}')
 if [ ! "$SN" ]
 then
 SN=$NAME
 fi
 GIVEN=$(echo $NAME | awk '{print $1}')
 UID2=$(echo $line | cut -d: -f3)
 GID=$(echo $line | cut -d: -f4)
 PASS=$(grep $UID1 /etc/shadow | cut -d: -f2)
 SHELL=$(echo $line | cut -d: -f7)
 HOME=$(echo $line | cut -d: -f6)
 EXPIRE=$(passwd -S $UID1 | awk '{print $7}')
 FLAG=$(grep $UID1 /etc/shadow | cut -d: -f9)
 if [ ! "$FLAG" ]
 then
 FLAG="0"
 fi
 WARN=$(passwd -S $UID1 | awk '{print $6}')
 MIN=$(passwd -S $UID1 | awk '{print $4}')
 MAX=$(passwd -S $UID1 | awk '{print $5}')
 LAST=$(grep $UID1 /etc/shadow | cut -d: -f3)
 echo "dn: uid=$UID1,ou=usuarios,$SUFFIX" >> $LDIF
 echo "objectClass: inetOrgPerson" >> $LDIF
 echo "objectClass: posixAccount" >> $LDIF
 echo "objectClass: shadowAccount" >> $LDIF
 echo "uid: $UID1" >> $LDIF
 echo "sn: $SN" >> $LDIF
 echo "givenName: $GIVEN" >> $LDIF
 echo "cn: $NAME" >> $LDIF
 echo "displayName: $NAME" >> $LDIF
 echo "uidNumber: $UID2" >> $LDIF
 echo "gidNumber: $GID" >> $LDIF
 echo "userPassword: {crypt}$PASS" >> $LDIF
 echo "gecos: $NAME" >> $LDIF
 echo "loginShell: $SHELL" >> $LDIF
 echo "homeDirectory: $HOME" >> $LDIF
 echo "shadowExpire: $EXPIRE" >> $LDIF
 echo "shadowFlag: $FLAG" >> $LDIF
 echo "shadowWarning: $WARN" >> $LDIF
 echo "shadowMin: $MIN" >> $LDIF
 echo "shadowMax: $MAX" >> $LDIF
 echo "shadowLastChange: $LAST" >> $LDIF
 echo >> $LDIF
done

Agora vamos gerar o nosso arquivo ldif com os usuários locais.

bash expldif.sh

Agora é só importar a base que foi gerada para o LDAP

ldapadd -x -D cn=admin,dc=douglasqsantos,dc=com,dc=br -W -f usuariosldif.ldif 
Enter LDAP Password: senhaadmin
adding new entry "uid=douglas,ou=usuarios,dc=douglasqsantos,dc=com,dc=br"

Aqui no meu caso só tinha um usuário com um uid com 4 dígitos então foi só o que a minha base importou.

Agora vamos para o script que faz a migração de grupos locais para um arquivo ldif

vim gruposldif.sh
#!/bin/bash
#Aqui neste script estamos fazendo a migração dos grupos que tem gid com 4 digitos
SUFFIX='dc=douglasqsantos,dc=com,dc=br'
LDIF='gruposldif.ldif'

for line in $(grep "x:[1-9][0-9][0-9][0-9]:" /etc/group)
do
 CN=$(echo $line | cut -d: -f1)
 GID=$(echo $line | cut -d: -f3)
 echo "dn: cn=$CN,ou=grupos,$SUFFIX" >> $LDIF
 echo "objectClass: posixGroup" >> $LDIF
 echo "cn: $CN" >> $LDIF
 echo "gidNumber: $GID" >> $LDIF
 echo >> $LDIF
done

Agora vamos gerar o nosso ldif com os grupos

bash gruposldif.sh

Agora vamos importar os grupos para o ldap

ldapadd -x -D cn=admin,dc=douglasqsantos,dc=com,dc=br -W -f gruposldif.ldif 
Enter LDAP Password: senhaadmin
adding new entry "cn=douglas,ou=grupos,dc=douglasqsantos,dc=com,dc=br"

Agora vamos a instalação e configuração do Ldap Account Manager

aptitude install ldap-account-manager php5-ldap php5-gd php-fpdf libjs-jquery libjs-jquery-ui debconf php5-mcrypt ldap-account-manager-lamdaemon -y

Vamos configurar ele agora o arquivo é /usr/share/ldap-account-manager/config/lam.conf

vim /usr/share/ldap-account-manager/config/lam.conf
[...]
admins: cn=admin,dc=douglasqsantos,dc=com,dc=br
[...]
treesuffix: dc=douglasqsantos,dc=com,dc=br
[...]
defaultLanguage: pt_BR.utf8:UTF-8:Português (Brasil)
[...]
types: suffix_user: ou=Usuarios,dc=douglasqsantos,dc=com,dc=br
[...]
types: suffix_group: ou=Grupos,dc=douglasqsantos,dc=com,dc=br
[...]
types: suffix_host: ou=Maquinas,dc=douglasqsantos,dc=com,dc=br
[...]
types: suffix_smbDomain: dc=douglasqsantos,dc=com,dc=br

Agora vamos acessar a nosso console web http://10.0.0.26/lam

Agora informe a senha do admin do ldap

Aqui vamos criar um grupo e um usuário para testes.

Vamos criar o grupo

  1. Selecione nessa tela principal na parte superior o item Grupos
  2. Agora selecione novo grupo
  3. Informe Nome do grupo: ti-admin
  4. Numero GID: não informe nada que vai ser gerado automaticamente
  5. Agora informe uma descrição: Grupo de Admins
  6. Agora selecione salvar
  7. Agora selecione voltar a lista de grupos
  8. Como pode ser notado o nosso grupo esta ali.
  9. Para efetuar alguma alteração nele basta selecionar o ícone com um bloco de notas e um lápis.

Agora vamos criar o usuário

  1. Selecione Usuários
  2. Agora novo usuário.
  3. Informe o que achar necessário aqui, quanto mais informações melhor.
  4. Selecione Unix
  5. Informe o nome de usuario dele ex: douglas.santos
  6. Nome comun: Douglas Quintiliano dos Santos
  7. Número uid: deixe vazio para ele gerar um automaticamente
  8. Selecione definir senha
  9. Digite uma senha e confirme ela.
  10. Selecione ok
  11. Selecione Sombra que é quem controla as senhas
  12. Selecione Adicionar uma extensão de Conta Shadow
  13. Em aviso de senha selecione 10 (Dias antes da senha expirar em que o usuário será alertado sobre a expiração de sua senha. Se atribuir valor, este deve ser maior que 0. Pode ser vazio.)
  14. Em expiração de senha selecione 1 (Número de dias que um usuário poderá iniciar uma sessão mesmo que sua senha tenha expirado. -1=sempre. Pode ser vazio.)
  15. Em idade mínima para senha selecione 7 (Número de dias que um usuário irá esperar até que este esteja habilitado para trocar sua senha novamente. Se habilitado, deve ser um valor maior que 0. Pode ser vazio.)
  16. Em idade máxima da senha informe 15 (Número de dias que um usuário irá esperar até que este esteja habilitado para trocar sua senha novamente. Se habilitado, deve ser um valor maior que 0. Pode ser vazio.)
  17. Agora selecione salvar
  18. Pronto temos o nosso usuario
  19. Selecione Voltar à lista de usuários

Agora vamos ver como configuramos o cliente, como o nosso servidor LDAP vai ser cliente LDAP também vamos configurar ele.

Vamos a instalação de alguns pacotes necessários

aptitude install libnss-ldap libpam-ldap ldap-utils -y

Informe a respostas como abaixo

  1. dc=douglasqsantos,dc=com,dc=br
  2. 3
  3. cn=admin,dc=douglasqsantos,dc=com,dc=br
  4. senhaadmin
  5. ok
  6. yes
  7. no
  8. cn=admin,dc=douglasqsantos,dc=com,dc=br
  9. senhadmin

Agora vamos fazer um backup do arquivo que controla aonde vai ser consultado os usuários, grupos e senhas no sistema

cp -Rfa /etc/nsswitch.conf{,.bkp}

Vamos editar ele agora /etc/nsswitch.conf

vim /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       ldap

Vamos acertar o arquivo que controla o cliente LDAP /etc/ldap/ldap.conf

vim /etc/ldap/ldap.conf
URI ldap://10.0.0.26/
BASE dc=douglasqsantos,dc=com,dc=br

Vamos efetuar um backup da pam

cp -Rfa /etc/pam.d{,.bkp}

Vamos efetuar alguns ajustes na pam primeiro no arquivo que controla as senhas deixe o arquivo /etc/pam.d/common-password como abaixo

vim /etc/pam.d/common-password
password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 user_unknown=ignore default=die]     pam_ldap.so try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so

Agora vamos efetuar o ajuste no arquivo que controla as sessões caso o diretório home não exista o sistema vai cria deixe o arquivo /etc/pam.d/common-session como abaixo

vim /etc/pam.d/common-session
session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required        pam_unix.so
session optional                        pam_ldap.so
session optional pam_mkhomedir.so skel=/etc/skel umask=077

Agora vamos efetuar o ajuste do arquivo de autenticação do ssh é o arquivo /etc/pam.d/sshd o arquivo vai ter que ficar parecido com o abaixo.

vim /etc/pam.d/sshd
auth       required     pam_env.so # [1]
auth       required     pam_env.so envfile=/etc/default/locale
@include common-auth
account    required     pam_nologin.so
#adicionar as linhas abaixo para limitarmos o acesso ao ssh dessa maquina somente aos usuarios do grupo ti-admin
account    sufficient   pam_succeed_if.so user ingroup root
account    requisite    pam_succeed_if.so user ingroup ti-admin
@include common-account
@include common-session
session    optional     pam_motd.so # [1]
session    optional     pam_mail.so standard noenv # [1]
session    required     pam_limits.so
@include common-password

Vamos também limitar o acesso ao console do servidor limitando também que somente o root e o grupo ti-admin tenha acesso vamos editar o arquivo /etc/pam.d/login o arquivo vai ter que ficar parecido com o abaixo.

vim /etc/pam.d/login
auth       optional   pam_faildelay.so  delay=3000000
auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
auth       requisite  pam_nologin.so
#adicionar essas 2 novas linhas abaixo
account    sufficient   pam_succeed_if.so user ingroup root
account    requisite    pam_succeed_if.so user ingroup ti-admin
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session       required   pam_env.so readenv=1
session       required   pam_env.so readenv=1 envfile=/etc/default/locale
@include   common-auth
auth       optional   pam_group.so
session    required   pam_limits.so
session    optional   pam_lastlog.so
session    optional   pam_motd.so
session    optional   pam_mail.so standard
@include common-account
@include common-session
@include common-password
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open

Agora vamos reiniciar o servidor e testar

telinit 6

Agora após iniciar o servidor novamente logue com o usuário root e vamos trocar para o usuário douglas.santos

su - douglas.santos
Criando o diretório '/home/douglas.santos'.
douglas.santos@debian22:~$ 

Agora vamos configurar um cliente Debian Squeeze Vamos a instalação de alguns pacotes necessários

aptitude install libnss-ldap libpam-ldap ldap-utils -y

Informe a respostas como abaixo

  1. dc=douglasqsantos,dc=com,dc=br
  2. 3
  3. cn=admin,dc=douglasqsantos,dc=com,dc=br
  4. senhaadmin
  5. ok
  6. yes
  7. no
  8. cn=admin,dc=douglasqsantos,dc=com,dc=br
  9. senhadmin

Agora vamos fazer um backup do arquivo que controla aonde vai ser consultado os usuários, grupos e senhas no sistema

cp -Rfa /etc/nsswitch.conf{,.bkp}

Vamos editar ele agora /etc/nsswitch.conf

vim /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       ldap

Vamos acertar o arquivo que controla o cliente LDAP /etc/ldap/ldap.conf

vim /etc/ldap/ldap.conf
URI ldap://10.0.0.26/
BASE dc=douglasqsantos,dc=com,dc=br

Vamos efetuar um backup da pam

cp -Rfa /etc/pam.d{,.bkp}

Vamos efetuar alguns ajustes na pam primeiro no arquivo que controla as senhas deixe o arquivo /etc/pam.d/common-password como abaixo <code bash > vim /etc/pam.d/common-password password [success=2 default=ignore] pam_unix.so obscure sha512 password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass password requisite pam_deny.so password required pam_permit.so </sxh>

Agora efetuar o ajuste no arquivo que controla as sessões caso o diretório home não exista o sistema vai cria deixe o arquivo /etc/pam.d/common-session como abaixo

vim /etc/pam.d/common-session
session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required        pam_unix.so
session optional                        pam_ldap.so
session optional pam_mkhomedir.so skel=/etc/skel umask=077

Agora vamos efetuar o ajuste do arquivo de autenticação do ssh /etc/pam.d/sshd o arquivo vai ter que ficar parecido com o abaixo

vim /etc/pam.d/sshd
auth       required     pam_env.so # [1]
auth       required     pam_env.so envfile=/etc/default/locale
@include common-auth
account    required     pam_nologin.so
#adicionar a linha abaixo para limitarmos o acesso ao ssh dessa maquina somente aos usuarios do grupo ti-admin
account    sufficient   pam_succeed_if.so user ingroup root
account    requisite    pam_succeed_if.so user ingroup ti-admin
@include common-account
@include common-session
session    optional     pam_motd.so # [1]
session    optional     pam_mail.so standard noenv # [1]
session    required     pam_limits.so
@include common-password

Vamos também limitar o acesso ao console do cliente para os grupos ti-admin e douglas-usuarios que tem que ser criado e inserido os usuários não administrativos para poder logar na maquina, siga os mesmos passos para criar o grupo ti-admin e o usuário, para criar o grupo douglas-usuarios e vamos permitir o login do root.

vim /etc/pam.d/login
auth       optional   pam_faildelay.so  delay=3000000
auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
auth       requisite  pam_nologin.so
#adicionar essas linhas no arquivo
account    sufficient   pam_succeed_if.so user ingroup root
account    sufficient   pam_succeed_if.so user ingroup ti-admin
account    requisite    pam_succeed_if.so user ingroup douglas-usuarios
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session       required   pam_env.so readenv=1
session       required   pam_env.so readenv=1 envfile=/etc/default/locale
@include   common-auth
auth       optional   pam_group.so
session    required   pam_limits.so
session    optional   pam_lastlog.so
session    optional   pam_motd.so
session    optional   pam_mail.so standard
@include common-account
@include common-session
@include common-password
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open

Agora vamos reiniciar o cliente e testar

telinit 6

Agora logue novamente no cliente com o usuário root e vamos mudar para o usuário douglas.santos

su - douglas.santos
Criando o diretório '/home/douglas.santos'.

Como podemos notar está funcionando tudo ok

Vamos fazer um acesso via ssh no cliente utilizando o usuário douglas.santos que temos somente no LDAP

$ ssh 10.0.0.73 -l douglas.santos
douglas.santos@10.0.0.73's password: 
Linux 02-debian 2.6.32-5-686 #1 SMP Mon Jun 13 04:13:06 UTC 2011 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
[16:29:38] douglas.santos@02-debian [~] $ pwd
/home/douglas.santos
[16:30:49] douglas.santos@02-debian [~] $ 

Agora um exemplo de log de acesso de um usuário logando localmente na maquina, porém este usuário pertence ao grupo douglas-usuarios

tail -f /var/log/auth.log
Feb 29 14:30:38 debian login[1166]: pam_unix(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty1 ruser= rhost=  user=jose.silva
Feb 29 14:30:38 debian login[1166]: pam_succeed_if(login:account): requirement "user ingroup root" not met by user "jose.silva"
Feb 29 14:30:38 debian login[1166]: pam_succeed_if(login:account): requirement "user ingroup ti-admin" not met by user "jose.silva"
Feb 29 14:30:38 debian login[1166]: pam_succeed_if(login:account): requirement "user ingroup douglas-usuarios" was met by user "jose.silva"
Feb 29 14:30:38 debian login[1166]: pam_unix(login:session): session opened for user jose.silva by LOGIN(uid=0)

Agora vamos configurar um cliente Centos 6

Vamos instalar os pacotes necessários

yum install openldap-clients nss-pam-ldapd -y

Agora vamos ajustar os arquivos do sistema

Vamos acertar o arquivo que controla o cliente LDAP /etc/openldap/ldap.conf

vim /etc/openldap/ldap.conf
URI ldap://10.0.0.26/
BASE dc=douglasqsantos,dc=com,dc=br

Agora vamos acertar o arquivo /etc/nslcd.conf

vim /etc/nslcd.conf
#Insira no final do arquivossl no
uri ldap://10.0.0.26/
base dc=douglasqsantos,dc=com,dc=br

Agora vamos a configuração do /etc/pam_ldap.conf

vim /etc/pam_ldap.conf
#Comente a linhas 17 deixe como abaixo
#host 127.0.0.1
#Na linha 20 deixe como abaixo
base dc=douglasqsantos,dc=com,dc=br
[...]
#Agora acrescente no final do arquivo
uri ldap://10.0.0.26/
ssl no

Agora vamos configurar o /etc/pam.d/system-auth o seu arquivo vai ter que ficar parecido com o abaixo.

vim /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_fprintd.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
#insira a linha abaixo
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
#insira a linha abaixo
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
#insira a linha abaixo
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so
#insira a linha abaixo
session     optional      pam_mkhomedir.so skel=/etc/skel umask=077

Vamos acertar o arquivo /etc/nsswitch.conf

vim /etc/nsswitch.conf
passwd:files ldap # line 33: deixe como no exemplo
shadow:files ldap # linha 34: deixe como no exemplo
group:files ldap  # linha 35: deixe como no exemplo

netgroup:ldap    # linha 57: deixe como no exemplo
automount: files ldap #linha 61: deixe como no exemplo

Agora precisamos alterar o ultimo arquivo /etc/sysconfig/authconfig

sed -i "s/USELDAP=no/USELDAP=yes/" /etc/sysconfig/authconfig

Agora vamos deixar o nslcd na inicialização

chkconfig nslcd on
telinit 6

Agora é só logar no sistema utilizando um usuário que esteja cadastrado no LDAP

Agora vamos configurar o acesso ao cliente via ssh vamos editar o arquivo /etc/pam.d/sshd

vim /etc/pam.d/sshd
#%PAM-1.0
#adicione essa linha abaixo
auth       sufficient   pam_ldap.so
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
#adicione essa linha abaixo note que somente os usuarios do grupo ti-admin vao conseguir ter acesso via ssh 
account    sufficient   pam_succeed_if.so user ingroup root
account    requisite    pam_succeed_if.so user ingroup ti-admin
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
#adiciona essa linha abaixo
session    required     pam_mkhomedir.so        skel=/etc/skel umask=0027
session    optional     pam_keyinit.so force revoke
session    include      password-auth

Vamos também limitar o acesso ao console do cliente para os grupos ti-admin e douglas-usuarios que tem que ser criado e inserido os usuários não administrativos para poder logar na maquina, siga os mesmos passos para criar o grupo ti-admin e o usuário, para criar o grupo douglas-usuarios e vamos permitir o login do root.

vim /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       sufficient   pam_ldap.so
auth       include      system-auth
account    required     pam_nologin.so
#adicione essa linha abaixo note que somente os usuarios do grupo ti-admin vao conseguir ter acesso via ssh 
account    sufficient   pam_succeed_if.so user ingroup root
account    sufficient   pam_succeed_if.so user ingroup ti-admin
account    requisite    pam_succeed_if.so user ingroup douglas-usuarios
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    required     pam_mkhomedir.so        skel=/etc/skel umask=0027
session    optional     pam_keyinit.so force revoke
session    include      system-auth
-session   optional     pam_ck_connector.so

Agora vamos fazer um teste de conexão via ssh com um usuário do grupo ti-admin

ssh 10.0.0.30 -l douglas.santos
santos@10.0.0.30's password: 
Last login: Wed Aug 10 17:31:33 2011 from douglas.douglasqsantos.com.br

Integrando o Samba ao LDAP

Agora vamos para a configuração do Samba como PDC utilizando os usuários do LDAP

Vamos instalar os pacotes necessários

aptitude -y install samba smbclient samba-doc cifs-utils smbfs

Nas perguntas escolha as padrões pois vamos mudar tudo.

Agora vamos copiar o schema do samba para o LDAP

cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/ 

Vamos descompactar ele

gzip -d /etc/ldap/schema/samba.schema.gz 

Agora vamos criar o arquivo com as referencias de schemas para o samba

vim /root/schema_convert.conf 
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/samba.schema

Agora vamos criar o diretorio para a conversão dos nossos schemas

cd /root
mkdir -p ./tmp/ldif_output 

Agora vamos converter o schema

slapcat -f schema_convert.conf -F ./tmp/ldif_output -n0 -s "cn={12}samba,cn=schema,cn=config" > ./tmp/cn=samba.ldif 

Agora vamos acertar o nosso schema antes de importar ele

vim ./tmp/cn=samba.ldif 
# Nas linhas 1,3: remova o  {12} )
dn: cn=samba,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: samba

# Agora remove as linhas 186 até o final do arquivo vão ser linhas semelhantes as abaixo.
structuralObjectClass: olcSchemaConfig
entryUUID: bd8a7a82-3cb8-102f-8d5f-070b4e5d16f8
creatorsName: cn=config
createTimestamp: 20100815125953Z
entryCSN: 20100815125953.198505Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20100815125953Z

Agora vamos importar o schema para o ldap

ldapadd -Y EXTERNAL -H ldapi:/// -f ./tmp/cn=samba.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=samba,cn=schema,cn=config"

Agora vamos criar o Indexes para o LDAP

vim /root/samba_indexes.ldif 
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub

Agora vamos importar os nosso indexes

ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/samba_indexes.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"

Agora vamos reiniciar o nosso ldap

/etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.

Agora vamos instalar o smbldap-tools que é a ferramenta de apoio para trabalhar Samba + LDAP

aptitude -y install smbldap-tools 

Agora vamos fazer um backup do arquivo de configuração do samba

mv /etc/samba/smb.conf /etc/samba/smb.conf.bkp

Agora vamos configurar o nosso samba

vim /etc/samba/smb.conf 
# Global parameters
[global]
  workgroup = DOUGLASQSANTOS
  netbios name = DOUGLASQSANTOS
  enable privileges = yes
  #interfaces = 192.168.5.11
  username map = /etc/samba/smbusers
  server string = Samba Server %v
  security = user
  encrypt passwords = Yes
# min passwd length = 3
  unix password sync = yes
  ldap passwd sync = yes
  passwd program = /usr/sbin/smbldap-passwd -u "%u"
  passwd chat = "Changing *\nNew password*" %n\n "*Retype new password*" %n\n

  log level = 0
  syslog = 0
  log file = /var/log/samba/log.%U
  max log size = 100000
  time server = Yes
  socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  mangling method = hash2
  Dos charset = CP932
  Unix charset = UTF-8

  logon script = logon.bat
  logon drive = U:
  logon home = \\%L\%U
  logon path = \\%L\profiles\%U

  domain logons = Yes
  domain master = Yes
  os level = 100
  preferred master = Yes
  wins support = yes
  passdb backend = ldapsam:ldap://127.0.0.1/
  ldap admin dn = cn=admin,dc=douglasqsantos,dc=com,dc=br
  ldap suffix = dc=douglasqsantos,dc=com,dc=br
  ldap group suffix = ou=Grupos
  ldap user suffix = ou=Usuarios
  ldap machine suffix = ou=Maquinas
  #ldap idmap suffix = ou=Idmap
  add user script = /usr/sbin/smbldap-useradd -m "%u"
  #ldap delete dn = Yes
  delete user script = /usr/sbin/smbldap-userdel "%u"
  add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
  add group script = /usr/sbin/smbldap-groupadd -p "%g" 
  delete group script = /usr/sbin/smbldap-groupdel "%g"
  add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
  delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
  set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'
  admin users = domainadm
  ldap ssl = no
  # printers configuration
  #printer admin = @"Print Operators"
  load printers = Yes
  create mask = 0640
  directory mask = 0750
  #force create mode = 0640
  #force directory mode = 0750
  nt acl support = yes
  printing = cups
  printcap name = cups
  deadtime = 10
  guest account = nobody
  map to guest = Bad User
  dont descend = /proc,/dev,/etc,/lib,/lost+found,/initrd
  show add printer wizard = yes
  ; to maintain capital letters in shortcuts in any of the profile folders:
  preserve case = yes
  short preserve case = yes
  case sensitive = no

[homes]
  path = /home/diretorios/%U
  comment = Diretorio home
  browseable = no
  writable = yes
  valid users = %U
  create mode = 0700
  directory mode = 0700
  preexec = /bin/bash /etc/samba/valida.sh %U %G
  preexec close = yes
[netlogon]
  path = /home/netlogon/
  browseable = No
  read only = yes

[profiles]
  path = /home/profiles
  read only = no
  create mask = 0600
  directory mask = 0700
  browseable = No
  guest ok = Yes
  profile acls = yes
  csc policy = disable
  # next line is a great way to secure the profiles 
  #force user = %U 
  # next line allows administrator to access all profiles 
  #valid users = %U "Domain Admins"

[printers]
        comment = Network Printers
        #printer admin = @"Print Operators"
        guest ok = yes 
        printable = yes
        path = /home/spool/
        browseable = No
        read only  = Yes
        printable = Yes
        print command = /usr/bin/lpr -P%p -r %s
        lpq command = /usr/bin/lpq -P%p
        lprm command = /usr/bin/lprm -P%p %j
        # print command = /usr/bin/lpr -U%U@%M -P%p -r %s
        # lpq command = /usr/bin/lpq -U%U@%M -P%p
        # lprm command = /usr/bin/lprm -U%U@%M -P%p %j
        # lppause command = /usr/sbin/lpc -U%U@%M hold %p %j
        # lpresume command = /usr/sbin/lpc -U%U@%M release %p %j
        # queuepause command = /usr/sbin/lpc -U%U@%M stop %p
        # queueresume command = /usr/sbin/lpc -U%U@%M start %p

[print$]
        path = /home/printers
        guest ok = No
        browseable = Yes
        read only = Yes
        valid users = @"Print Operators"
        write list = @"Print Operators"
        create mask = 0664
        directory mask = 0775

[public]
  path = /srv/publica
  guest ok = yes
  browseable = Yes
  writable = yes
[TI]
        path = /srv/Programas
        comment = Programas TI
        browsable = yes
        writable = yes
        create mask = 0664
        directory mask = 0775
        locking = no
        valid users =  @ti-admin

Criando o arquivo de mapeamento de usuários Samba/Windows

vim /etc/samba/smbusers
#ARQUIVO DE MAPEMENTO DE USUARIOS
#Formato: Unix_ID = Windows_ID
#EXEMPLO:
# root = Administrator
# douglas = "Douglas Santos"
root = Administrator
root = Administrador

Vamos criar os diretórios necessários e acertar as permissões

mkdir -p /home/{netlogon,profiles,diretorios}
chmod -R 777 /home/netlogon
chmod -R 1777 /home/{profiles,diretorios}

Vamos criar o diretório de programas para a TI e vamos criar a pasta pública.

mkdir /srv/{Programas,publica}
chmod -R 777 /srv/Programas
chmod -R 1777 /srv/publica

Agora vamos colocar no compartilhamento programas o registro para importar no Win7 para ele poder fazer parte do domínio samba.

vim /srv/Programas/win7.reg
Windows Registry Editor Version 5.00
       ; Win7_Samba3DomainMember
       [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters]
       "DNSNameResolutionRequired"=dword:00000000
       "DomainCompatibilityMode"=dword:00000001

       ; Speedup settings
       [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System]
       "SlowLinkDetectEnabled"=dword:00000000
       "DeleteRoamingCache"=dword:00000001
       "WaitForNetwork"=dword:00000000
       "CompatibleRUPSecurity"=dword:00000001

       ; Can drive you nuts
       [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
       "EnableLUA"=dword:00000000

Caso tenha maquinas Windows 7 na rede e precisar colocar no domínio samba precisa importar este registro primeiro.

Agora vamos criar o arquivo que valida se existe o diretório home do usuário e cria caso não exista.

vim /etc/samba/valida.sh
#!/bin/bash

DIRETORIO="/home/diretorios/${1}"

if [ ! -d ${DIRETORIO} ]; then
  mkdir -p ${DIRETORIO}
  chown -R ${1}:${2} ${DIRETORIO}
  chmod -R 750 ${DIRETORIO}
fi

Agora vamos dar permissão para o nosso script

chmod 755 /etc/samba/valida.sh

Agora vamos criar o script de logon

vim /home/netlogon/logon.bat
@echo off
       echo.
       echo AVISO: Não feche esta janela!!!
       echo.
       NET USE P: /DELETE
       NET USE P: \\10.0.0.26\public /PERSISTENT:YES
       NET TIME \\10.0.0.26 /SET /YES
       echo.

Agora vamos instalar um utilitário para fazer a conversão do formato Unix para DOS

aptitude install tofrodos -y

Agora vamos converter o arquivo de registro e o arquivo de logon

todos /home/netlogon/logon.bat
todos /srv/Programas/win7.reg

Vamos instalar o servidor de NTP para que os clientes possam sincronizar o horário com o servidor PDC

aptitude install ntp ntpdate -y

Agora vamos acertar o /etc/ntp.conf

vim /etc/ntp.conf
[...]
server 3.debian.pool.ntp.org iburst
#Inserir a seguinte linha
server pdc.douglasqsantos.com.br iburst
[...]

Vamos criar um arquivo necessário para o NTP

touch /var/lib/ntp/ntp.drift

Agora vamos reiniciar o serviço e ver como que ele está.

/etc/init.d/ntp restart
Stopping NTP server: ntpd.
Starting NTP server: ntpd.

Vamos ver como ele esta trabalhando

ntpq -p 127.0.0.1
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*srv4.spbrasil.c 200.160.7.193    2 u   19   64    1   10.694   99.759   8.996
 srv7.spbrasil.c 200.160.7.193    2 u   18   64    1   10.434  101.498  19.271
 roma.coe.ufrj.b 146.164.48.5     2 u   17   64    1   26.731  107.312   1.786
 d.st1.ntp.br    .ONBR.           1 u   17   64    1   60.915  121.360   9.016
 pdc.douglas.wik .STEP.           16 u   -   64    0    0.000    0.000   0.000

Vamos sincronizar o nosso relógio com o ntp da usp

ntpdate -u ntp.usp.br
29 Feb 15:24:00 ntpdate[3116]: adjust time server 143.107.255.15 offset 0.126564 sec

Agora vamos acertar o arquivo /etc/security/limits.conf para não ficar mostrando erro no samba

vim /etc/security/limits.conf
#colocar no final do arquivo
root hard nofile 131072
root soft nofile 65536
mioutente hard nofile 32768
mioutente soft nofile 16384

Agora vamos reiniciar o samba

/etc/init.d/samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.

Agora vamos armazenar o admin do LDAP no samba

smbpasswd -W
Setting stored password for "cn=admin,dc=douglasqsantos,dc=com,dc=br" in secrets.tdb
New SMB password: #senha admin do LDAP
Retype new SMB password: #senha admin do LDAP

Agora vamos desempacotar o arquivo que vamos fazer a configuração final do samba + LDAP

gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz 

Agora vamos executar o arquivo que vai conter a base para popular o LDAP com os dados do Samba

perl /usr/share/doc/smbldap-tools/configure.pl 
$# is no longer supported at /usr/share/doc/smbldap-tools/configure.pl line 314.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
       smbldap-tools script configuration
       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Before starting, check
 . if your samba controller is up and running.
 . if the domain SID is defined (you can get it with the 'net getlocalsid')

 . you can leave the configuration using the Crtl-c key combination
 . empty value can be set with the "." character
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Looking for configuration files...

Samba Configuration File Path [/etc/samba/smb.conf] > 

The default directory in which the smbldap configuration files are stored is shown.
If you need to change this, enter the full directory path, then press enter to continue.
Smbldap-tools Configuration Directory Path [/etc/smbldap-tools/] > 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Let's start configuring the smbldap-tools scripts ...

. workgroup name: name of the domain Samba act as a PDC
  workgroup name [DOUGLASQSANTOS] > #ENTER
. netbios name: netbios name of the samba controler
  netbios name [DOUGLASQSANTOS] > #ENTER
. logon drive: local path to which the home directory will be connected (for NT Workstations). Ex: 'H:'
  logon drive [H:] > #ENTER
. logon home: home directory location (for Win95/98 or NT Workstation).
  (use %U as username) Ex:'\\DOUGLASQSANTOS\%U'
  logon home (press the "." character if you don't want homeDirectory) [\\%L\%U] > . #aqui vai um .
. logon path: directory where roaming profiles are stored. Ex:'\\DOUGLASQSANTOS\profiles\%U'
  logon path (press the "." character if you don't want roaming profile) [\\DOUGLASQSANTOS\profiles\%U] > . #aqui vai um .
. home directory prefix (use %U as username) [/home/%U] > #ENTER
. default users' homeDirectory mode [700] > #ENTER
. default user netlogon script (use %U as username) [logon.bat] > #ENTER
  default password validation time (time in days) [45] > #ENTER
. ldap suffix [dc=douglasqsantos,dc=com,dc=br] > #ENTER
. ldap group suffix [ou=Grupos] > #ENTER
. ldap user suffix [ou=Usuarios] > #ENTER
. ldap machine suffix [ou=Maquinas] > #ENTER
. Idmap suffix [ou=Idmap] > #ENTER
. sambaUnixIdPooldn: object where you want to store the next uidNumber
  and gidNumber available for new users and groups
  sambaUnixIdPooldn object (relative to ${suffix}) [sambaDomainName=DOUGLASQSANTOS] > #ENTER
. ldap master server: IP adress or DNS name of the master (writable) ldap server
  ldap master server [127.0.0.1] > #ENTER
. ldap master port [389] > #ENTER
. ldap master bind dn [cn=admin,dc=douglasqsantos,dc=com,dc=br] > #ENTER
. ldap master bind password [] > #senha do admin do LDAP
. ldap slave server: IP adress or DNS name of the slave ldap server: can also be the master one
  ldap slave server [127.0.0.1] > #ENTER
. ldap slave port [389] > #ENTER
. ldap slave bind dn [cn=admin,dc=douglasqsantos,dc=com,dc=br] > #ENTER
. ldap slave bind password [] > #senha do admin do LDAP
. ldap tls support (1/0) [0] > #ENTER
. SID for domain DOUGLASQSANTOS: SID of the domain (can be obtained with 'net getlocalsid DOUGLASQSANTOS')
  SID for domain DOUGLASQSANTOS [S-1-5-21-134422187-1209443084-3402600680] > #ENTER
. unix password encryption: encryption used for unix passwords
  unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA) [SSHA] > MD5 #MD5
. default user gidNumber [513] > #ENTER
. default computer gidNumber [515] > #ENTER
. default login shell [/bin/bash] > #ENTER
. default skeleton directory [/etc/skel] > #ENTER 
. default domain name to append to mail adress [] > #ENTER
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Use of uninitialized value $# in concatenation (.) or string at /usr/share/doc/smbldap-tools/configure.pl line 314, <STDIN> line 33.
backup old configuration files:
  /etc/smbldap-tools/smbldap.conf->/etc/smbldap-tools/smbldap.conf.old
  /etc/smbldap-tools/smbldap_bind.conf->/etc/smbldap-tools/smbldap_bind.conf.old
writing new configuration file:
  /etc/smbldap-tools/smbldap.conf done.
  /etc/smbldap-tools/smbldap_bind.conf done.

Agora vamos popular o nosso LDAP com os dados do Samba

smbldap-populate 
Populating LDAP directory for domain DOUGLASQSANTOS (S-1-5-21-134422187-1209443084-3402600680)
(using builtin directory structure)

entry dc=douglasqsantos,dc=com,dc=br already exist. 
entry ou=Usuarios,dc=douglasqsantos,dc=com,dc=br already exist. 
entry ou=Grupos,dc=douglasqsantos,dc=com,dc=br already exist. 
entry ou=Maquinas,dc=douglasqsantos,dc=com,dc=br already exist. 
adding new entry: ou=Idmap,dc=douglasqsantos,dc=com,dc=br
adding new entry: uid=root,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br
adding new entry: uid=nobody,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Domain Admins,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Domain Users,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Domain Guests,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Domain Computers,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Administrators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Account Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Print Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Backup Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
adding new entry: cn=Replicators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
entry sambaDomainName=DOUGLASQSANTOS,dc=douglasqsantos,dc=com,dc=br already exist. Updating it...

Please provide a password for the domain root: 
Changing UNIX and samba passwords for root
New password: #senha para o root do LDAP
Retype new password: #senha para o root do LDAP

Agora vamos criar o domain admin para o samba e LDAP, vamos criar o grupo e depois o usuário

smbldap-groupadd -a domainadm
smbldap-useradd -am -g domainadm domainadm

Agora vamos setar a senha para o nosso domainadm

smbldap-passwd domainadm
Changing UNIX and samba passwords for domainadm
New password: #senha
Retype new password: #senha 

Vamos ver se o ldap já esta reconhecendo o nosso domainadm

su - domainadm
domainadm@pdc:~$ pwd
/home/domainadm

Agora vamos adicionar o root ao grupos de administradores do domínio

smbldap-usermod --group "Domain Admins","Domain Users" root

Agora vamos setar uma senha para ele

smbldap-passwd root
Changing UNIX and samba passwords for root
New password: 
Retype new password: 

Como pode ser notado tudo ok

Agora vamos reiniciar o serviço do samba e do LDAP

/etc/init.d/slapd restart && /etc/init.d/samba restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.

Agora vamos criar um novo usuário para testar o samba

  1. Crie um novo usuário em http://10.0.0.26/lam
  2. Crie um usuário como no exemplo anterior porém antes de gravar
  3. Na guia UNIX informe o grupo primário como ti-admin
  4. Agora vamos acessar a guia samba 3 e selecione adicionar uma extensão samba3.
  5. Aqui vamos informar o nome para identificação pois o nome para login foi definido na guia Unix
  6. Agora informe em caminho padrão do usuário \\10.0.0.26\nome_usuario
  7. Em caminho do perfil informe \\10.0.0.26\profiles\nome_usuario
  8. Agora em script de login informe logon.bat
  9. Por último escolha usuário especial Admins do Domínio
  10. Não esqueça de definir a senha para o usuário.

Agora vamos listar os compartilhamentos com o novo usuário

smbclient -L  //127.0.0.1 -U DOUGLASQSANTOS/maria.madalena
Enter DOUGLASQSANTOS/maria.madalena's password: 
Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6]

  Sharename       Type      Comment
  ---------       ----      -------
  IPC$            IPC       IPC Service (Samba Server 3.5.6)
  TI              Disk      Programas TI
  public          Disk      
  print$          Disk      
  maria.madalena  Disk      Diretorio home
Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6]

  Server               Comment
  ---------            -------
  DOUGLASQSANTOS              Samba Server 3.5.6

  Workgroup            Master
  ---------         

Aqui em -U é o nome do usuário utilizei dominio/nome_usuario

Agora vamos logar no compartilhamento publico para testar

smbclient  //127.0.0.1/public -U DOUGLASQSANTOS/maria.madalena
Enter DOUGLASQSANTOS/maria.madalena's password: 
Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6]
smb: \> mkdir novo
smb: \> ls
  .                                   D        0  Wed Feb 29 15:54:01 2012
  ..                                  D        0  Thu Feb 23 16:15:46 2012
  .X11-unix                          DH        0  Wed Feb 29 14:08:59 2012
  lost+found                          D        0  Thu Feb 23 15:57:21 2012
  .ICE-unix                          DH        0  Wed Feb 29 14:08:59 2012
  novo                                D        0  Wed Feb 29 15:54:01 2012

    47100 blocks of size 8192. 43382 blocks available
smb: \> quit

Pronto conseguimos criar o nosso diretório novo sem problemas.

Agora vamos testar o compartilhamento que somente o grupo ti-admin deve ter acesso

smbclient //127.0.0.1/TI -U DOUGLASQSANTOS/maria.madalena
Enter maria.madalena's password: 
Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6]
smb: \> ls
  .                                   D        0  Wed Feb 29 15:38:54 2012
  ..                                  D        0  Wed Feb 29 15:10:39 2012
  win7.reg                                   353  Wed Feb 29 15:38:54 2012

    41276 blocks of size 8192. 20439 blocks available
smb: \> mkdir Maria
smb: \> ls
  .                                   D        0  Wed Feb 29 16:02:37 2012
  ..                                  D        0  Wed Feb 29 15:10:39 2012
  win7.reg                                   353  Wed Feb 29 15:38:54 2012
  Maria                               D        0  Wed Feb 29 16:02:37 2012

    41276 blocks of size 8192. 20439 blocks available
smb: \> quit

Como pode ser notado o usuário maria.madalena que coloquei no grupo ti-admin consegui acessar sem problemas e criou um diretório chamado Maria sem problemas.

Reinicie o servidor para ele recarregar todas as configurações.

Vamos colocar uma maquina Windows XP no domínio samba para testar

  1. Logue como administrador
  2. Agora em Menu Iniciar/Executar digite: sysdm.cpl
  3. Agora na guia Nome do computador/Alterar
  4. Aqui informe um nome para o seu computador vou informar douglas-xp
  5. Agora em domínio informe o nosso dominio: DOUGLASQSANTOS
  6. informe o usuário e a senha do root que foi definido no comando smbldap-populate ou utilize o usuário domainadm
  7. Agora se obteve sucesso é so reiniciar
  8. Agora logue com o usuário que foi criado com a extensão samba3.

Foi configurado o Bind para responder o serviço do LDAP na porta 389 então não é para ser necessário usar NetVios sobre TCP/IP mais caso seja necessário temos que fazer como abaixo para ajustar.

  1. Caso o cliente não ache o servidor podemos resolver da seguinte forma
  2. Vamos acertar a configuração de TCP/IP
  3. Em Menu Iniciar/Executar digite: ncpa.cpl
  4. Selecione a interface de rede com o botão direito, agora em propriedades
  5. Agora selecione Protocolo TCP/IP , Agora selecione Propriedades
  6. Agora selecione Avançado, Agora selecione a guia WINS
  7. Agora selecione Ativar NetBIOS sobre TCP/IP, Agora selecione OK
  8. Ok novamente, Agora fechar.
  9. Agora como administrador
  10. Agora em Menu Iniciar/Executar digite: sysdm.cpl
  11. Agora na guia Nome do computador/Alterar
  12. Aqui informe um nome para o seu computador vou informar douglas-xp
  13. Agora em domínio informe o nosso dominio: DOUGLASQSANTOS
  14. informe o usuário e a senha do root que foi definido no comando smbldap-populate ou utilize o usuário domainadm
  15. Agora se obteve sucesso é so reiniciar.
  16. Agora logue com o usuário que foi criado com a extensão samba3.

Agora vamos listar a nossa maquina que foi colocada no domínio

ldapsearch -xLLL
[...]
dn: uid=douglas-xp$,ou=Maquinas,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: account
objectClass: posixAccount
cn: douglas-xp$
uid: douglas-xp$
uidNumber: 1001
gidNumber: 515
homeDirectory: /dev/null
loginShell: /bin/false
description: Computer
gecos: Computer

As configurações do ambiente Windows do usuário vão ficar salvas em /home/profiles/nome_usuario

O usuário vai ter o mapeamento do diretório home dele no servidor para o usuário vai ser a unidade U: e ela está localizada no servidor em /home/diretorios/nome_usuario.

Referências

  1. man 5 dhcpd.leases
  2. man 8 dhcpd
  3. man 5 dhcpd.conf