HowTo Instalación Openldap Postgres ODBC

De Tutoriales de Informatica
Saltar a: navegación, buscar

Repositorios utilizados

deb http://archive.debian.org/debian/ lenny main contrib non-free

Paquetes necesarios para compilar OpenLdap, Postgres y UnixODBC

apt-get install build-essential libsoci-core-gcc libsoci-postgresql-gcc libsoci-core-gcc-dev libsoci-core-gcc-dbg libreadline5-dev zlib1g-dev libnecpp-dev cpp-3.4
cpp-4.1 cpp-4.2 cpp-4.3 libpq5 libpq-dev automake automake1.4 automake1.7 automake1.9 autotools-dev autoconf2.13 libtool

Instalación

Instalación de Postgres

cd /usr/local/src
wget http://wwwmaster.postgresql.org/redir/394/h/source/v9.0.0/postgresql-9.0.0.tar.gz
cd /tmp
tar xvzf /usr/local/src/postgresql-9.0.0.tar.gz
cd postgresql-9.0.0
./configure
make
make install

Creamos el usuario postgres sin clave de acceso. Esto significa que la unica manera de convertirse en este usuario es siendo root y utilizando el comando su - postgres.

useradd -m postgres

Creamos la carpeta donde vamos a almacenar las bases y le damos permisos al usuario postgres

mkdir -p /var/pgsql/data
chown postgres /var/pgsql/data

Nos cambiamos al usurio postgres e inicializamos nuestro cluster postgres

/usr/local/pgsql/bin/initdb -E utf8 -U postgres -D /var/pgsql/data

Una vez terminado esta, ya tenemos nuestro postgres listo para usar, lo inicializamos

 /usr/local/pgsql/bin/pg_ctl -D /var/pgsql/data -l /var/pgsql/data/postgresql.log start

Instalación de UnixODBC

cd /usr/local/src
wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.0.tar.gz
cd /tmp
tar xvzf /usr/local/src/unixODBC-2.3.0.tar.gz
cd unixODBC-2.3.0
./configure
make
make install

Instalación de PostgreSQL ODBC Driver

cd /usr/local/src
wget http://wwwmaster.postgresql.org/redir/394/h/odbc/versions/src/psqlodbc-09.00.0200.tar.gz
cd /tmp
tar xvzf /usr/local/src/psqlodbc-09.00.0200.tar.gz
cd psqlodbc-09.00.0200
./configure --with-unixodbc=/usr/local
make
make install

En el caso que tengamos el siguiente error: "configure: error: libpq library not found", le agregamos el siguiente parametro --with-libpq=/usr/local/pgsql/

Instalación de OpenLdap

Purgar libodbc, ya que con el mismo NO FUNCIONA NADA.

cd /usr/local/src
wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-stable/openldap-stable-20100719.tgz
cd /tmp
tar xvzf /usr/local/src/openldap-stable-20100719.tgz
cd openldap-stable-20100719
./configure --enable-sql --without-cyrus-sasl --disable-bdb --enable-crypt --disable-hdb --with-odbc=unixodbc
make depend
make
make install

Configuración

ODBC

odbc.ini

Agregar lo siguiente a odbc.ini que se encuentre en /usr/local/etc

;
;  odbc.ini
;
[ODBC Data Sources]
PgSQL=PostgreSQL

[PgSQL]
; WARNING: The old psql odbc driver psqlodbc.so is now renamed psqlodbcw.so
; in version 08.x. Note that the library can also be installed under an other
; path than /usr/local/lib/ following your installation.
Driver=/usr/local/lib/psqlodbcw.so
Description=Connection to LDAP/POSTGRESQL
Servername=localhost
Port=5432
Protocol=6.4
FetchBufferSize=99
Username=test
Password=test
Database=pg_ldap
ReadOnly=no
Debug=1
CommLog=1

[ODBC]
InstallDir=/usr/local/lib

odbcinst.ini

Normalmente, con la instalación de psqlodbc, se agrega este archivo en /usr/local/etc, de no ser asi, hay que crearlo y copiar lo siguiente:

;
;  odbcinst.ini
;
[PostgreSQL]
Description=ODBC for PostgreSQL
; WARNING: The old psql odbc driver psqlodbc.so is now renamed psqlodbcw.so
; in version 08.x. Note that the library can also be installed under an other
; path than /usr/local/lib/ following your installation.
Driver=/usr/local/lib/psqlodbcw.so

[ODBC]
Trace=1
Debug=1
Pooling=No

OpenLDAP

slapd.conf

Copiar el archivo openldap-2.X.XX/servers/slapd/back-sql/rdbms_depend/pgsql/slapd.conf al directorio /usr/local/etc/openldap/ y modificar dbname, dbuser y dbpasswd.

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema

# Define global ACLs to disable default read access.
# Define global ACLs to disable default read access.
access to *
        by self write
        by * read
access to * by dn="cn=root,dc=example,dc=com" write

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral       ldap://root.openldap.org

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

#######################################################################
# sql database definitions
#######################################################################

database        sql
suffix         "dc=example,dc=com"
rootdn         "cn=root,dc=example,dc=com"
rootpw          secret
dbname          PgSQL
dbuser          test
dbpasswd        test
insentry_query  "insert into ldap_entries (id,dn,oc_map_id,parent,keyval) values ((select max(id)+1 from ldap_entries),?,?,?,?)"
upper_func      "upper"
strcast_func    "text"
concat_pattern  "?||?"
has_ldapinfo_dn_ru      no

lastmod off

PostgreSQL

Para que todos los comando que se describen a continuación funcionen, hay que modificar el archivo /etc/profile y agregar los siguiente:

/usr/local/pgsql/bin

No tiene ninguna configuración especial, pero creamos una base de pruebas para testear todo.

Antes de empezar hay que logearse con el superuser para postgres.

Crear base y usuario test

Con el siguiente comando se crea la base de datos de prueba

createdb pg_ldap

Con este comando se crea el usuario test y luego debe ingresarse la contraseña, en este caso debe ser test

createuser --no-createdb --no-createrole --no-adduser --password test

Crear SQL backend for LDAP

Para que OpenLDAP trabaje con SQL backend hay que crear la estructura de la base de datos. Hay que ir al directorio openldap-2.X.XX/servers/slapd/back-sql/rdbms_depend/pgsql/ y correr el siguiente comando.

psql pg_ldap  < backsql_create.sql

Don't worry if you have SQL errors, the script is trying to drop table that doesn't exists


Crear el esquema de la base de datos test

Ahora creamos el esquema con las tablas que respresentan la estructura de nuestro LDAP de prueba.

psql -d pg_ldap < testdb_create.sql

Don't worry if you have SQL errors, the script is trying to drop table that doesn't exists

Crear metadata

En esta parte se genera todos los link entre el SQL backend y el almacenamiento en la base de datos test. Es información es usada para traducir los queries del LDAP a SQL. En esta parte se generan todos las funciones SQL necesarias para la comunicación entre SQL backend y LDAP.

psql -d pg_ldap < testdb_metadata.sql

Inserción de datos de prueba

psql -d pg_ldap < testdb_data.sql

Conceción de permisos en los objetos de base de datos

psql -d pg_ldap -c "GRANT ALL ON ldap_attr_mappings,ldap_entries,ldap_entry_objclasses,ldap_oc_mappings,referrals,certs TO test;"
psql -d pg_ldap -c "GRANT ALL ON ldap_attr_mappings_id_seq,ldap_entries_id_seq,ldap_oc_mappings_id_seq,referrals_id_seq TO test;"
psql -d pg_ldap -c "GRANT ALL ON authors_docs,documents,institutes,persons,phones TO test;"
psql -d pg_ldap -c "GRANT ALL ON documents_id_seq,institutes_id_seq,persons_id_seq,phones_id_seq TO test;"

Testeo de la Instalación

ODBC

Cada vez que se haga un cambio en ODBC.ini, tengo que ejecutar los siguiente:

odbcinst -i -s -l -f /etc/odbc.ini 

Para chequear que instalamos bien la ODBC y que la misma se esta conectado con la base de datos, ejecutamos lo siguiente:

isql -v PgSQL

Si todo esta bien, tenemos que obtener lo siguiente:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

Directorio LDAP

Busqueda en el LDAP

ldapsearch -x -h localhost -b "dc=example,dc=com" "(objectClass=*)"

Si aparece el siguiente mensage "ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)", quiere decir que no esta corriendo OpenLDAP o no esta escuchando en el puerto 389.

Crear nuevas entradas

Crear un archivo, por ejemplo file y copiar el siguiente codigo LDIFF

dn: cn=Test Entry,dc=example,dc=com
objectClass: inetOrgPerson
cn: Test Entry
sn: Entry
givenName: Test

Luego ejecutar el siguiente comando:

ldapadd -x -h localhost -D "cn=root,dc=example,dc=com" -w secret -f file

si todo esta bien, debe aparecer lo siguiente:

adding new entry "cn=Test Entry,dc=example,dc=com"

Agregar/modifical/eliminar atributos de entrada

Para modificar, eliminar o setear nuevos atributos, copie las nuevas en tradas en codigo LDIFF dentro de un archivo, en este caso file.

dn: cn=Test Entry,dc=example,dc=com
changetype: modify
add: telephoneNumber
telephoneNumber: 123-4567
telephoneNumber: 765-4321
 
dn: cn=Test Entry,dc=example,dc=com
changetype: modify
delete: telephoneNumber
telephoneNumber: 123-4567

dn: cn=Test Entry,dc=example,dc=com
changetype: modify
replace: telephoneNumber
telephoneNumber: 4321-765

corremos el siguiente comando:

ldapmodify -x -h localhost -D "cn=root,dc=example,dc=com" -w secret -f file

Si todo sale bien, tiene que aparecer lo siguiente:

modifying entry "cn=Test Entry,dc=example,dc=comchangetype: modifyadd: telephoneNumbertelephoneNumber: 123-4567telephoneNumber: 765-4321 dn: cn=Test 
Entry,dc=example,dc=comchangetype: modifydelete: telephoneNumbertelephoneNumber: 123-4567dn: cn=Test Entry,dc=example,dc=comchangetype: modifyreplace: 
telephoneNumbertelephoneNumber: 4321-765"
ldap_modify: Server is unwilling to perform (53)
	additional info: no global superior knowledge

Realizar una busqueda

Realizar una busqueda de todas las entradas:

ldapsearch -x -h localhost -b "dc=example,dc=com" "(objectClass=*)"

Realizar la busqueda de un Objectclass cuyo cn comience con M:

ldapsearch -x -h localhost -b "dc=example,dc=com" "(&(objectClass=inetOrgPerson) (cn=M*))"

Eliminar una entrada

Para eliminar una entrada hay obtener la entrada del dn y ejecutar el siguiente comando:

ldapdelete -x -h localhost -D "cn=root,dc=example,dc=com" -w secret "cn=Test Entry,dc=example,dc=com"

Solución de problemas

Si queremos hacer debuging de nuestro servidor ldap, tenemos que modificar el archivo /etc/rsyslog.conf y agregar los siguiente:

local4.*                                                  /var/log/ldap

Luego reiniciamos syslog, con el siguiente comando:

/etc/init.d/rsyslog restart