lunes, 4 de noviembre de 2013

Autenticacion Centralizada LDAP+SSH

Extraido: http://www.debianchile.org/node/143

Por ezamorano Enviado el 23 Diciembre 2009
Unas de las tareas de un sysadmin es controlar el acceso a los equipos de nuestra red, cuando la suma de estos es grande se deben crear politicas, y una de esas politicas debe ser la centralizacion de usuarios, a continuacion les mostrare como se puede realizar esto con un ejemplo del servidor y los clientes.
apt-get install slapd libnss-ldap libpam-ldap
Una vez instalado los paquetes necesarios editamos slapd.conf dentro de /etc/ldap
# Schema y ObjectClass
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema

# Definicion Basica
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel 0
modulepath /usr/lib/ldap
moduleload back_bdb
sizelimit 500
tool-threads 1
backend bdb
checkpoint 512 30
database bdb

# Definicion del Directorio
suffix “dc=dominio,dc=cl”

# DB
directory “/var/lib/ldap”

# Definicion de dbconfig
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500
index objectClass eq
lastmod on

# Definicion de acceso a la DB
access to attrs=userPassword,shadowLastChange
by dn=”cn=admin,dc=dominio,dc=cl” write
by anonymous auth
by self write
by * none

access to dn.base=”" by * read
access to *
by dn=”cn=admin,dc=dominio,dc=cl” write
by * read

Una vez realizada la configuracion de slapd.conf, se debe editar /etc/nsswitch.conf
passwd: compat ldap
group: compat ldap
shadow: compat ldap

Debemos editar ademas el archivo pam_ldap.conf dentro de /etc
host 127.0.0.1
base dc=dominio,dc=cl
ldap_version 3
rootbinddn cn=admin,dc=dominio,dc=cl
pam_check_host_attr yes

Ahora reiniciamos el servidor slapd
invoke-rc.d slapd restart
Ahora editamos el archivo ldap.conf de los clientes este puede estar en /etc/ldap.conf
# Por defecto
host 200.0.0.1 # server ldap
base dc=dominio,dc=cl
ldap_version 3
rootbinddn cn=admin,dc=dominio,dc=cl
timelimit 120
bind_timelimit 120
idle_timelimit 3600

# Control de acceso por host
pam_check_host_attr yes
pam_filter &(objectClass=posixAccount)(host=mail)

A continuacion editamos /etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap

Ahora editamos el archivo para la conexion del cliente /etc/openldap/ldap.conf
BASE dc=dominio,dc=cl
URI ldap://200.0.0.1/ # server ldap

Esta configuracion es para cualquier cliente este archivo puede ser un archivo unico o separados.
# Esta definicion permite al root entrar sin pasar por servidor LDAP, en el caso si el servidor de autenticacion esta down.
auth [success=1 default=ignore] pam_unix.so
auth required pam_ldap.so use_first_pass
auth required pam_permit.so

account [success=1 default=ignore] pam_unix.so
account [success=ok new_authtok_reqd=ok ignore=ignore default=bad perm_denied=bad] pam_ldap.so
account required pam_permit.so

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

session required pam_unix.so
session optional pam_ldap.so
session required pam_mkhomedir.so umask=0066 skel=/etc/skel

Ahora solo nos falta cargar los ldif para armar nuestro directorio LDAP. 2 Ejemplo de host y usuarios.
ldapadd -x -D “cn=admin,dc=dominio,dc=cl” -W -f hosts.ldif
dn: cn=mail,ou=hosts,ou=ssh,ou=service,dc=dominio,dc=cl
objectClass: ipHost
objectClass: device
objectClass: extensibleObject
ipHostNumber: 200.0.0.3
cn: mail.dominio.cl
cn: mail

dn: cn=dns,ou=hosts,ou=ssh,ou=service,dc=dominio,dc=cl
objectClass: ipHost
objectClass: device
objectClass: extensibleObject
ipHostNumber: 200.0.0.4
cn: dns.dominio.cl
cn: dns

dn: cn=web,ou=hosts,ou=ssh,ou=service,dc=dominio,dc=cl
objectClass: ipHost
objectClass: device
objectClass: extensibleObject
ipHostNumber: 200.0.0.5
cn: web.dominio.cl
cn: web

ldapadd -x -D “cn=admin,dc=dominio,dc=cl” -W -f usuario.ldif
dn: uid=operador,ou=users,ou=ssh,ou=service,dc=dominio,dc=cl
uid: test
cn: Test
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
uidNumber: 786
gidNumber: 100
homeDirectory: /home/test
userPassword: {crypt}GoYLwzMD6cuZE
host: mail,dns

Se crean 3 hosts en el directorio LDAP y un usuario con solo acceso a mail y dns, si se requiere que el usuario test entre ademas a web, bastaria con modificar la linea host: mail,dns,web