Archivo de la categoría: LDAP

Se muda el blog

seguimos siendo napster2011 pero con otra url y haciendo enfasis en temas de seguridad informatca https://seginfo2013.wordpress.com/

Administración de OpenLDAP

Introducción

Una vez instalado y configurado el servidor LDAP, la siguiente tarea es la del diseño de la estructura y la introducción de datos en el directorio.

Puesto que la finalidad de nuestro servidor LDAP es que sirva de almacen de usuarios y grupos para autentificar sistemas linux y servicios como ftp y web, deberemos crear una estructura que parta de la base de nuestro directorio, para almacenar dicha información. Tal y como se explica más abajo, crearemos una unidad organizativa (ou) llamadagroups, para almacenar los grupos de usuarios y crearemos otra unidad organizativa llamada users para almacenar a los usuarios.

Explorador de directorios LDAP

Para acceder al directorio LDAP y poder crear y modificar elementos en dicho directorio, es necesario disponer de un explorador de directorios LDAP (LDAP browser). Existen muchos exploradores LDAP tanto de pago como libres. Entre las aplicaciones libres destacamos gq, phpldapadmin (aplicación web) y JXplorer.

Para instalar gq, podemos utilizar apt-get. Una vez instalada, para ejecutar gq tan solo debemos pulsar alt+f2 y escribir gq.

Para instalar phpldapadmin podemos:

  • Simplemente ejecutar: apt-get install phpldapadmin
  • Si se produce el error :
    Memory Limit low.
    Your php memory limit is low – currently 16M

Deberemos aumentar la memoria, por ejemplo a 64M, en el fichero /etc/php5/apache2/php.ini
//editamos el fichero /etc/php5/apache2/php.ini memory_limit = 64M ; Maximum amount of memory a script may consume (16MB)

y reiniciamos el servidor apache:

/etc/init.d/apache restart

Si estamos en el servidor, simplemente teclearemos en la barra de direcciones de nuestro explorador web:

http://localhost/phpldapadmin/

  • Otra posibilidad y al igual que otras aplicaciones web, podremos descargarla desde http://phpldapadmin.sourceforge.net/ y descomprimirla dentro del DocumentRoot de apache, es decir, dentro de la carpeta /var/www, por ejemplo en /var/www/phpldapadmin. Para ejecutarla, si la hemos descomprimido en la carpeta anterior, debemos ir a http://ip_del_servidor_web/phpldapadmin/ con el navegador y veremos la página principal de la aplicación (deberemos asegurarnos de que existe el fichero config.php, ya que por defecto sólo trae un config.php.example, ya que sino con cada actualización, en caso de existir ya nos machacaría la configuración previa.

 

JXplorer – Explorador LDAP en java.

Por su calidad superior, en este curso utilizaremos JXplorer para administrar el directorio LDAP.

Instalación de JXplorer

Previo a instalar jxplorer, es necesario instalar la máquina virtual java de Sun.
Aunque en estos momentos está disponible la versión 1.6 de la máquina virtual de java, por problemas con la versión 3.2 de jxplorer he instalado la 1.5:

# apt-get install sun-java5-bin sun-java5-jre

Lo cierto es que la versión 3.2, de momento me ha dado muchos problemas en su instalación, por ello finalmente he decidido bajarme la versión 3.1 ( http://sourceforge.net/project/downloading.php?groupname=jxplorer&filename=JXv3.1deploy.tar.bz2&use_mirror=ovh) y ejecutarla tecleando:

# sh ./jxplorer.sh

Pasos para la instalación de jxplorer3.2 – DE MOMENTO CON SERIOS PROBLEMAS DE INSTALACIÓN
Para ello debemos ir a http://www.java.com/es/ y descargar la última versión del JRE (Java Runtime Enviroment). Puesto que no existe una versión específica para sistemas debian, debemos descargar la versión Linux (genérica), ejecutar el archivo ‘bin’ para que se descomprima el paquete y mover el directorio que se ha creado (ejemplo, jre1.6.0_10), a la carpeta /usr/lib. Posteriormente tendremos que editar el archivo /root/.bashrc y añadir las variables que permitan al shell encontrar el JRE: // Añadir en /root/.bashrc (sustituir jre1.6.0_10 por la versión descargada)CLASSPATH=/usr/lib/jre1.6.0_10/bin/ JAVA_HOME=/usr/lib/jre1.6.0_10/bin/ PATH=/usr/lib/jre1.6.0_10/bin/:/usr/lib/jre1.6.0_10/bin/java/:/sbin:/bin :/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin cargamos las variables del entorno: # source /root/.bashrc Después, debemos abrir un terminal y ya estamos en condiciones de instalar JXplorer. JXplorer no está disponible en los repositorios de paquetes de debian, por ello debemos ir ahttp://pegacat.com/jxplorer/downloads/users.html y descargarnos la versión para linux. En el momento de escribir estas líneas, la última versión es la 3.2 y por tanto el archivo descargado se llama JXv3.2_install_linux.bin. Para instalar la aplicación debemos dar permisos de ejecución al archivo y ejecutar:

 

// Instalar JXplorer

# sh ./JXv3.1_install_linux.bin

Se iniciará un sencillo asistente de instalación que al finalizar habrá creado un enlace en nuestra carpeta home, por lo tanto para ejecutarlo debemos escribir:

 

// Ejecutar JXplorer

# ./JXplorer_LDAP_Browser

Veremos la pantalla principal de JXplorer:

 

Conexión con el servidor LDAP

La conexión con el servidor LDAP podemos hacerla como usuario anónimo o como usuario administrador. Si conectamos de forma anónima solo podremos visualizar los elementos pero no podremos hacer cambios. Si conectamos como administrador, podremos crear, modificar y eliminar elementos de cualquier tipo.

Para conectar al servidor LDAP como administrador necesitamos la siguiente información:

  • Dirección IP del servidor LDAP
  • Protocolo del servidor (LDAP v3 en nuestro caso)
  • Base del directorio (dc=iesacarballeira,dc=com en nuestro caso)
  • Nombre de usuario administrador (cn=admin,dc=iesacarballeira,dc=com en nuestro caso)
  • Contraseña (root en nuestro caso)

La base del directorio se suele denominar en inglés ‘base DN’ o ‘Nombre Distinguido de la base del directorio’. Se corresponde con el parámetro ‘suffix’ del archivo de configuración del servidor LDAP /etc/ldap/slapd.conf.

El nombre del usuario con el que nos conectamos se suele denominar en inglés ‘user DN’ o también ‘bind DN’

El nombre de usuario administrador por defecto suele ser admin y a menudo hay que proporcionar nombre y base del directorio: cn=admin,dc=ieacarballeira,dc=com

Al hacer clic en el botón ‘conectar’ (marcado con círculo rojo en la figura) nos aparecerá el diálogo de conexión para que introduzcamos los datos de la conexión. Para no tener que introducir dicha información cada vez que conectemos, podemos grabar los datos pulsando ‘Save’.

 

Si pulsamos OK, JXplorer conectará con el servidor LDAP y mostrará el directorio:

 

Vemos que en nuestro directorio solamente hay dos elementos: una organización llamada ‘iesacarballeira’ y el usuario administrador llamado ‘admin’.

Organización del directorio LDAP

Creación de las unidades organizativas

Puesto que nuestro directorio va a almacenar usuarios y grupos, vamos a crear sendas unidades organizativas (en inglés organizational unit – ou) llamadas ‘users’ y ‘groups’ que nos servirán para organizar los usuarios y los grupos por separado.

Dentro de la unidad organizativa ‘users’ crearemos todos los usuarios del sistema. Dentro de la unidad organizativa ‘groups’ crearemos todos los grupos del sistema.

Para crear una unidad organizativa dentro de nuestra organización, haremos clic con el derecho sobre la organización ‘iesacarballeira’ y en el menú contextual elegiremos ‘New’:

 

Nos aparecerá la ventana ‘Set Entry Object Classes’ que podríamos traducir por ‘Seleccione las clases objeto de la nueva entrada’ o mejor, ‘Seleccione las tipologías’. En ella podremos elegir los ‘tipos’ que tendrá nuestro nuevo elemento. Como se trata de una unidad organizativa (en inglés organizational unit – ou) debemos seleccionar el tipo organizationalUnit en la lista de la izquierda y pulsar el botón añadir (Add). Los otros dos tipos que aparecen por defecto (organizationalRole y simpleSecurityObjet) no los necesitaremos, por lo tanto podemos seleccionarlos de la lista de la derecha y pulsar el botón quitar (remove). En la casilla ‘Enter RDN’ (introducir Nombre Distinguido Relativo) debemos poner el nombre de nuestro elemento. Escribiremos ou=users. Estaremos en la situación de la siguiente figura:

 

Tan solo debemos pulsar el botón OK y el botón “Submit” en la pantalla que nos aparece, ya se habrá creado nuestra unidad organizativa ‘users’. Repetiremos los pasos para crear otra unidad organizativa llamada ‘groups’.

 

Usuarios y grupos

Ahora solamente nos queda crear los usuarios, crear los grupos y asignar los usuarios a sus grupos. Dentro de nuestra unidad organizativa ‘groups’ crearemos los siguientes grupos:

  • profesores (gid=1001)
  • alumnos (gid=1002)

Dentro de nuestra unidad organizativa ‘users’ crearemos los siguientes usuarios:

  • javier (uid=1001, profesor)
  • joaquin (uid=1002, profesor)
  • miguel (uid=1003, profesor)
  • jessica (uid=1004, alumno)
  • joel (uid=1005, alumno)

Creación de grupos

Para crear los grupos, haremos clic con el derecho en la unidad organizativa ‘groups’ e igual que antes haremos clic en ‘New’. Nuestro nuevo elemento será un nuevo grupo posix, por lo tanto debemos agregar el tipo ‘posixGroup’ de la lista de la izquierda. El nombre (RDN) será profesores, por tanto debemos escribir ‘cn=profesores’ (cn= Common Name – Nombre Común):

 

Al pulsar OK nos apacererá la siguente figura, en la cual observamos los atributos clásicos de un grupo posix. Debemos rellenar al menos el campo gidNumber. También podemos introducir miembros al grupo. En el parámetro memberUid añadimos javier. Luego, haciendo clic con el derecho en javier > Add another value, podemos añadir otro valor: joaquin. De igual manera añadiremos a miguel. No importa que todavía no hayamos creado a dichos usuarios:

 

Creación de usuarios

Para crear los usuarios, haremos clic con el derecho en la unidad organizativa ‘users’ e igual que antes haremos clic en ‘New’. Nuestro nuevo elemento será un nuevo usuario posix, por lo tanto debemos agregar el tipo ‘posixAccount’ de la lista de la izquierda. Pero nuestro usuario también será una persona, por eso nos interesará agregar el tipo ‘person’ para disponer de los atributos de dicho tipo (nombre, apellidos, …), además como será usuario de Internet nos interesará agregar también el tipo ‘inetOrgPerson’ para poder almacerar el e-mail y otros valores. Si su nombre es Francisco Javier, podemos escribir en la casilla RDN ‘cn=Francisco Javier’ (cn= Common Name – Nombre Común):

 

Al pulsar OK nos apacererá la siguente figura, en la cual observamos los atributos de las tres tipologías de nuestro elemento: persona, usuario de internet y cuenta posix. Debemos rellenar al menos los campos gidNumber (grupo primario que será el 1001), homeDirectory, uid (identificador), uidNumber, loginShell y sn (surname – apellidos). También añadiremos el e-mail aunque en la figura no se vea ya que está más abajo:

 

Lo mismo haremos con el resto hasta que tengamos creados los cinco usuarios.

Ya tendríamos creada la estructura, los grupos y los usuarios que necesitamos para nuestro sistema.

Napster2011

Actualizaciones Blog Napster2011

Buen día queridos lectores del blog Napster2011, este post lo publico para informarles a todos los que han seguido con mucho entusiasmo los post de “Programacion”, que proximamente estaré publicando un post o mejor dicho, varios post dedicados a desarrollar una aplicacion que permita autenticar, crear y administrar usuarios contra un servidor LDAP, y lo mejor es que solo utilizaremos como lenguaje de programación PHP, cabe recorar que las lecciones de configuración del servidor LDAP las expliqué hace rato en este mismo blog.

Publiqué artículos de como instalar y configurar LDAP en Debian y Centos, pero recomiendo Debian porque es mucho mas sencillo a la hora de configurar el servidor LDAP.

Bueno amigos, no siendo más, les deseo a todos buen resto de día, y como siempre, gracias por leer y seguir el blog.

Importante. Como se habrán dado cuenta, actualice el blog en cuanto a los widgets ubicados en el lado derecho de la pantalla, podrán encontrar un buscador interno, un calendario con las fechas en las que se han publicado articulos, una nube de categorias, y lo más importante un pequeño formulario en el que pueden colocar su correo electrónico con el fin de suscribirse al blog y recibir todas las actualizaciones del blog en su bandeja de entrada.

Pueden enviar todos sus comentarios, solicitando artículos sobre cualquiera las categorías del blog.

Napster2011

Instalación de LDAP en un computador corriendo Red Hat, Fedora, CentOS o cualquier distribución basada en el instalador de paquetes “yum”

Instalación de LDAP en un computador corriendo Red Hat, Fedora, CentOS o cualquier distribución basada en el instalador de paquetes “yum”.
En caso de utilizar distribuciones basadas en otro instalador deberemos instalar los mismos paquetes pero con el instalador correspondiente (aptitude para distros basadas en Debian)

1) instalamos LDAP (como super usuario)
[root@kike ~]# yum install openldap-servers openldap-clients nss_ldap
….

2) Copiamos DB_CONFIG.example al direcotrio de ldap
[root@kike ~]# cd /etc/openldap/
[root@kike ~]# cp DB_CONFIG.example /var/lib/ldap/DB_CONFIG

3) Creamos un password para el LDAP
[root@kike openldap]# slappasswd
New password:
Re-enter new password:
{SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U
Copiamos la salida de este comando (la password SSHA) para añadirla a sldap.conf:

/etc/openldap/slapd.conf

En principio lo único que modificamos ens lo que aparece en negrita:

database bdb
suffix “dc=ldap-kike,dc=com,dc=uy”
rootdn “cn=Manager,dc=ldap-kike,dc=com,dc=uy”

# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
# rootpw {crypt}ijFYNcSNctBYg
rootpw {SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U

Notas: en el tag “database” seleccionamos bdb que corresponde al formato de almacenamiento de datos por defecto de OpenLDAP (se puede elegir Mysql, Postgresql u otros formatos de bases de datoshttp://www.openldap.org/doc/admin24/backends.html pese a no ser recomendados en el sitio oficial del proyecto openldap.
En suffix se “arma” el dominio al que va a atender LDAP (en este caso ldap-kike.com.uy)
Rootdn corresponde el nombre con que se autentica el administrador de openLDAP (en este caso Manager pero puede ser modificado por el que se considere conveniente)
Rootpw es la password del usuario administrador (Manager en el ejemplo)

4) Estamos listos para arrancar el servidor:
[root@kike openldap]# service ldap start
Checking configuration files for slapd: config file testing succeeded [ OK ]
Starting slapd: [ OK ]

5) Toda la información a cargar se introduce en archivos con formato ldif.
http://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format

6) Creamos un archivo para inicializar la base de LDAP
En este caso lo llamé ldap-init.ldif y contiene:
[root@kike openldap]# cat ldap-init.ldif
dn: dc=ldap-kike,dc=com,dc=uy
objectclass: dcObject
objectclass: organization
o: Servidor LDAP ldap-kike
dc: ldap-kike
dn: cn=Manager,dc=ldap-kike,dc=com,dc=uy
objectclass: organizationalRole
cn: Manager

7) Inicializamos la base con el siguiente comando
[root@kike openldap]# /usr/bin/ldapadd -a -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f ldap-init.ldif
Enter LDAP Password: (ingresar la password del administrador)
adding new entry “dc=ldap-kike,dc=com,dc=uy”
adding new entry “cn=Manager,dc=ldap-kike,dc=com,dc=uy”

8) Visualizar el contenido de la base
[root@kike openldap]# ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy”
Devolverá algo similar a esto:

# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# ldap-kike.com.uy
dn: dc=ldap-kike,dc=com,dc=uy
objectClass: dcObject
objectClass: organization
o: Servidor LDAP ldap-kike
dc: ldap-kike
# Manager, ldap-kike.com.uy
dn: cn=Manager,dc=ldap-kike,dc=com,dc=uy
objectClass: organizationalRole
cn: Manager
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2

9) El comando authconfig-tui
Nos va a configurar el archivo /etc/nsswitch.conf, /etc/ldap.conf, pam y otros. Esto lo ejecutamos encosola nos abre un menú de texto donde lo configuramos para que soporte autentificaciones LDAP y completamos los datos que nos pide (por omisión están seleccionadas con * las opciones a elegir)

10) Crear un usuario en el directorio LDAP. 
También utilizamos un archivo con formato ldif
[root@kike openldap]# cat user.ldif
dn: uid=usuario1,dc=ldap-kike,dc=com,dc=uy
uid: usuario1
cn: usuario1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/usuario1
gecos: usuario1
En este caso el userPassword se generó de esta forma:
[root@kike openldap]# openssl passwd -1 -salt TEDFGNB345RTErea
Password:
$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/
El parámetro -1 es de MD5 y el -salt son caracteres aleatorios.

11) Lo agregamos al directorio ldap también con el comando ldapadd
[root@kike openldap]# ldapadd -a -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f user.ldif
Verificamos que el usuario está andando con el comando id
[root@kike openldap]# id usuario1
uid=10000(usuario1) gid=10000 groups=10000
12) Para agregar un grupo usamos tambien un archivo con formato ldif
(en este caso group.ldif)

[root@kike openldap]# cat group.ldif
dn: cn=users,dc=ldap-kike,dc=com,dc=uy
objectClass: posixGroup
gidNumber: 10000
cn: users
memberUid: usuario1
description: Grupo Users

13 ) Lo añadimos a LDAP también con ldapadd de la siguiente forma:
[root@kike openldap]# ldapadd -a -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f group.ldif
Para probar si se agregó con éxito:
[root@kike openldap]# id usuario1
uid=10000(usuario1) gid=10000(users) groups=10000(users)
Vemos que el usuario esta en el grupo “users”.

14) Ahora creamos home del user y copiamos los archivos de skel.
[root@kike openldap]# mkdir /home/usuario1
[root@kike openldap]# rsync -a /etc/skel/ /home/usuario1
[root@kike openldap]# chown -R usuario1.users /home/usuario1
[root@kike openldap]# chmod 700 /home/usuario1
[root@kike openldap]# ls -la /home/usuario1
total 20
drwx—— 2 users 4096 Jan 15 15:37 .
drwxr-xr-x 4 root root 4096 Jan 15 15:37 ..
-rw-r–r– 1 usuario1 users 33 Dec 29 2010 .bash_logout
-rw-r–r– 1 usuario1 users 176 Dec 29 2010 .bash_profile
-rw-r–r– 1 usuario1 users 124 Dec 29 2010 .bashrc

15) Loguear un usuario
Una vez finalizado vamos a probar si todo funciona bien. En el ejemplo el servidor openLDAP corre en un equipo con dirección IP 192.168.150.24 e intentamos una conexión a dicho equipo desde otro con el comando ssh (corroborar que el demonio sshd esté corriendo en el servidor donde instalamos openLDAP)
$ ssh -l usuario1 192.168.150.24
usuario1@192.168.150.24′s password:
Last login: Sat Jan 15 21:24:50 2010 from 192.168.150.207
[usuario1@kike ~]$ id
uid=10000(usuario1) gid=10000(users) grupos=10000(users)
[usuario1@kike ~]$ pwd
/home/usuario1
El usuario se encuentra logueado en el servidor autenticado por el servidor openLDAP.

16) En caso de necesitar agregar otro usuario editaremos CON CUIDADO el archivo user.ldif utilizado anteriormente.
[root@kike openldap]# cat user.ldif
dn: uid=usuario2,dc=ldap-kike,dc=com,dc=uy
uid: usuario2
cn: usuario2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$TEDFGNB3$ogOvJKTt/CviC47q/dBon1
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/usuario2
gecos: usuario2
Lo agregamos a la base de LDAP:
[root@kike openldap]# ldapadd -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f user.ldif
Enter LDAP Password:
adding new entry “uid=usuario2,dc=ldap-kike,dc=com,dc=uy”
Luego creamos el home y compiamos los files de skel, cambiamos permisos como lo hicimos con el otro usuario.

17)Para agregarlo al grupo users:
# cat group.ldif
dn: cn=users,dc=ldap-kike,dc=com,dc=uy
objectClass: posixGroup
gidNumber: 10000
cn: users
memberUid: usuario1
memberUid: usuario2
description: Grupo Users

18) Para actualizar la base de datos LDAP utilizamos el comando ldapmodify
[root@kike openldap]# ldapmodify -x -D ‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f group.ldif
Enter LDAP Password:
modifying entry “cn=users,dc=ldap-kike,dc=com,dc=uy”
Listo, comprobamos los datos con ldapsearch:
[root@kike openldap]# ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy”
……
……
Verificamos que todo esté funcionando correctamente:
[root@kike openldap]# id usuario2
uid=10001(usuario2) gid=10000(users) groups=10000(users)

19) Seguridad básica LDAP
Mediante ACLs agregaremos mínimos controles de seguridad como restringir el acceso a la base de datos de LDAP más que nada,que no puedan ver los passwords de los demás usuarios (al estilo shadow)

Agregamos al archivo sldap.conf
access to attrs=userPassword
by dn=”cn=Manager,dc=ldap-kike,dc=com,dc=uy” write
by self write
by anonymous auth
by * none
access to dn.base=”” by * read
access to *
by dn=”cn=Manager,dc=ldap-kike,dc=com,dc=uy” write
by * read
Reiniciamos el servicio ldap
[root@kike openldap]# service ldap restart
Ahora, si hacemos un:
ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy”
NO van a poder observar todos los password de los usuarios, sólo el de ustedes, si se autentifican al LDAP.
ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy” -D “uid=usuario2,dc=ldap-kike,dc=com,dc=uy” -W

# usuario1, ldap-kike.com.uy
dn: uid=usuario1,dc=ldap-kike,dc=com,dc=uy
uid: usuario1
cn: usuario1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/usuario1
gecos: usuario1
# usuario2, ldap-kike.com.uy
dn: uid=usuario2,dc=ldap-kike,dc=com,dc=uy
uid: usuario2
cn: usuario2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJFRFREZHTkIzJG9nT3ZKS1R0L0N2aUM0N3EvZEJvbjE=
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/usuario2
gecos: usuario2

 

Napster2011

SSH con ldap

Buen día en el siguiente artículo explico como conectar ssh con ldap para que utilice la autenticacion via openldap

Empezamos instalado los paquetes:

apt-get install ldap-utils libpam-ldap libnss-ldap nscd

Una vez instalado, modificamos los ficheros:

/etc/ldap/ldap.conf

Con las siguientes etiquetas cambiar segun convenga:

URI ldap://ldap.example.net
BASE dc=example

pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_crypt local

/etc/libnss-ldap.conf

host 10.10.10.10
base dc=example

ldap_version 3
binddn cn=nss,dc=example
bindpw SeeKriT

nss_base_passwd ou=People,dc=example
nss_base_group ou=Group,dc=example

/etc/nsswitch.conf

passwd:        ldap compat
group:         ldap compat
shadow:        ldap compat

Hacemos el test de NSS probando que se conecta y reconoco los user con el comando:

getent passwd user
/etc/pam_ldap.conf

host 10.10.10.10
base dc=example

ldap_version 3
binddn cn=nss,dc=example
bindpw SeeKriT
pam_password crypt

Cambiamos el pam.d/sshd y el login por esto:

auth       required     pam_env.so

auth       sufficient   pam_unix.so likeauth nullok

auth       sufficient   pam_ldap.so use_first_pass

auth       required     pam_deny.so

account    sufficient   pam_unix.so

account    sufficient   pam_ldap.so

account    required     pam_ldap.so

password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3

password   sufficient   pam_unix.so nullok md5 shadow use_authtok

password   sufficient   pam_ldap.so use_first_pass

password   required     pam_deny.so

session    required     pam_limits.so

session    required     pam_unix.so

session    optional     pam_ldap.so

Ya deberia estar reiniciamos ssh y listo

Napster2011

Instalando LDAP en Centos 5.4

Instalación de LDAP y configuración básica;

Primero instalamos LDAP con yum:

[root@nikita ~]# yum install openldap-servers openldap-clients nss_ldap
….

Copiamos DB_CONFIG.example al direcotrio de ldap

[root@nikita ~]# cd /etc/openldap/
[root@nikita ~]# cp DB_CONFIG.example /var/lib/ldap/DB_CONFIG

Creamos un password para el LDAP de la siguiente manera;

[root@nikita openldap]# slappasswd
New password:
Re-enter new password:
{SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U

Copiamos la salida de ese comando y editamos el archivo;

/etc/openldap/slapd.conf ==> Lo único que modificamos es:

database bdb
suffix “dc=segvfault,dc=com,dc=ar”
rootdn “cn=Manager,dc=segvfault,dc=com,dc=ar”

# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
# rootpw {crypt}ijFYNcSNctBYg

rootpw {SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U

 

 

Y ya podemos arranca el LDAP de la siguiente manera;

[root@nikita openldap]# service ldap start
Checking configuration files for slapd: config file testing succeeded [ OK ]
Starting slapd: [ OK ]

Creamos un archivo para inicializar la base de LDAP;

En mi caso lo llame ldap-init.ldif y contiene:

[root@nikita openldap]# cat ldap-init.ldif

dn: dc=segvfault,dc=com,dc=ar
objectclass: dcObject
objectclass: organization
o: Segvfault LDAP server
dc: segvfault

dn: cn=Manager,dc=segvfault,dc=com,dc=ar
objectclass: organizationalRole
cn: Manager

Inicializamos la base con el siguiente comando;

[root@nikita openldap]# /usr/bin/ldapadd -a -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f ldap-init.ldif
Enter LDAP Password:
adding new entry “dc=segvfault,dc=com,dc=ar”

adding new entry “cn=Manager,dc=segvfault,dc=com,dc=ar”

Ahora podemos ver el contenido de la base con el siguiente comando;

[root@nikita openldap]# ldapsearch -h 127.0.0.1 -x -b “dc=segvfault,dc=com,dc=ar”
# extended LDIF
#
# LDAPv3
# base <dc=segvfault,dc=com,dc=ar> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# segvfault.com.ar
dn: dc=segvfault,dc=com,dc=ar
objectClass: dcObject
objectClass: organization
o: Segvfault LDAP server
dc: segvfault

# Manager, segvfault.com.ar
dn: cn=Manager,dc=segvfault,dc=com,dc=ar
objectClass: organizationalRole
cn: Manager

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

Usamos el comando authconfig-tui que nos va a configurar
el archivo /etc/nsswitch.conf, /etc/ldap.conf, pam y otros

Eso lo ejecutamos en cosola nos abre un menú y lo configuramos
para que soporte autentificaciones LDAP y completamos los
datos que nos piden(ldap server y dnbase)

Bien, ahora podemos crear un usuario en el
directorio LDAP. Yo uso un archivo ldif y lo
edito con los datos correspondientes, ejemplo;

usuario, password, home, shell, etc:

[root@nikita openldap]# cat user.ldif
dn: uid=section,dc=segvfault,dc=com,dc=ar
uid: section
cn: section
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/section1
gecos: section

La password la generé con el siguiente comando;

[root@nikita openldap]# openssl passwd -1 -salt TEDFGNB345RTErea
Password:
$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/

la -1 es de MD5 y el salt son caracteres lo mas random posible

Lo agregamos al directorio ldap de la siguiente manera:
[root@nikita openldap]# ldapadd -a -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f user.ldif

ya podemos probar si el usuario esta basicamente andando con id:

[root@nikita openldap]# id section
uid=10000(section) gid=10000 groups=10000

Bien ahora vamos a agregar un grupo para agrupar los usuarios.
Yo use el siguiente group.ldiff

[root@nikita openldap]# cat group.ldiff
dn: cn=users,dc=segvfault,dc=com,dc=ar
objectClass: posixGroup
gidNumber: 10000
cn: users
memberUid: section
description: Users group

Y lo agrega al ldap de la siguiente manera;

[root@nikita openldap]# ldapadd -a -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f group.ldiff

y ahora si probamos de vuelta id:
[root@nikita openldap]# id section
uid=10000(section) gid=10000(users) groups=10000(users)

Vemos que el usuario esta en el grupo “users”.
Ahora creamos home del user y copiamos los archivos de skel.

[root@nikita openldap]# mkdir /home/section
[root@nikita openldap]# rsync -a /etc/skel/ /home/section
[root@nikita openldap]# chown -R section.users /home/section
[root@nikita openldap]# chmod 700 /home/section
[root@nikita openldap]# ls -la /home/section
total 20
drwx—— 2 section users 4096 Feb 11 19:09 .
drwxr-xr-x 4 root root 4096 Feb 11 21:19 ..
-rw-r–r– 1 section users 33 Jan 21 2009 .bash_logout
-rw-r–r– 1 section users 176 Jan 21 2009 .bash_profile
-rw-r–r– 1 section users 124 Jan 21 2009 .bashrc

Bien, ya esta todo listo para que el usuario se pueda loguear
con la clave que le generaron, desde otra maquina probamos ssh:

$ ssh -l section 192.168.1.10
section@192.168.1.10′s password:
Last login: Thu Feb 11 21:24:50 2010 from 192.168.1.2
[section@nikita ~]$ id
uid=10000(section) gid=10000(users) grupos=10000(users)
[section@nikita ~]$ pwd
/home/section

Listo ya tenemos el usuario logueado. Lo bueno de usar
LDAP es que puedes centralizar toda la información, usuarios,
etc
 en un servidor(o pueden ser varios si creas slaves).

Lo mismos con los “home’s” de los usuarios, puedes crear un
fileserver
 y exportar el directorio “/home” a los demás
servidores
 y tener todo la información centralizada.

Ahora por ejemplo creamos otro usuario editando el file user.ldif
ami me quedo de la siguiente manera. Editen bien el archivo con
mucho cuidado
 igual si se equivocan en algo, se puede modificar:

[root@nikita openldap]# cat user.ldif
dn: uid=section2,dc=segvfault,dc=com,dc=ar
uid: section2
cn: section2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$TEDFGNB3$ogOvJKTt/CviC47q/dBon1
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/section2
gecos: section2

Lo agregamos a la base de LDAP como ya saben:

[root@nikita openldap]# ldapadd -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f user.ldif
Enter LDAP Password:
adding new entry “uid=section2,dc=segvfault,dc=com,dc=ar”

y creamos el home y compiamos los files de skel, cambiamos permisos
como lo hicimos anteriormente…

Y ahora agregamos este usuario a el grupo “users

# cat group.ldiff
dn: cn=users,dc=segvfault,dc=com,dc=ar
objectClass: posixGroup
gidNumber: 10000
cn: users
memberUid: section
memberUid: section2
description: Users group

y lo mejor de todo, es la forma más fácil que podemos editar registros en LDAP
con ldapmodify, en este caso el grupo “users” de la siguiente manera;

[root@nikita openldap]# ldapmodify -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f group.ldiff
Enter LDAP Password:
modifying entry “cn=users,dc=segvfault,dc=com,dc=ar”

Listo, comprobamos los datos con ldapsearch:

[root@nikita openldap]# ldapsearch -h 127.0.0.1 -x -b “dc=segvfault,dc=com,dc=ar”
……
……

Tienen que ver el nuevo usuario y en el grupo users el user agregado.
Probamos con id como siempre:

[root@nikita openldap]# id section2
uid=10001(section2) gid=10000(users) groups=10000(users)

Perfecto nos logueamos desde una maquina remota:

$ ssh -l section2 192.168.1.10
section2@192.168.1.10′s password:
Last login: Thu Feb 11 21:38:54 2010 from 192.168.1.2
id: cannot find name for group ID 10001
[section2@nikita ~]$ id
uid=10001(section2) gid=10000(users) grupos=10000(users)

Bien, ahora un mínimo de seguridad, agregar estas ACLs para
restringir el acceso a la base de datos de LDAP más que nada,
que no puedan ver los passwords de los demás usuarios (al estilo shadow)

access to attrs=userPassword
by dn=”cn=Manager,dc=segvfault,dc=com,dc=ar” write
by self write
by anonymous auth
by * none

access to dn.base=”” by * read

access to *
by dn=”cn=Manager,dc=segvfault,dc=com,dc=ar” write
by * read

Lo agregamos al archivo sldap.conf y reiniciamos el servicio ldap

[root@nikita openldap]# service ldap restart

Va salir un error como el siguiente, pero no es importante
slapd.conf: line 125: rootdn is always granted unlimited privileges.

Ahora, si hacemos un:

ldapsearch -h 127.0.0.1 -x -b “dc=segvfault,dc=com,dc=ar”

NO van a poder observar todos los password de los usuarios, sólo el de ustedes,
si se autentifican al LDAP.

ldapsearch -h 127.0.0.1 -x -b “dc=segvfault,dc=com,dc=ar” -D “uid=section2,dc=segvfault,dc=com,dc=ar” -W
———-cut ——————-
# section, segvfault.com.ar
dn: uid=section,dc=segvfault,dc=com,dc=ar
uid: section
cn: section
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/section
gecos: section

# section2, segvfault.com.ar
dn: uid=section2,dc=segvfault,dc=com,dc=ar
uid: section2
cn: section2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJFRFREZHTkIzJG9nT3ZKS1R0L0N2aUM0N3EvZEJvbjE=
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/section2
gecos: section2

 

Napster2011

INSTALACION DE OPENLDAP + PHPLDAPADMIN EN CENTOS

Instalamos los siguientes paquetes:
openldap
openldap-clients
openldap-server
authconfig
authconfig-gtk
nss_ldap
Para ello ejecutamos:
#yum -y install openldap
# yum -y install openldap-clients
# yum -y install openldap-servers
# yum -y install authconfig
# yum -y install authconfig-gtk
# yum -y install nss_ldap
Des habilitamos selinux, con nano /etc/selinux/config

Creo el directorio autenticar en /var/lib/ldap/

Copio el archivo DB_CONFIG,
Genero la clave de acceso de ldap, la cual sera para este caso
qwerty
Ejecuto:
#slappasswd

Edito el archivo /etc/openldap/slapd.conf

#nano /etc/openldap/slapd.conf

database bdb

suffix “dc=zeus,dc=com”
rootdn “cn=root,dc=zeus,dc=com”
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
# rootpw {crypt}ijFYNcSNctBYg
rootpw {SSHA}Ayrl02YvAu6EsG12esWfkll1cI3opUH4
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/lib/ldap/autenticar

Reinicio el servicio Ldap

#service ldap restart

Migro las cuentas de usuario del sistema:

Ingreso a la siguiente ruta:

# cd /usr/share/openldap/migration/

Edito el script de migration.

# nano migrate_common.ph

agrego los valores

# Default DNS domain

$DEFAULT_MAIL_DOMAIN = “zeus.com”;

# Default base

$DEFAULT_BASE = “dc=zeus,dc=com”;


Se crea un archivo que contiene los demas objetos del directorio llamado base.ldif

Sobre la misma ruta ejecto el script

#./migrate_base.pl > base.ldif


La información generada en el archivo base.ldif se la inyecto al
directorio

# cd /usr/share/openldap/migration

Ejecuto:
#ldapadd -x -W -D ‘cn=root, dc=zeus, dc=com’ -h 127.0.0.1 -f base.ldif

Bueno ahora tengo que migrar el group y el passwd estando ubicdo sobre el directorio /usr/share/openldap/migration
Ejecuto:
# ./migrate_group.pl /etc/group group.ldif
# ./migrate_passwd.pl /etc/passwd passwd.ldif

Inserto los datos en el directorio activo:
# ldapadd -x -W -D ‘cn=root, dc=zeus, dc=com’ -h 127.0.0.1 -f group.ldif

Ahora el archivo passwd.ldif
# ldapadd -x -W -D ‘cn=root, dc=zeus, dc=com’ -h 127.0.0.1 -f passwd.ldif
Para verificar si esta bien:
#ldapsearch -h 127.0.0.1 -x -b ” -s base ‘(objectclass=*)’ namingContexts

Ahora si quiero ver todos los registros del directorio


#ldapsearch -x -b ‘dc=zeus, dc=com’ ‘(objectclass=*)’


Ahora si quiero buscar un usuario especifico:
#ldapsearch -x -b ‘uid=jorge, ou=people, dc=zeus, dc=com’ ‘(objectclass=*)’

Habilito la autenticacion en el archivo ldap.conf ubicado en /etc/openldap/
# authconfig-tui
Habilito Utilizar Autenticación ldap y damos en siguiente
Coloco la IP del servidor y el nombre del dominio en los campos

Damos clic en aceptar, Reinicio el demonio
#service ldap restart

INSTALAR PHPLDAPADMIN
Hago lo siguiente:
Bajo repositorio EPEL

# su -c ‘rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm&#8217;


Ahora descargo el paquete

Lo instalo con doble click , si me sale error de paquete llaves o de seguridad instalo de todos modos..



Arranco el servicio httpd
#service httpd start

Invoco esta dirección: http://127.0.0.1/phpldapadmin y automáticamente me muestra la interfaz de acceso donde ingreso
el password de root y la clave de root



 

Napster2011