Instalação e configuração de Servidor Samba PDC + OpenLDAP + DHCP + DNS + Debian Squeeze
- Domínio que vamos utilizar: douglasqsantos.com.br
- Faixa de ip: 10.0.0.0/24
- 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/tZav3d8Agora 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
- Selecione nessa tela principal na parte superior o item Grupos
- Agora selecione novo grupo
- Informe Nome do grupo: ti-admin
- Numero GID: não informe nada que vai ser gerado automaticamente
- Agora informe uma descrição: Grupo de Admins
- Agora selecione salvar
- Agora selecione voltar a lista de grupos
- Como pode ser notado o nosso grupo esta ali.
- 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
- Selecione Usuários
- Agora novo usuário.
- Informe o que achar necessário aqui, quanto mais informações melhor.
- Selecione Unix
- Informe o nome de usuario dele ex: douglas.santos
- Nome comun: Douglas Quintiliano dos Santos
- Número uid: deixe vazio para ele gerar um automaticamente
- Selecione definir senha
- Digite uma senha e confirme ela.
- Selecione ok
- Selecione Sombra que é quem controla as senhas
- Selecione Adicionar uma extensão de Conta Shadow
- 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.)
- 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.)
- 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.)
- 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.)
- Agora selecione salvar
- Pronto temos o nosso usuario
- 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 -yInforme a respostas como abaixo
- dc=douglasqsantos,dc=com,dc=br
- 3
- cn=admin,dc=douglasqsantos,dc=com,dc=br
- senhaadmin
- ok
- yes
- no
- cn=admin,dc=douglasqsantos,dc=com,dc=br
- 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 openAgora 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 -yInforme a respostas como abaixo
- dc=douglasqsantos,dc=com,dc=br
- 3
- cn=admin,dc=douglasqsantos,dc=com,dc=br
- senhaadmin
- ok
- yes
- no
- cn=admin,dc=douglasqsantos,dc=com,dc=br
- 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 openAgora vamos reiniciar o cliente e testar
telinit 6Agora 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=077Vamos 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.soAgora 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_outputAgora 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.bkpAgora 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
- Crie um novo usuário em http://10.0.0.26/lam
- Crie um usuário como no exemplo anterior porém antes de gravar
- Na guia UNIX informe o grupo primário como ti-admin
- Agora vamos acessar a guia samba 3 e selecione adicionar uma extensão samba3.
- Aqui vamos informar o nome para identificação pois o nome para login foi definido na guia Unix
- Agora informe em caminho padrão do usuário \\10.0.0.26\nome_usuario
- Em caminho do perfil informe \\10.0.0.26\profiles\nome_usuario
- Agora em script de login informe logon.bat
- Por último escolha usuário especial Admins do Domínio
- 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
- Logue como administrador
- Agora em Menu Iniciar/Executar digite: sysdm.cpl
- Agora na guia Nome do computador/Alterar
- Aqui informe um nome para o seu computador vou informar douglas-xp
- Agora em domínio informe o nosso dominio: DOUGLASQSANTOS
- informe o usuário e a senha do root que foi definido no comando smbldap-populate ou utilize o usuário domainadm
- Agora se obteve sucesso é so reiniciar
- 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.
- Caso o cliente não ache o servidor podemos resolver da seguinte forma
- Vamos acertar a configuração de TCP/IP
- Em Menu Iniciar/Executar digite: ncpa.cpl
- Selecione a interface de rede com o botão direito, agora em propriedades
- Agora selecione Protocolo TCP/IP , Agora selecione Propriedades
- Agora selecione Avançado, Agora selecione a guia WINS
- Agora selecione Ativar NetBIOS sobre TCP/IP, Agora selecione OK
- Ok novamente, Agora fechar.
- Agora como administrador
- Agora em Menu Iniciar/Executar digite: sysdm.cpl
- Agora na guia Nome do computador/Alterar
- Aqui informe um nome para o seu computador vou informar douglas-xp
- Agora em domínio informe o nosso dominio: DOUGLASQSANTOS
- informe o usuário e a senha do root que foi definido no comando smbldap-populate ou utilize o usuário domainadm
- Agora se obteve sucesso é so reiniciar.
- 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
- man 5 dhcpd.leases
- man 8 dhcpd
- man 5 dhcpd.conf