Ver Resposta Única
Antigo 23-12-2005, 08:30   #9 (permalink)
jotacekm
 
Avatar de jotacekm
 
Registrado em: Nov 2005
Posts: 134
Agradeceu: 0
Agradecido 0 vez(es) em 0 Posts
Reputação: 0
jotacekm
Padrão duvida sobre openldap

bom vo falar como eu fiz então

Eu uso fedora core 4, squid 2.5 e openldap 2.3.11. É bom que vc tenha uma noção de como funciona o ldap, aconselho vc a dar uma lida na introdução do www.openldap.org
Tenho o openldap instalado em /usr/local/openldap, e squid em /usr/local/squid.

EDIT: Não sei porque mas dentro dos códigos os comentários # saíram nos lugares errados, entao cuidado se forem copiar e colar

depois de estar com squid, openldap e suas dependências instalados, vamos configurar o slapd.conf. Vou colar aqui o meu slapd.conf:
Código:
include         /usr/local/openldap/etc/openldap/schema/core.schema
include         /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
#Esses sao os schemas que serão usados. Nos schemas estão as ojbectClass e #atributos que vamos usar para construir o banco. Ao contrário do que eu pensava, não #é preciso um schema específico pro squid, pois o .ldif para o squid é bem simples

pidfile         /usr/local/openldap/var/run/slapd.pid
argsfile        /usr/local/openldap/var/run/slapd.args

access to * by self write
access to * by anonymous auth
access to * by * read

#######################################################################
# BDB database definitions
#######################################################################

database        bdb
suffix          "dc=squid"
rootdn          "cn=Manager,dc=squid"
rootpw          secret
directory       /usr/local/openldap/var/openldap-data
readonly off
# Essas são as definições da nossa backend, que vai ser a Berkeley Database. O suffix #é o DN (distinguished name, uma entrada única) onde serão passas as queries que #vao ser passadas ao bdb. rootdn é o "administrador" do banco.

index cn,sn,uid,o  pres,eq,sub
index userPassword pres,eq
index objectClass eq
# Esses serão os índices a ser mantidos. cn, sn, uid, o, userPassword são os índices #que iremos usar quando formos criar o banco, e  # pres, eq, sub são tipos de índice. #Não é obrigatório criar um índice para as entradas, mas isso vai deixar a busca no #banco mais rápida.
Agora é interessante testar o seu slapd.conf pra ver se ele não está com nenhum erro, vá no diretório sbin do openldap e digite ./slaptest

Vamos agora criar o nosso banco. Pra isso, vamos criar um arquivo .ldif (LDAP Data Interchange Format). Esse é o meu ldif, criei em no /sbin dentro do openldap:

Código:
# Squid. Esse vai ser o nodo principal da nossa árvore.
dn: dc=squid
objectClass: dcObject
objectClass: organization
dc: squid
o: squid
description: Auth Squid

# Manager. Esse é o administrador. Usei o mesmo que vinha no exemplo no openldap.org
dn: cn=Manager,dc=squid
objectClass: organizationalRole
cn: Manager
description: Directory Manager


# Usuários Squid. Aqui estão os nossos usuários do squid. uid é o campo que o squid vai ler como login, e userPassword como a  senha.
dn: uid=maria,dc=squid
objectClass: person
objectClass: inetOrgperson
uid: maria
sn: maria
cn: maria
userPassword: senha

dn: uid=joao,dc=squid
objectClass: person
objectClass: inetOrgperson
uid: joao
sn: joao
cn: joao
userPassword: senha
cada nodo deve ter uma única entrada, diferente de toda as outras(dn). uid,sn,cn,userPassword, o, description são os atributos que usei. Se o seu dn for: uid=joao,dn=squid o atributo uid deve ser obrigatoriamente joao. Isso vale para todas as entradas que você criar. Se você quiser fazer a autenticação de mais serviços usando o openldap como samba, qmail etc. seria interessante você criar um nodo principal que abrigue todos os serviços. Por exemplo:
Nodo principal:
dn: dc=minhaEmpresa

Serviços:
dn: dc=squid,dc=minhaEmpresa
dn: dc=qmail,dc=minhaEmpresa
dn: dc=samba,dc=minhaEmpresa

Usuarios:
dn: uid=joao,dc=squid,dc=minhaEmpresa
dn: uid=carlos,dc=samba,dc=minhaEmpresa
....
....

Voltando: Depois de criar nosso ldif, vamos alimentar o banco. Isso pode ser feito offline (sem o daemon slapd rodando) ou online (com o daemon rodando). Pra criar o banco offine eu uso o comando: (se o .ldif estiver no mesmo diretorio onde está sendo rodado o comando)
./slapadd -l squid.ldif -f /usr/local/openldap/etc/openldap/slapd.conf
pra criar online:
./ldapadd -x -w secret -f squid.ldif -D "cn=Manager,dc=squid"
o -x é pra usar autenticação simples, e o -w secret é o password que esta no rootpw dentro do slapd.conf

se você quiser ver como está o seu banco, ou fazer um backup dele pra um arquivo .ldif, use o comando ./slapcat -f arquivo_de_saida.ldif

Eu prefiro criar a database offline, pois online de vez em quando dá uns erros chatinhos. Se você estiver tendo problemas na hora de criar, ou na hora de rodar o daemon, use no final do comando -d 1 por exemplo, pra ativar o debug level 1. Existem vários níveis de debug, veja no openldap.org os niveis.

Agora vamos fazer um teste: Inice o daemon com ./slapd -d 1 pra ativar o debug, e veja se está tudo ok. Vamos agora alterar o squid.conf pra fazer a autenticação com ldap.

O programa que vamos usar pra autenticação do squid é o squid_ldap_auth. Ele deveria estar dentro do diretorio libexec do seu squid. Se não estiver, basta ir no arquivo fonte de instalação do squid em /helpers/basic_auth/LDAP e dar um make && make install

Dentro do squid.conf:


Código:
auth_param basic children 5
auth_param basic realm Digite nome e senha
auth_param basic credentialsttl 1 hour
auth_param basic casesensitive off
auth_param basic program /usr/local/squid/libexec/squid_ldap_auth -b dc=squid -D dc=squid -h localhost -v 3  -p 389
#Se vc tiver rodando o openldap em uma maquina remota, vc deve botar -h #ip_da_maquina. o -v 3 é para usar o ldap v3, eu tive que usar isso pq tava dando um #erro referente a isso. 

#Agora vamos criar uma acl dentro do squid.conf que peça a autorização:
acl auto proxy_auth REQUIRED
#e no http_access botamos:
http_access allow auto
pronto! agora é so inicar o squid e o slapd, abrir o browser que vai pedir a autenticação. Se vc quiser adicionar mais usuários, basta criar um ldif apenas com a entrada desse usuário e usar o ./slapadd pra adicionar. O que eu não estou conseguindo fazer agora sao algumas operações que necessitam que o slapd esteja rodando pra funcionar, como deletar entradas e fazer buscas, pq sempre dá um erro de invalid_credentials e eu não estou conseguindo resolver. Se alguém conseguier posta aqui. Flw!
jotacekm está offline