Daniel F. Moisset
Advertencia: Estas son más notas personales para dictado de la charla que
material. Puede servir para darse una idea de los temas y como encararlos;
para información más precisa y ordenada fijate en las referencias de abajo.
Contenidos
- Overview del sistema de autenticación/usuarios
- La forma clásica en UNIX
- NSS (Solaris, GNU libc)
- Servicios: usuarios, grupos, ...
- PAM (Solaris, Linux)
- Servicios: authentication, account, session, password
- LDAP: una base de datos client/server
- Configuración de slapd
- Módulos de PAM/NSS y Configuración
- Configuración del cliente
- GNU TLS/SSL: Servicios de red con seguridad
- Esquema general
- Generación de certificados
- Configuración
Overview del sistema de autenticación/usuarios
- La forma clásica en UNIX
- NSS (Solaris, GNU libc)
- Servicios: usuarios, grupos, ...
- PAM (Solaris, Linux)
- Servicios: authentication, account, session, password
LDAP: una base de datos client/server
Lo que se almacena en la base de datos son objetos que pertenecen a
una o varias objectClasses. Las que interesan para centralizar manejo de
usuarios son: top, posixAccount,
shadowAccount y posixGroup
Configuración del cliente
Vamos a necesitar ldap-client-tools (paquete), incluso en el
server. Además necesitamos cierta configuración para que estas
herramientas anden. En particular, /etc/ldap/ldap.conf:
BASE dc=example,dc=com,dc=ar
URI ldap://server.example.com.ar
Sirve tener instalado el nscd, que acelera el proceso de búsqueda
usando cacheado. El problema es que el cacheado hace que a veces se use
la configuración vieja, así que conviene apagarlo hasta que se haya
terminado de configurar todo.
Configuración de slapd
Lo asumimos instalado (viene en casi toda distro) y corriendo por
defecto.
Necesitamos que tenga los esquemas que definen las clases de
objetos en
/etc/ldap/slapd.conf
:
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
Lo usual es almacenar los datos en una Berkeley DB:
moduleload back_bdb
backend bdb
database bdb
Ahora definimos el nombre de dominio que vamos a administrar.
Puede ser ficticio, pero is importante que resuelva bien, y que se
corresponda con la FQDN del servidor:
suffix "dc=example,dc=com,dc=ar"
Luego de eso, tenemos que agregar un objeto representando el
dominio. Generamos un LDIF,
base.ldif
:
dn: dc=example,dc=com,dc=ar
objectClass: top
objectClass: organization
dn:ou=Group,dc=example,dc=com,dc=ar
objectclass: top
objectclass: organizationalUnit
ou: Group
dn:ou=People,dc=example,dc=com,dc=ar
objectclass: top
objectclass: organizationalUnit
ou: People
dn: cn=admin,dc=example,dc=com,dc=ar
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
Con esto hacemos:
ldapadd -x -D "cn=admin,dc=example,dc=com,dc=ar" -W -f base.ldif
Podemos probar si todo anduvo bien con:
ldapsearch -x -D "cn=admin,dc=example,dc=com,dc=ar" -W
y deberían aparecer los registros anteriores
Con esto ya debería andar el slapd y tener la estructura para
agregar usuarios
CPU
CPU es una herramienta muy piola de manejo de usuarios. Aunque se
pueden manejar los usuarios con las herramientas de LDAP y pasandole
LDIFs, se vuelve incómodo.
Hay que darle poca información de configuración,
/etc/cpu/cpu.conf
va:
LDAP_URI = ldap://localhost
BIND_DN = cn=admin,dc=example,dc=com,dc=ar
BIND_PASS = dsa89er23n9
USER_BASE = ou=People,dc=example,dc=com,dc=ar
GROUP_BASE = ou=Group,dc=example,dc=com,dc=ar
Después de eso uno tiene comandos cpu useradd,
cpu groupadd, etc. Leer man cpu-ldap
Configuración de NSS
Pasamos ahora a los clientes (el servidor puede ser uno de ellos,
y sería razonable). Con la configuración de NSS, deberíamos poder ver
los nombres de usuarios al hacer un ls.
Toda esta parte conviene hacerla dejando siempre una consola de
root abierta y no cerrarla hasta saber que todo anda. Nunca se sabe que
es lo que se puede romper. Por empezar necesitamos el módulo apropiado
de PAM, en Debian es libpam-nss. Despues de eso, tenemos que indicarle
NSS que use ese módulo para buscar usuarios, editando
/etc/nsswitch.conf:
passwd: files ldap
group: files ldap
shadow: files ldap
y el archivo de configuración del módulo. Puede ser
/etc/ldap.conf o /etc/libnss-ldap.conf:
host server.example.com.ar
base dc=example,dc=com,dc=ar
ldap_version 3
rootbinddn cn=admin,dc=example,dc=com,dc=ar
port 389
Eso debería alcanzar. Se prueba con chown y ls :)
Configuración de PAM
Mismas recomendaciones que antes, más fuerte. Hay que instalar
libpam-ldap. Y configurar en /etc/ldap.conf o
/etc/pam_ldap.conf:
host server.example.com.ar
base dc=example,dc=com,dc=ar
ldap_version 3
rootbinddn cn=admin,dc=example,dc=com,dc=ar
port 389
pam_password crypt
Fijense que es casi igual (en algunas distros es el mismo
archivo). Después de eso, necesitamos configurar los servicios de pam;
normalmente hay una forma común de hacerlo. Por ejemplo en debian,
están los /etc/pam.d/common... donde hay que poner:
account sufficient pam_ldap.so
account required pam_unix.so try_first_pass
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure try_first_pass
password requisite pam_cracklib.so retry=3 minlen=6 difok=3
password sufficient pam_ldap.so use_authtok
password required pam_unix.so use_authtok md5
En mandrake eso va todo en common-system-auth
NSCD
Si se carga mucho la red, se puede poner este demonio que hace un
poco de caching. Conviene ponerlo después de que todo anda, solo si ven
que es una mejora.
GNU TLS/SSL: Servicios de red con seguridad
Todo el tráfico de LDAP va en plano por la red, lo que puede ser un riesgo
de seguridad si se sospecha de posibles sniffers. La solución usual a este
problema es configurar los clientes y servidores para que establezcan una
conexión encriptada via SSL.
Aunque usualmente todo el mundo hace SSL con la biblioteca OpenSSL, el
LDAP de debian lo hace con GNUTLS. Las herramientas para generar claves, y
firmarlas son ligeramente distintas. Lo que va a abajo es una traducción del
tutorial de LDAP+openssl para poder hacer las cosas en debian. Las cosas
con el prompt "$" son de openssl, las del ">" son las de gnutls. Usar sólo
las que correspondan a tu distribución.
Esquema general
Generación de certificados
El server necesita un certificado, firmado por una CA (autoridad
certificante). Como la mayoría de los mortales no tenemos acceso/plata
para conseguir una firma de una CA conocida, normalmente vamos a acabar
generando una CA propia.
Creamos entonces una CA:
$ mkdir /br/ldap-certs/ca
$ cd /br/ldap-certs/ca
$ openssl req -new -x509 -keyout ./ca.key -out ./ca.crt
> certtool --generate-privkey --outfile ca-key.pem
> certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca-cert.pem
Ahora tenemos un certificado de CA y una clave privada de esta
Creamos un directorio para el certificado del servidor LDAP.:
$ mkdir /br/ldap-certs/server
$ cd /br/ldap-certs/server
$ openssl genrsa -out server.key
> certtool --generate-privkey --outfile server.key
Y generamos un CSR (Pedido de Firma de Certificado):
$ openssl req -new -key server.key -out server.csr
> certtool --generate-request --load-privkey server.key --outfile server.csr
Ahora, nuestra CA acepta el pedido y nos firma el certificado.
$ openssl ca -config ./openssl.cf -out server.crt -infiles ./server.csr
> certtool --generate-certificate --load-request server/server.csr --outfile server/server.crt
--load-ca-certificate ca/ca-cert.pem --load-ca-privkey ca/ca-key.pem
Podemos revisar el contenido del certificado con este comando:
$ openssl x509 -text -in server.crt
> certtool --certificate-info < server.crt
Configuración
Hay que indicarle al servidor de ldap, /etc/ldap/slapd.conf esto:
TLSCipherSuite HIGH:MEDIUM:+SSLv2:RSA
TLSCertificateFile /etc/ssl/ldap-certs/server/server.crt
TLSCertificateKeyFile /etc/ssl/ldap-certs/server/server.key
Al cliente, /etc/ldap/slapd.conf:
TLS_CACERT /etc/ssl/ldap-certs/ca/ca-cert.pem
y en /etc/libnss-ldap.conf:
ssl start_tls
tls_cacertfile /etc/ssl/ldap-certs/ca/ca-cert.pem
tls_ciphers HIGH:MEDIUM:+SSLv2:RSA
Referencias
LDAP Implementation HOWTO: http://www.tldp.org/HOWTO/LDAP-Implementation-HOWTO/
LDAP SSL HOWTO: http://www.raphinou.com/ldaps/LDAP-SSL.HOWTO
Volver a la página principal