jueves, 9 de diciembre de 2010

2/2 Autenticación basada en LDAP

http://www.isftic.mepsyd.es/formacion/materiales/85/cd/REDES_LINUX/openldap/Autentificacion_del_sistema_con_OpenLDAP.html


Introducción
Como ya hemos comentado anteriormente, una de las utilidades más importantes de un servidor LDAP es como servidor de autentificación. Autentificarse es necesario para entrar en un sistema linux. También para acceder a algunos servicios como un servidor FTP o a páginas privadas en un servidor web. En otros apartados veremos como utilizar un servidor LDAP para permitir el acceso a páginas web privadas y para autentificar a usuarios del servidor de ftp Proftpd. Aquí veremos las modificaciones que hay que realizar en un sistema Linux para que autentifique a los usuarios en un servidor LDAP en lugar de utilizar los clásicos archivos /etc/passwd, /etc/group y /etc/shadow. Para ello es necesario instalar y configurar los paquetes libpam-ldap y libnss-ldap.

Librerías de autentificación pam-ldap y nss-ldap
La librería pam-ldap permite que las aplicaciones que utilizan PAM para autentificarse, puedan hacerlo mediante un servidor LDAP. Para que el sistema linux se autentifique mediante un servidor LDAP es necesario instalar esta librería ya que utiliza PAM. El archivo de configuración de ésta librería es /etc/pam_ldap.conf. Hay otras aplicaciones o servicios que utilizan PAM para la autentificación y por tanto podrían, gracias a la librería pam-ldap, autentificarse ante un servidor LDAP.

Para especificar el modo de autentificación de cada servicio es necesario configurar los archivos que se encuentran en la carpeta /etc/pam.d/. Al final de este documento se indican los cambios necesarios en éstos archivos.

La librería nss-ldap permite que un servidor LDAP suplante a los archivos /etc/passwd, /etc/group y /etc/shadow como bases de datos del sistema. Su archivo de configuración se encuentra en /etc/libnss-ldap.conf. Posteriormente deberemos configurar el arhivo /etc/nsswitch.conf para que se utilice LDAP como base de datos del sistema en lugar de los archivos passwd, group y shadow.

La instalación de ambas librerías se puede realizar mediante apt-get.

Instalación y configuración de libpam-ldap
La instalación de la librería libpam-ldap se puede realizar ejecutando el comando:

// Instalación de la librería libpam-ldap

# apt-get install libpam-ldap


El archivo de configuración de la librería es el archivo /etc/pam_ldap.conf. Únicamente hay que configurar los siguientes parámetros:

1. Quién es el servidor LDAP (nombre o IP)
2. Cuál es la base de nuestro directorio LDAP (base DN)
3. Cuál es la versión de LDAP a utilizar
4. Quién es el administrador del directorio
5. En qué unidad organizativa se encuentran los usuarios (sustituto de /etc/passwd)
6. En qué unidad organizativa se encuentran las contraseñas (sustituto de /etc/shadow)
7. En qué unidad organizativa se encuentran los grupos (sustituto de /etc/group)

Para ello las líneas que hay que modificar en el archivo de configuración son las siguientes (el valor de los parámetros es un ejemplo):

// Configurar en /etc/pam_ldap.conf

host 192.168.1.239 //nombre o IP del servidor LDAP base dc=ieslapaloma,dc=com ldap_version 3 rootbinddn cn=admin,dc=ieslapaloma,dc=com nss_base_passwd ou=users,dc=ieslapaloma,dc=com?one nss_base_shadow ou=users,dc=ieslapaloma,dc=com?one nss_base_group ou=groups,dc=ieslapaloma,dc=com?one


Instalación y configuración de libnss-ldap
Para instalar la librería libnss-ldap debemos ejecutar el comando:

// Instalación de la librería libnss-ldap

# apt-get install libnss-ldap


Acto seguido se iniciará el asistente de configuración de dicha librería. Se puede lanzar dicho asistente más adelante mediante el comando:

// Lanzar asistente de configuración de libnss-ldap

# dpkg-reconfigure libnss-ldap


Dicho asistente modificará el archivo /etc/libnss-ldap.conf que es donde se almacena la configuración de la librería. Posteriormente tendremos que editar dicho archivo manualmente para introducir algún cambio que no realiza el asistente.

La primera pregunta que nos hace el asistente es quién es el servidor LDAP. Podemos poner la IP o el nombre:

Luego nos preguntará por la base del directorio LDAP (base DN):

Acto seguido tendremos que indicar la versión de LDAP a utilizar:

En el siguiente paso nos pregunta si necesitamos autentificarnos en el servidor LDAP o no. Como la librería únicamente va a realizar consultas, no es necesario autentificarse por lo tanto debemos responder 'No':

Posteriormente nos preguntará si el archivo /etc/libnss-ldap debe solamente tener permisos de lectura y escritura para el usuario (root que es quién instala) o no. Como en el paso anterior hemos indicado que no necesitamos autentificación, no se almacenarán contraseñas en el archivo de configuración, por tanto podemos responder 'No':

Finalmente nos advierte que debemos modificar el archivo /etc/nsswitch.conf para que el sistema utilice el directorio LDAP como base de datos del sistema, al igual que hace con los archivos passwd, group y shadow:

Con el asistente se habrá configurado casi todo lo necesario aunque para que nuestro sistema se autentifique por LDAP, aún hay que configurar dos parámetros más:

1. En qué unidad organizativa se encuentran los usuarios (sustituto de /etc/passwd - en nuestro caso ou=users)
2. En qué unidad organizativa se encuentran los grupos (sustituto de /etc/group - en nuestro caso ou=groups)

Para ello hay que modificar dos líneas en el archivo de configuración. Son las siguientes:

// Configurar en /etc/libnss-ldap.conf

nss_base_passwd ou=users,dc=ieslapaloma,dc=com nss_base_group ou=groups,dc=ieslapaloma,dc=com


Configuración de NSS
Para que el servidor LDAP actúe como si se tratara de los archivos passwd, group y shadow, además de instalar las dos librerías anteriores, debemos indicar que se utilice LDAP como alternativa para autentificar usuarios. Para ello hay que añadir en las líneas que hacen referencia a passwd, group y shadow en el archivo /etc/nsswitch.conf, la palabra 'ldap' tras la palabra 'files' quedando el archivo /etc/nsswitch.conf así:

// Archivo /etc/nsswitch.conf

# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: files ldap group: files ldap shadow: files ldap hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis


Configurar servicios PAM
Nuestro sistema ya estaría preparado para autentificarse por LDAP. Editando los archivos que hay en la carpeta /etc/pam.d, podemos configurar la forma en la que se autentifica cada uno de los servicios que requieren autentificación.

Para no tener que configurar de cada uno de los servicios, existen unos archivos comunes cuyo nombre empieza por common que afectan a la mayoría de ellos y sus archivos de configuración los referencian mediante una línea @include a los archivos comunes causando el mismo el efecto que si el contenido de los archivos comunes estuviera copiado en el lugar de la línea @include. Los archivos comunes son:

* /etc/pam.d/common-auth (para autentificarse)
* /etc/pam.d/common-account (para disponer de una cuenta)
* /etc/pam.d/common-session (para poder iniciar sesion)
* /etc/pam.d/common-password (para poder cambiar password)

Estos archivos contienen una línea que hace referencia a la librería pam_unix.so que corresponde a la autentificación contra los archivos UNIX. Para que los servicios de nuestro sistema utilicen primero las librerías pam_ldap.so para autentificar al usuario, debemos añadir la línea correspondiente a pam_ldap.so por encima de la línea correspondiente a la librería pam_unix.so en los archivos common. Así, auntentificará primero contra el servidor LDAP, y si la autentificación falla, probará despues con los archivos UNIX.

Configuración archivo common-auth
Para que los servicios de nuestro sistema utilicen las librerías pam-ldap para autentificar al usuario, debemos añadir en el archivo /etc/pam.d/common-auth la siguiente línea:

// Añadir en /etc/pam.d/common-auth encima de la línea pam_unix.so

auth sufficient pam_ldap.so


Configuración archivo common-account
Para permitir que los servicios de nuestro sistema comprueben la cuenta del usuario mediante las librerías pam-ldap, debemos añadir en el archivo /etc/pam.d/common-account la siguiente línea:

// Añadir en /etc/pam.d/common-account encima de la línea pam_unix.so

account sufficient pam_ldap.so


Configuración archivo common-session
Para permitir que los servicios de nuestro sistema obtengan los parámetros de la sesión de usuario mediante las librerías pam-ldap, debemos añadir en el archivo /etc/pam.d/common-session la siguiente línea:

// Añadir en /etc/pam.d/common-session encima de la línea pam_unix.so

session sufficient pam_ldap.so


Configuración archivo common-password
Para permitir que los servicios de nuestro sistema puedan modificar la contraseña del usuario mediante las librerías pam-ldap, debemos añadir en el archivo /etc/pam.d/common-password la siguiente línea:

// Añadir en /etc/pam.d/common-password encima de la línea pam_unix.so

password sufficient pam_ldap.so


Configuración particular para cada servicio
Si deseamos que algún servicio se autentifique de forma diferente, podemos editar el archivo del servicio (ej: /etc/pam.d/su, /etc/pam.d/ssh, /etc/pam.d/ftp, etc...), eliminar la línea que comienza por @include e introducir la configuración particular que deseemos.

Probar la autentificación
Nuestro servidor LDAP ya debería autentificar correctamente . Podemos probar la autentificación de los servicios mediante el comando pamtest que se encuentra en el paquete libpam-dotfile, por lo tanto debemos instalarlo:

// Instalación del comando pamtest

# apt-get install libpam-dotfile


Si deseamos probar que funciona el servicio passwd (cambiar contraseña) sobre un usuario del directorio LDAP (ejemplo jessica) , podemos ejecutar:

// Probando el cambio de contraseña

root@cnice-desktop:/etc/pam.d# pamtest passwd jessica Trying to authenticate for service . Password: // Introducimos el password de jessica Authentication successful. // La autentificación ha sido satisfactoria


También podemos utilizar el comando finger sobre usuarios que estén solamente en el directorio LDAP, por ejemplo joel:

// Probando finger

root@cnice-desktop:/etc/pam.d# finger joel Login: joel Name: Joel Javier Directory: /home/www/alumnos Shell: /bin/sh Last login Tue Sep 27 18:02 (CEST) on pts/3 from 192.168.0.213 No mail. No Plan.


Podemos por ejemplo, desde una consola de root, cambiar mediante el comando 'su' (su=Switch User - cambiar de usuario) a un usuario que esté en el directorio LDAP, para lo cuál no nos pedirá contraseña ya que root tiene permiso para cambiar a cualquier usuario. Si posteriormente cambiamos a otro usuario del directorio, ahora sí que nos pedirá contraseña. Deberemos introducir la contraseña que esté almacenada en el directorio LDAP para dicho usuario:

// Cambiando de usuario
root@cnice-desktop:/etc/pam.d# su joel // Somos root y cambiamos a joel
joel@cnice-desktop: // No nos pide password
joel@cnice-desktop:/etc/pam.d$ su jessica // Somos joel, y cambiamos a jessica
Password: // Nos pide password, le introducimos
jessica@cnice-desktop:/etc/pam.d$ // Ha cambiado correctamente

Las opciones de configuración de PAM son muy variadas. Para obtener más información se puede instalar el paquete libpam-doc que instala bastante documentación al respecto bajo la carpeta /usr/share/doc/libpam-doc/

1/2 Configuración de un cliente y servidor OpenLDAP para autentificación

http://cvirtual.filosofia.cu/almacen/cursos-y-manuales/linux-debian-y-ubuntu/openldap/configuracion-de-un-cliente-y-servidor-openldap-para-autentificacion

Configuración de un cliente y servidor OpenLDAP para autentificación

Muchas veces (como en este artículo) se usa LDAP para guardar información de los usuarios. Podemos guardar lo típico de login, UID, GID, contraseña, etc. y además añadirle una foto, teléfono de casa u otras informaciones qué queramos. Recalcar que en este artículo guardaremos la información necesaria para un servidor de autentificación; no para un servidor de ficheros. Si necesitamos un servidor de ficheros tendremos que usar NFS (o Coda, Intermezzo, etc.)
Configuración de un cliente y servidor OpenLDAP para autentificación

OpenLdap logo
Introducción

Usaremos la implementación OpenLDAP, que podemos encontrar en http://www.openldap.com (3). De todas formas aquí nos basaremos en los paquetes Debian (sid, pero es parecido a todas) para hacerlo.

Como nota general, no soy un experto de LDAP sinó que he tenido que instalarlo un par de veces y esos son mis apuntes para conseguirlo, espero que sean útiles a alguien.

Podemos ver a LDAP como una base de datos optimizada para hacer un número muy alto de lecturas y muy pocas escrituras o modificaciones. Además está organizado de modo jerárquico.

Recordar que LDAP es un "Directorio Ligero", que puede servir tanto para autentificar a los clientes como para recopilar otros tipos de información (desde colecciones de distribuciones Linux a resolver nombres).
Instalación del servidor

En el servidor necesitaremos los paquetes libldap2 slapd. Podemos instalar también el paquete ldap-utils que nos servirá para hacer ciertas pruebas.

Una vez instalado el servidor OpenLDAP iremos al directorio /etc/ldap y modificaremos el fichero slapd.conf. En este fichero modificaremos al menos el suffix poniendo por ejemplo nuestro dominio (no hace falta que esté registrado, es para referirnos a él desde LDAP). Lo pondremos con el formato suffix "dc=pinux,dc=info".

Añadiremos también:

rootdn "cn=admin,dc=pinux,dc=info" #para autentificar al administrador rootpw secret #la contraseña

(la contraseña la podemos encriptar, al final del documento vemos como)

En el resto del fichero de configuración sólo tendremos que cambiar el cn= y el dc=pinux,dc=info donde veamos que hace falta.

En este momento podremos hacer un /etc/init.d/slapd restartpara reiniciar el servidor LDAP.

Si ejecutamos slapcatnos tendría que dar información sobre nuestro LDAP (normalmente imprime por pantalla todoo el LDAP, de momentos sólo veremos algo de estructura).
Alta, búsqueda y eliminación de usuarios

Ahora lo que tendremos que hacer es dar de alta a algunos usuarios para después poder usarlos en la autentificación.

Antes de dar de alta a los usuarios y grupos, tendremos que dar de alta al administrador, un usuario para "buscar" la información sin privilegios y ya después algun usuario normal para verificar que nos funciona correctamente el sistema.

La forma de dar de alta a usuarios (o datos en general) en LDAP suele ser mediante ficheros .ldif. Un fichero .ldif es un fichero que contiene la información que vamos a añadir, para después añadirla a nuestro directorio.

antes de empezar a dar de alta a los usuarios crearemos la "estructura" mediante este fichero .ldif:

dn: ou=Group,dc=pinux,dc=info objectClass: top objectClass: organizationalUnit ou: Group

dn: ou=People,dc=pinux,dc=info objectClass: top objectClass: organizationalUnit ou: People

De esta forma tenemos a dos "Organization Units" que son los grupos (Groups) y los usuarios (People).

Vemos que estamos usando el objectClass: organizationalUnit, de esa forma LDAP ya sabe qué campos tendrás nuestros usuarios/grupos. Para decirle a LDAP que inserte los datos del fichero .ldif en la base de datos ejecutaremos:

ldapadd -x -D 'cn=admin,dc=pinux,dc=info' -w secret -f fichero.ldif

Notas:

* Con -x nos autentificamos de forma simple a LDAP sin usar SASL
* Al -D le decimos el Distinguised Name, el mismo que le pusimos en el fichero de configuración
* Al -w le pasaremos la contraseña. Con -W nos la pediría de forma interactiva
* Al -f sirve para pasarle el fichero de configuración

Seguidamente, daremos de alta un usuario. Seguiremos el mismo esquema que hasta ahora, haciendo un fichero .ldif y después ejecutando la utilidad ldapadd. El fichero .ldif para dar de alta a un usuario puede ser uno como este:

# # New Tester user # dn: uid=tester,ou=People,dc=pinux,dc=info objectClass: top objectClass: account objectClass: posixAccount uid: tester cn: Test User userPassword: hola gecos: Test User uidNumber: 2000 gidNumber: 2000 homeDirectory: /home/tester loginShell: /bin/bash

Y a continuación:

ldapadd -x -D 'cn=admin,dc=pinux,dc=info' -w secret -f fichero.ldif

Ahora sí que podemos ejecutar slapcaty ver si el usuario tester está correctamente listado.

Al hacer un slapcatél mismo nos está haciendo un listado en format .ldif (lo podriamos aprovechar para lo que haga falta).

Ya que estamos dando de alta a usuarios, aprovechamos y damos de alta a un grupo. Para hacerlo, crearemos un fichero .ldif con este contenido:

# # Testing Group# dn: cn=testing,ou=Group,dc=pinux,dc=info objectClass: top objectClass: posixGroup cn: testing gidNumber: 2000

Ahora ya tenemos a un grupo con GID 2000.

También podemos aprovechar para hacer búsuqedas:

ldapsearch -x -b 'uid=tester,ou=People,dc=pinux,dc=info'

Y por último, si queremos eliminar un usuario podemos hacerlo de esa forma:

ldapdelete -x -D 'cn=admin,dc=pinux,dc=info' -w secret\ 'cn=Local Root,ou=People,dc=pinux,dc=info'
Configurando un cliente LDAP

El objetivo de esta parte es poder hacer un slapcatdesde una máquina que no sea el servidor y funcione correctamente.

Para conseguir eso tendremos que intalar al menos los paquetes libldap2, ldap-utils.

Una vez instalados estos paquetes, editaremos el fichero /etc/ldap/ldap.conf. Este fichero es el de configuración del cliente LDAP, no lo tenemos que confundir confundir con el fichero slapd.conf, que es de la configuración del servidor.

El fichero podemos dejarlo así:

host 192.168.1.2 base dc=pinux,dc=info

De esa forma le decimos donde tiene que conectarse y el dc.

Ahora desde la máquina cliente podemos hacer uso del slapcatigual que antes. La configuración por defecto permite la lectura de varios campos por "todo el mundo", así que aunque no veremos la contraseña podremos ver otra información del usuario.
Configurando un cliente, parte nsswitch

Para esta parte necesitaremos instalar el paquete libnss-ldap.

Cuando trabajamos con el sistema (ls -l, p. ej.) normalmente vemos los nombres de los usuarios propietarios de los ficheros. En cambio guardado en el disco hay el "número" (UID) del usuario.

Para que los programas sepan el nombre que corresponde a los UID's (y otras cosas, como grupos, hosts, etc.) hacen unas llamadas a funciones de la librería GLIBC, y es esta quien "averigua" la relación.

Es en el fichero /etc/nsswitch.confdonde le decimos al sistema de donde averiguar el propietario sabiendo el UID. Normalmente contiene algo como:

passwd: compat group: compat shadow: compat

hosts: files dns networks: files

Lo que más nos interesa es la parte de passwd, group y shadow. Ahora lo dejaremos así:

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

Por tanto cuando un programa le pide a la GLIBC "dime el nombre del usuario 1005", la GLIBC primero mira en /etc/passwdy sinó hará la consula al servidor LDAP.

Para que el nsswitch pueda hacer las consultas en el LDAP tendremos el fichero /etc/libnss-ldap.confalgo como:

host 192.168.1.2 base dc=pinux,dc=info

Es decir, la información necesaria para llegar a nuestro servidor LDAP y lanzar la consulta. Si hacemos man libnss-ldap.confveremos las opciones que podemos ponerle (p. ej. port, ldap_versions, etc.)

Entre otras cosas, a veces necesitaremos que se haga una conexión autentificada contra el servidor. Para eso se usará la contraseña que encuentre en /etc/ldap.secret(tiene que estar con permisos 600, propietario y grupo root)
Configurando el cliente PAM

Para poder configurar el cliente PAM tendremos que instalar el paquete libpam-ldapHay varios programas que pueden usar (y usan por defecto) un método de autentificación "centralizado" y por módulos llamado PAM (Pluggable Authentication Modules). Eso son unas librerias que los programas pueden soportar que sirven de "interfaz" contra varios métodos de autentificación (p. ej. LDAP)

La configuración en Debian es en el directorio /etc/pam.d/y tenemos un fichero de configuración por cada servicio.

Si es necesario que la conexión sea con privilegios, se usará la contraseña que se encuentre en /etc/ldap.secret, y que estará con permisos 600 (como el punto anterior).

Tener la contraseña para autentificarse es necesario, con la configuración por defeto del slapd.conf, cuando el usuario root quiere cambiar la contraseña de otro usuario: si no es conexión autentificada, el servidor LDAP no le deja cambiarla. De otra forma cualquier usuario podría cambiar la contraseña de cualquier otro, solo lanzando la consulta al servidor LDAP.

Seguidamente, dejaremos el fichero /etc/pam_ldap.confde forma parecida:

host 192.168.1.2 base dc=pinux,dc=info ldap_version 3

rootbinddn cn=admin,dc=pinux,dc=info # don't forget /etc/ldap.secret

Ahora ya tenemos la configuración general de PAM para funcionar con LDAP. Pasemos a la parte específica de cada servicio (ssh, su, passwd, etc.). Estaremos tocando los ficheros de configuración del cliente para que se autentifique contra el servidor.

ssh

Tenemos que ir al fichero /etc/pam.d/sshy al menos añadir esas líneas:

auth sufficient pam_ldap.so account sufficient pam_ldap.so session sufficient pam_ldap.so password sufficient pam_ldap.so

al inicio del fichero.

En el caso del ssh tendremos seguramente que modificar en el fichero /etc/ssh/sshd_configel parámetro PAMAuthenticationViaKbdInta yes. De otra forma no autentificaría de forma correcta.

su

Sirve para poder ejecutar el sucon usuarios que están dados de alta en el LDAP.

En el fichero /etc/pam.d/sulo dejaremos parecido a:

auth sufficient pam_rootok.so auth sufficient pam_ldap.so auth required pam_unix.so use_first_pass

account sufficient pam_ldap.so account required pam_unix.so

session sufficient pam_ldap.so session required pam_unix.so
passwd

Este es para permitir cambiar las contraseñas de los usuarios. Lo podemos dejar así:

password sufficient pam_ldap.so password required pam_unix.so nullok obscure min=4 max=8

Es bastante útil dar de alta a los usuarios de forma normal y cambiarles la contraseña con el mismo passwd como root (si son pocos usuarios de pruebas, claro)
login

Lo dejaremos parecido a este:

auth required pam_nologin.so auth sufficient pam_ldap.so auth sufficient pam_unix.so shadow use_first_pass auth required pam_deny.so

Hay otras maneras de dejarlo, pero tenemos que ir con cuidado con el use_first_pass: si no lo ponemos los usuarios que estan dados de alta en LDAP se les pediría dos veces la contraseña (una validaría con /etc/passwd, y al no encontrar el usuario se lo pediría otra vez para validarlo contra LDAP.

Con los ejemplos vistos hasta ahora sería fácil hacer lo mismo en otros servicios (p. ej. proftpd, xlock, etc.)

También es relativamente fácil modificar los ficheros common-account common-auth common-password common-sessionpara no tener que tocar el fichero de cada servicio, a costa de tener menos "personalización" por servicio.

lunes, 6 de diciembre de 2010

Apagar remotamente Windows desde Linux

http://sliceoflinux.com/2009/06/03/apagar-remotamente-windows-desde-linux/

Si tenemos que administrar una red en la que contamos con numerosos equipos con Windows, sería bastante cómodo poder apagar algunos de estos equipos sin tener que levantarnos de nuestro puesto de trabajo o incluso hacer un script para que se apaguen todos los equipos a una hora determinada. Y como, por supuesto, en nuestro equipo sólo disponemos de Linux, la pregunta que surge es ¿cómo podemos hacerlo?

EASYIDS.

Es un sistema de Detección de Intrusos basado en Snort, el cual integra varias herramientas de monitoreo y administración bajo una interfaz web facil de manejar. Easyids esta montado sobre el Sistema Operativo CentOs 5.4 y fue diseñado principalmente para soluciones bajo Linux.



http://jonhatan.wordpress.com/2010/10/