User Tools

Site Tools


informatica:linux:ssh_contra_ldap

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revisionBoth sides next revision
informatica:linux:ssh_contra_ldap [2013/08/06 14:04] – created javiinformatica:linux:ssh_contra_ldap [2015/08/24 18:39] – [sudo como grupo LDAP] javi
Line 1: Line 1:
 +====== SSH contra LDAP ======
 +
 +===== Antecedentes =====
 +
 **Objetivo**: iniciar una sesion SSH con un usuario almacenado en un servidor LDAP (OpenLDAP en este caso) externo en lugar de en un archivo /etc/passwd local **Objetivo**: iniciar una sesion SSH con un usuario almacenado en un servidor LDAP (OpenLDAP en este caso) externo en lugar de en un archivo /etc/passwd local
  
-**Nota**: la configuracion es 100% local, no hay que tocar el servidor LDAP+**Nota 1**: la configuracion es 100% local, no hay que tocar el servidor LDAP\\ 
 + 
 +**Nota 2**: mejor usar /bin/bash como consola (editar ese campo en el servidor LDAP). Tiene autocompletion, colores, etc... 
 + 
 +En este ejemplo: 
 + 
 +* Servidor OpenLDAP v3\\ 
 +* El servidor requiere un usuario bind (no permite busquedas anonimas)\\ 
 +* Requiere TLS, pero el certificado esta autofirmado, por lo que el error debe ser ignorado por el cliente\\ 
 +* Detalle de los usuarios y grupos que usaremos en el ejemplo:\\ 
 + 
 +==== Servidor de LDAP ==== 
 + 
 +**Usuarios** 
 + 
 +MUY IMPORTANTE QUE ESTÉN CREADOS ASÍ!!! (tiene que tener el campo uid) 
 + 
 +<code> 
 +dn: ou=people,dc=example,dc=com 
 +objectclass: organizationalUnit 
 +ou: people 
 + 
 +dn: cn=user1,ou=people,dc=example,dc=com 
 +cn: user1 
 +gidnumber: 500 
 +givenname: Name 
 +homedirectory: /home/user1 
 +loginshell: /bin/bash 
 +objectclass: inetOrgPerson 
 +objectclass: posixAccount 
 +objectclass: top 
 +sn: Surename 
 +uid: user1 
 +uidnumber: 1001 
 +userpassword: {MD5}MD5hashedpassword 
 +</code> 
 +  
 +**Grupos** 
 +<code> 
 +dn: ou=groups,dc=example,dc=com 
 +objectclass: organizationalUnit 
 +objectclass: top 
 +ou: groups 
 + 
 +dn: cn=user1,ou=groups,dc=example,dc=com 
 +cn: user1 
 +gidnumber: 500 
 +memberuid: user1  
 +objectclass: posixGroup 
 +objectclass: top 
 +</code> 
 + 
 +===== Procedimiento ===== 
 +==== Cliente  SSH ====
  
 1. Instalar paquetes: 1. Instalar paquetes:
  
-  sudo aptitude upda; sudo aptitude install libnss-ldapd+  sudo aptitude update; sudo aptitude install libnss-ldapd
      
 2. Pulsar "enter" en todas las preguntas, y si podemos elegir siempre "no". Luego refinamos la configuracion 2. Pulsar "enter" en todas las preguntas, y si podemos elegir siempre "no". Luego refinamos la configuracion
Line 13: Line 70:
   sudo /etc/init.d/nscd stop   sudo /etc/init.d/nscd stop
      
-4. Comprobar que el archivo:+4. Editar:
  
-  less /etc/nsswitch.conf+  sudo cp /etc/nsswitch.conf /etc/nsswitch.conf.bak 
 +  sudo vim /etc/nsswitch.conf
      
-Contiene la siguiente configuracion:+Y dejar las siguientes lineas asi:
  
 <code> <code>
Line 23: Line 81:
 group:          compat ldap group:          compat ldap
 shadow:         compat ldap shadow:         compat ldap
- 
-hosts:          files dns 
-networks:       files 
- 
-protocols:      db files 
-services:       db files 
-ethers:         db files 
-rpc:            db files 
- 
-netgroup:       nis 
 </code> </code>
  
Line 51: Line 99:
  
 # The location at which the LDAP server(s) should be reachable. # The location at which the LDAP server(s) should be reachable.
-uri ldaps://ldap.local.jamgo.org:636+uri ldaps://ldap.local.example.org:636
  
 # The search base that will be used for all queries. # The search base that will be used for all queries.
 base ou=people,dc=example,dc=com base ou=people,dc=example,dc=com
 +base ou=groups,dc=example,dc=com
  
 # The LDAP protocol version to use. # The LDAP protocol version to use.
Line 70: Line 119:
  
   sudo /etc/init.d/nslcd restart   sudo /etc/init.d/nslcd restart
 +
 +6. Probamos:
 +
 +Para ver los usuarios del LDAP que no estén en /etc/passwd:
 +  getent passwd
 +Probamos de conectar:
 +  ssh -l user1 servidor1.example.com
 +
 +=== Método 2 ===
 +Actualmente se configura al instalar el paquete:
 +  #apt-get install libpam-ldapd
 +Ponemos el servidor de LDAP, el dominio (por ejemplo dc=matarosensefils,dc=net) y marcamos los servicios:
 +  passwd
 +  group
 +  shadow
 +
 +====== sudo como grupo LDAP ======
      
-6. (OpenLDAP) Nos aseguramos que tenemos una cuenta similar a esta:+Seguimos el ejemplo anterior, y ahora queremos: 
 + 
 +* Crear un grupo en LDAP que se llame por ejemplo "ldapsudo"\\
  
 <code> <code>
-dn: cn=user1,ou=people,dc=example,dc=com +# LDIF Export for cn=ldapsudo,ou=groups,dc=jamgo,dc=org 
-cnuser1 +# Server (ldap.local.jamgo.org) 
-gidnumber500 +# Search Scopesub 
-givennameName +# Search Filter(objectClass=*) 
-homedirectory/home/user1 +# Total Entries
-loginshell: /bin/sh +# 
-objectclassinetOrgPerson +# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on August 24, 2015 8:36 pm 
-objectclass: posixAccount+# Version: 1.2.3 
 + 
 +version: 1 
 + 
 +# Entry 1: cn=ldapsudo,ou=groups,dc=jamgo,dc=org 
 +dn: cn=ldapsudo,ou=groups,dc=jamgo,dc=org 
 +cn: ldapsudo 
 +gidnumber: 10003 
 +memberuid: user1.surename1 
 +memberuiduser2.surename2 
 +objectclass: posixGroup
 objectclass: top objectclass: top
-sn: Surename 
-uid: user1 
-uidnumber: 1001 
-userpassword: {MD5}MD5hashedpassword 
 </code> </code>
  
-7Probamos:+* Que ese grupo sea el que determine que un usuario pertenece al selecto grupo de los "sudoers" 
 + 
 +1(Necesario en Ubuntu) Asignar una contrasenya al usuario "root": 
 + 
 +  sudo passwd 
 +   
 +2. Instalar paquetes: 
 + 
 +  sudo aptitude install sudo-ldap 
 +   
 +**Nota 1**: instala como dependencia "nscd", que al cachear usuarios es mejor detener para hacer pruebas\\ 
 + 
 +**Nota 2**: modifica el archivo /etc/nsswitch.conf y le anyade la siguiente linea: 
 + 
 +  sudoers:        files ldap 
 + 
 +3. Convertirse en root: 
 + 
 +  su - 
 +   
 +4. Editar archivo sudoers: 
 + 
 +  visudo 
 +   
 +5. Dejar la linea asi: 
 + 
 +  %ldapsudo       ALL=(ALL:ALL) ALL 
 + 
 +6. (Comprobar) Creo que es necesario cerrar todas las sesiones abiertas y ya se puede comprobar 
 + 
 +====== Crear directorio /home al hacer primer login ====== 
 + 
 +https://wiki.debian.org/LDAP/PAM 
 + 
 +Requisito: tener instalado el paquete **libpam-ldapd** 
 + 
 +1. Editar: 
 + 
 +  sudo cp /etc/pam.d/common-session /etc/pam.d/common-session.bak 
 +  sudo vim /etc/pam.d/common-session 
 +   
 +Con la siguiente linea: 
 + 
 +  session     required      pam_mkhomedir.so skel=/etc/skel umask=0022 
 +   
 +====== SSH solo a los miembros de un grupo ====== 
 + 
 +https://wiki.debian.org/LDAP/PAM 
 + 
 +**TODO**: hacer que funcione con grupos LDAP de tipo  "posixGroup" en lugar de "nisNetgroup" 
 + 
 +**NOTA**: mientras estamos haciendo pruebas nos aseguramos de que el demonio 'nscd' esta parado 
 + 
 +0. (Servidor SSH) Instalar libpam-modules (seguramente ya instalados): 
 + 
 +  sudo aptitude update; sudo aptitude install libpam-modules 
 + 
 +1. (Servidor LDAP) crear un grupo de tipo "nisNetgroup": 
 + 
 +<code> 
 +dn: cn=ldapssh,ou=groups,dc=example,dc=com 
 +cn: ldapssh 
 +description: Users allowed to login via SSH 
 +nisnetgrouptriple: (,user1,) 
 +objectclass: nisNetgroup 
 +objectclass: top 
 +</code> 
 + 
 +El usuario 'user1' es un usuario LDAP de tipo 'posixAccount' 
 + 
 +2. (Servidor SSH) Editamos: 
 + 
 +  sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.bak   
 +  sudo vim /etc/pam.d/common-auth 
 +   
 +Y dejamos la linea asi: 
 + 
 +  auth    required                        pam_access.so 
 +  auth    required                        pam_permit.so 
 + 
 +**NOTA**: si solo dejamos "pam_access.so" las tareas cron dejan de funcionar. Con esa configuracion los efectos en mi caso son los deseados: cron funciona y los usuarios que no son miembros del grupo LDAP (se hace mas adelante) no pueden iniciar sesion por SSH 
 + 
 +3. (Servidor SSH) Nos aseguramos que los [[http://linux.die.net/man/5/netgroup|netgroups]] de esta maquina se van a consultar tambien del servidor LDAP. Editamos: 
 + 
 +  sudo cp /etc/nsswitch.conf /etc/nsswitch.conf.bak 
 +  sudo vim /etc/nsswitch.conf 
 +   
 +Y dejamos la linea asi: 
 + 
 +  netgroup:       nis     ldap 
 + 
 +4. (Servidor SSH) Comprobamos que los netgroup tambien los toma del servidor LDAP: 
 + 
 +  sudo getent netgroup ldapssh 
 + 
 +Salida esperada: 
 + 
 +  ldapssh              ( ,user1,) 
 + 
 +5. (Servidor SSH) Especificamos quien puede acceder y quien no. En este caso damos acceso al usuario local 'localuser' y a los miembros del **netgroup** (ojo, ni 'posixGroup' de LDAP ni grupos locales) llamado 'ldapssh': 
 + 
 +  sudo cp /etc/security/access.conf /etc/security/access.conf.bak 
 +  sudo vim /etc/security/access.conf 
 +   
 +Con el siguiente contenido: 
 + 
 +<code> 
 ++ : @ldapssh localuser : ALL 
 +- : ALL : ALL 
 +</code> 
 + 
  
-  ssh -l user1 servidor1.example.com 
informatica/linux/ssh_contra_ldap.txt · Last modified: 2015/08/24 19:35 by jose