Herramientas de usuario

Herramientas del sitio


notas:openldap

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
notas:openldap [2010/09/09 15:07] cayunotas:openldap [2015/04/08 19:36] (actual) – [Datos iniciales] cayu
Línea 1: Línea 1:
-====== OpenLDAP ======+====== Implementacion de un servidor OpenLDAP ======
  
 OpenLDAP es una implementación libre y de código abierto del protocolo Lightweight Directory Access Protocol (LDAP) desarrollada por el proyecto OpenLDAP. Está liberada bajo su propia licencia OpenLDAP Public License. LDAP es un protocolo de comunicación independiente de la plataforma. Muchas distribuciones GNU/Linux incluyen el software OpenLDAP para el soporte LDAP. Este software también corre en plataformas BSD, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (NT y derivados, incluyendo 2000, XP, Vista), y z/OS. OpenLDAP es una implementación libre y de código abierto del protocolo Lightweight Directory Access Protocol (LDAP) desarrollada por el proyecto OpenLDAP. Está liberada bajo su propia licencia OpenLDAP Public License. LDAP es un protocolo de comunicación independiente de la plataforma. Muchas distribuciones GNU/Linux incluyen el software OpenLDAP para el soporte LDAP. Este software también corre en plataformas BSD, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (NT y derivados, incluyendo 2000, XP, Vista), y z/OS.
Línea 19: Línea 19:
 cualquier tipo de sistema de base de datos, como puede ser los archivos locales (/etc/passwd y / cualquier tipo de sistema de base de datos, como puede ser los archivos locales (/etc/passwd y /
 etc/group) o desde servidores como LDAP, Mysql, Windows.  etc/group) o desde servidores como LDAP, Mysql, Windows. 
 +
 +
 +{{ :notas:diagrama_ldap_radius.png }}
 +
 +En este caso, para mantener centralizada toda la información de autenticación, se utilizo LDAP, el
 +cual fue instalado en los equipos que al momento de la implementación cumplan la función de
 +servidor **Radius**. **LDAP** permite que la información sea accedida desde cualquier lugar a travez de la red, es rápido para realizar búsquedas y tiene una opción de replicación de datos para obtener
 +alta disponibilidad. Radius podía ser utilizado solamente como sistema de autenticación pero no
 +provee la funcionalidad de guardar información de las cuentas de usuario que Linux necesita para
 +efectuar el login. En los servidores que usan esta autenticación se instalo el paquete de Redhat
 +llamado **nss_ldap**, el cual provee los módulos de **PAM** y **NSS** necesarios para integrarse con
 +**LDAP**. Ambos utilizan un archivo de configuración en común (/etc/ldap.conf).
 +En el caso de la replicación y alta disponibilidad, el esquema es del tipo master-slave, donde
 +todas las modificaciones se realizan sobre el master y se propagan al slave (el cual es solo para
 +lectura de datos no para modificación). La alta disponibilidad se logra configurando dos o mas
 +servidores en el archivo de configuración /etc/ldap.conf, resolviendo automáticamente los
 +módulos de **NSS** y **PAM** la conexión con uno u otro equipo. 
 +La configuración del servicio **Radius** se modifico para que la //autenticación se realizara a travez de// **PAM** y //no usando los archivos locales// como estaba configurada anteriormente. Con esto se logra una integración total entre la autenticación de los router y los servidores Linux.
  
  
Línea 44: Línea 62:
 Una vez hecho esto tendremos lista nuestra instalación para poder correr. Una vez hecho esto tendremos lista nuestra instalación para poder correr.
  
 +==== Datos iniciales ====
 +=== Organización ===
 +<code>
 +dn: dc=cayu,dc=com,dc=ar
 +objectClass: top
 +objectClass: dcObject
 +objectClass: organization
 +o: cayu
 +dc: cayu
 +structuralObjectClass: organization
 +</code>
 +=== Usuario administrador ===
 +<code>
 +dn: cn=admin,dc=cayu,dc=com,dc=ar
 +objectClass: simpleSecurityObject
 +objectClass: organizationalRole
 +cn: admin
 +description: LDAP administrator
 +userPassword:: e1NTSEF9U1pIeTBlSG9vdGFlVnJWNVNrc0pDM3k4STNRdEordFU=
 +structuralObjectClass: organizationalRole
 +</code>
 +=== Contenedor de Grupos ===
 +<code>
 +dn: ou=groups,dc=cayu,dc=com,dc=ar
 +objectclass:organizationalunit
 +ou: groups
 +description: Grupos
 +</code>
 +== Grupos ==
 +<code>
 +dn: cn=users-admin,ou=groups,dc=cayu,dc=com,dc=ar
 +objectClass: posixGroup
 +cn: users-write
 +gidNumber: 10001
 +</code>
 +<code>
 +dn: cn=users-read,ou=groups,dc=cayu,dc=com,dc=ar
 +objectClass: posixGroup
 +cn: users-read
 +gidNumber: 10002
 +</code>
 +=== Contenedor de Usuarios ===
 +<code>
 +dn: ou=users,dc=cayu,dc=com,dc=ar
 +objectclass:organizationalunit
 +ou: users
 +description: Usuarios
 +</code>
 +== Usuarios ==
 +<code>
 +dn: uid=linux-admin,ou=users,dc=cayu,dc=com,dc=ar
 +objectClass: top
 +objectClass: account
 +objectClass: posixAccount
 +objectClass: shadowAccount
 +cn: switch-write
 +uid: switch-write
 +uidNumber: 16001
 +gidNumber: 10001
 +homeDirectory: /home/linux-admin
 +loginShell: /bin/bash
 +gecos: adam
 +userPassword: {crypt}x
 +shadowLastChange: 0
 +shadowMax: 0
 +shadowWarning: 0
 +</code>
 +<code>
 +dn: uid=linux-user,ou=users,dc=cayu,dc=com,dc=ar
 +objectClass: top
 +objectClass: account
 +objectClass: posixAccount
 +objectClass: shadowAccount
 +cn: switch-read
 +uid: switch-read
 +uidNumber: 16002
 +gidNumber: 10002
 +homeDirectory: /home/linux-user
 +loginShell: /bin/bash
 +gecos: adam
 +userPassword: {crypt}x
 +shadowLastChange: 0
 +shadowMax: 0
 +shadowWarning: 0
 +</code>
 +
 +=== Agregar usuarios a grupo ===
 +<code>
 +dn: cn=users-write,ou=groups,dc=cayu,dc=com,dc=ar
 +changetype: modify
 +add: memberUid
 +memberUid: linux-admin
 +</code>
 +<code>
 +dn: cn=users-read,ou=groups,dc=cayu,dc=com,dc=ar
 +changetype: modify
 +add: memberUid
 +memberUid: linux-user
 +</code>
 ===== Replicación ===== ===== Replicación =====
  
Línea 52: Línea 169:
 La replicación multimaster se puede hacer en 1 o más nodos, la única premisa es que todos deben estar iguales al momento de comenzar esta configuración (misma configuración y misma base). La replicación multimaster se puede hacer en 1 o más nodos, la única premisa es que todos deben estar iguales al momento de comenzar esta configuración (misma configuración y misma base).
  
-Vamos a suponer que tenemos los servidores ldapba ldap-miami.+Vamos a suponer que tenemos los servidores ldap1 ldap2.
  
 En el servidor ldap1 agregar estas línas al final del slapd.conf: En el servidor ldap1 agregar estas línas al final del slapd.conf:
Línea 288: Línea 405:
 ===== En los clientes ===== ===== En los clientes =====
  
 +==== Configuracion servidor LDAP con políticas ====
 +
 +**/etc/pam.d/system-auth**
 +
 +<code>
 +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 required pam_ldap.so
 +account required pam_permit.so
 +
 +password requisite pam_cracklib.so try_first_pass retry=3
 +password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
 +password required pam_deny.so
 +
 +session optional pam_keyinit.so revoke
 +session required pam_limits.so
 +session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
 +session required pam_unix.so
 +</code>
 +
 +
 +**/etc/nsswitch.conf**
 +
 +<code>
 +...
 +passwd:     files ldap
 +shadow:     files
 +group:      files ldap
 +...
 +</code>
 +
 +**/etc/openldap/ldap.conf**
 +
 +<code>
 +TLS_REQCERT allow
 +TLSREQCERT never
 +</code>
 +
 +//Igualmente estos datos pueden ir en el archivo siguiente como para tener todo mas junto.//
 +
 +**/etc/ldap.conf**
 +
 +<code>
 +host ldap-primario ldap-secundario
 +
 +binddn uid=usuario-query,ou=users,dc=dominio,dc=com
 +bindpw password1234
 +
 +bind_policy soft
 +
 +bindlimit 3
 +timelimit 10
 +
 +base dc=dominio
 +
 +pam_filter objectclass=posixAccount
 +
 +pam_login_attribute uid
 +
 +nss_base_passwd ou=users,dc=dominio,dc=com?one
 +nss_base_group ou=groups,dc=dominio,dc=com?one
 +
 +ssl yes
 +pam_password md5
 +TLS_REQCERT never
 +</code>
 +
 +
 +Y si tenemos una aplicacion que utiliza **PAM** para autenticar deberemos configurarla asi (ejemplo FreeRADIUS) :
 +
 +**/etc/pam.d/radiusd **
 +<code>
 +auth       include system-auth
 +account    required pam_nologin.so
 +account    include system-auth
 +password   include system-auth
 +session    include system-auth
 +</code>
 +
 +
 +==== Configuracion servidor LDAP sin políticas ====
 +
 +
 +
 +=== Configuracion PAM ===
 +
 +**PAM** **P**luggable **A**uthentication **M**odules. PAM es un sistema de autenticación que controla el acceso a diferentes recursos.
 +
 +== /etc/nsswitch.conf ==
 +
 +<code perl>
 +passwd:     files ldap
 +shadow:     files ldap
 +group:      files ldap
 +hosts:      files dns
 +bootparams: nisplus [NOTFOUND=return] files
 +ethers:     files
 +netmasks:   files
 +networks:   files
 +protocols:  files
 +rpc:        files
 +services:   files
 +
 +netgroup:   files
 +
 +publickey:  nisplus
 +
 +automount:  files
 +aliases:    files nisplus
 +</code>
 +
 +== /etc/pam.d/system-auth ==
 +
 +<code perl>
 +auth      required      /lib/security/$ISA/pam_env.so
 +auth      sufficient    /lib/security/$ISA/pam_ldap.so
 +auth      sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok use_first_pass
 +auth      required      /lib/security/$ISA/pam_permit.so
 +auth      required      /lib/security/$ISA/pam_deny.so
 +account   sufficient    /lib/security/$ISA/pam_ldap.so 
 +account   required      /lib/security/$ISA/pam_unix.so
 +password  required      /lib/security/$ISA/pam_cracklib.so retry=3 type=
 +password  sufficient    /lib/security/$ISA/pam_ldap.so debug use_first_pass
 +password  sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow use_first_pass
 +password  required      /lib/security/$ISA/pam_deny.so
 +session   required      /lib/security/$ISA/pam_limits.so
 +session   required      /lib/security/$ISA/pam_unix.so
 +session   optional      /lib/security/$ISA/pam_mkhomedir.so
 +</code>
 +
 +=== Radius ===
 +
 +**RADIUS** (acrónimo en inglés de **R**emote **A**uthentication **D**ial-In **U**ser **S**erver). Es un protocolo de autenticación y autorización para aplicaciones de acceso a la red o movilidad IP. Utiliza el puerto 1813 UDP para establecer sus conexiones.
 +
 +
 +
 +//Cuando se realiza la conexión con un ISP mediante módem, DSL, cablemódem, Ethernet o Wi-Fi, se envía una información que generalmente es un nombre de usuario y una contraseña. Esta información se transfiere a un dispositivo NAS (Servidor de Acceso a la Red) sobre el protocolo PPP, quien redirige la petición a un servidor RADIUS sobre el protocolo RADIUS. El servidor RADIUS comprueba que la información es correcta utilizando esquemas de autentificación como PAP, CHAP o EAP. Si es aceptado, el servidor autorizará el acceso al sistema del ISP y le asigna los recursos de red como una dirección IP, y otros parámetros como L2TP, etc.//
 +
 +
 +
 +
 +Configuracion de autenticacion, con **PAM** previamente configurado contra LDAP
 +
 +== /etc/raddb/users ==
 +
 +
 +<code python>
 +DEFAULT Auth-Type := Pam, Pam-Auth := radiusd,  Group == "radius-write"
 +        Service-Type = Login-User,
 +        Cisco-AVPair = "shell:priv-lvl=15",
 +        Fall-Through = 0
 +DEFAULT Auth-Type := Pam, Pam-Auth := radiusd, Group == "radius-lectura"
 +        Service-Type = Login-User,
 +        Cisco-AVPair = "shell:priv-lvl=5",
 +        Fall-Through = 0
 +DEFAULT Auth-Type = LDAP
 +        Fall-Through = 1
 +DEFAULT Ldap-Group == "ou=users,dc=pan-energy"
 +        Fall-Through = no
 +</code>
 +
 +==== NSCD ====
  
 El NSS (Name Service Switch) provee una interface para configurar y acceder a diferentes bases de datos de cuentas de usuarios y claves como /etc/passwd, /etc/group, /etc/hosts, LDAP , etc. El NSS (Name Service Switch) provee una interface para configurar y acceder a diferentes bases de datos de cuentas de usuarios y claves como /etc/passwd, /etc/group, /etc/hosts, LDAP , etc.
Línea 332: Línea 614:
 password-hash   {crypt} password-hash   {crypt}
 </code> </code>
 +o
 +<code>
 +password-hash   {ssha}
 +</code>
 +
 +//Para que las politicas tengan efecto, deberemos utilizar siempre SSHA//
 +
 +
  
 Script para chequear vencimientos de passwords avisar antes de tiempo, o bloquear cuando esta vencido. Con modificaciones hechas por mi. Script para chequear vencimientos de passwords avisar antes de tiempo, o bloquear cuando esta vencido. Con modificaciones hechas por mi.
Línea 769: Línea 1059:
  
 {{:notas:cambia_password.tgz|}} {{:notas:cambia_password.tgz|}}
 +
 +==== SUDO ====
 +
 +La confiuración de SUDO almacenada dentro de LDAP la podemos encontrar en el archivo README.LDAP
 +
 +
 +Igualmente SUDO nos tomara la configuación actual para obtener los grupos, de los dato que obtiene del nss, asi que podemos configurar nuestro grupo ldap para ser tomado por el sudoers de esta forma.
 +
 +
 +La sintaxis es la misma que para cualquier sudoers
 +<code>
 +Cmnd_Alias     PASSWDROOT = /usr/bin/passwd root
 +Cmnd_Alias     USER_ADD   = /usr/sbin/useradd
 +Cmnd_Alias     PASSWDUSER = /usr/bin/passwd
 +Cmnd_Alias     USER_DEL   = /usr/sbin/userdel
 +
 +administrador ALL=(ALL) ALL
 +%Administradores ALL = NOPASSWD: PASSWDROOT, USER_ADD, PASSWDUSER, USER_DEL
 +</code>
 +
 +
 +
  
 ==== Referencias ==== ==== Referencias ====
notas/openldap.1284044872.txt.gz · Última modificación: 2010/09/09 15:07 por cayu