Configurar servidor de autenticacion usando YaST

Saltar a: navegación, buscar
Icon-usage.png
Las personas encargadas de la edición de esta página consideran que aún necesario efectuar cambios, quizás importantes, en la misma.

Introducción

"La autenticación es el acto o proceso para el establecimiento o confirmación de algo (o alguien) como real. La autenticación de un objeto puede significar (pensar) la confirmación de su procedencia, mientras que la autenticación de una persona a menudo consiste en verificar su identidad"
 --https://es.wikipedia.org/wiki/Autenticación

Esta es un receta para iniciar el servidor de autenticación, lo mas seguro posible con las herramientas que provee el sistema, para mas información consulte el manual openSUSE 42.2 Security Guide

¿Qué se requiere?

  • Instalar openSUSE 42.2 en modo servidor (obligatorio!), con openssh activado y puerto de openssh abierto, Para pruebas recomiendo VirtualBox una maquina openSUSE virtual requiere 1 Giga byte de ram, después de instalada la maquina, la memoria ram de la maquina virtual en modo texto se puede reducir hasta unos 300-400 mega bytes de ram, la tarjeta de red NO PUEDE ESTAR CONECTADA A NAT, utilice el modo "red interna" o "adaptador puente", en el modo "red interna" deberá hacer una de estas dos cosas, o poner direcciones estáticas a el servidor y los clientes, o configurar un servidor dhcp para asignar direcciones a los clientes
  • Manejo de la herramienta YaST.
  • Manejo de la consola de comandos
  • Manejo de editores de consola de comandos tipo vi | nano | pico ...etc.

Pasos previos

  • El ordenador/computador en el que se va a instalar el servidor de autenticación debe poseer un nombre de dominio completo (Fully Qualified Domain Name o FQDN),
  • Debe usar Wiked para el manejo de tarjetas de red
  • Debe asignarle una dirección estática, por ejemplo 192.168.1.10
  • Preferiblemente el nombre del servidor resuelto en un DNS local... para configurar un dns local sugiero el siguiente video Configuración ddns + dhcp usando la herramienta YaST de openSUSE). en youtube hay muchos videos explicativos de como hacer esto, el anterior es uno de ellos
  • Si no desea configurar un DNS, Asigne un nombre a la máquina. Aquí entra la herramienta YaST --> Sistemas --> Ajustes de Red-->Nombre de Host/DNS. Puede asignar el nombre que quiera, para efectos de este tutorial es srv01.antiquitera.site.(esto es equivalente a editar el archivo /etc/hosts y colocar una entrada 192.168.1.10 srv01.antiquitera.site), adicionalmente en cada cliente deberá editar el archivo /etc/hosts y agregar una entrada para el servidor de autenticación por ejemplo 192.168.1.10 srv01.antiquitera.site

Screenshot 20161212 124313.png

Enter en Aceptar

Configuración servidor de autenticación

Certificados X.509

Necesitamos Certificados. O se compran o utiliza la siguiente receta Creacion de certicados autofirmados usando YaST
Adicionalmente debe exportar a los clientes el certificado autofirmado, si uso la receta anterior, siga el siguente procedimiento

srv01:~ # yast ca_mgm 

Ingrese por la Sub CA Root --> Introducir CA --> Introducir contraseña --> Aceptar
Screenshot 20161228 233021.png
Certificados --> Exportar --> Exportar a Fichero
Screenshot 20161228 233059.png
Seleccione: Solo el certificado en formato PEM --> Ingrese la Contraseña del certificado --> e introduzca la ruta donde se almacenara el certificado --> Finalice con Enter en Aceptar
Screenshot 20161228 233510.png
Este archivo debe ser copiado en los clientes una forma segura de hacerlo es con scp

srv01:~ # scp /home/jzea/YaST-CA.pem  root@client1.antiquitera.site:/etc/pki/trust/anchors/YaST-CA.pem

Para un cliente openSUSE es conveniente que el archivo se copie con ese nombre YaST-CA.pem en esa ruta /etc/pki/trust/anchors esa es la ruta y el nombre de archivo de certificado que openSUSE utiliza de forma predeterminada

Software necesario

Instale mediante Yast--> Instalar/desinstalar-->Buscar frase-->yast2-auth-server o bien en la línea de comandos como root ejecute:</tt>.

srv01:/home/jzea# zypper in yast2-auth-server

Reinicie YaST, en el apartado Servicios de red debe aparecer el icono Servidor de autenticación

Screenshot 20161213 133056.png

Configuración servidor de autenticación

Enter en Servidor de autenticación
Al ejecutar el servidor de autenticación, este inicia instalando el software necesario..
Enter en Instalar

En la pantalla de Ajustes generales seleccionamos iniciar el servidor LDAP, Enter en Si y en Ajustes del cortafuegos,apartado Configuración de cortafuegos para SUSEfirewall2, Enter en Puerto abierto en el cortafuegos

Screenshot 20161213 133914.png

Enter en Siguiente

En Tipo de servidor, enter en Servidor autónomo

Screenshot 20161213 133931.png

Enter en Siguiente

Si realizo el procedimiento de creación de certificados propuesto en Certificados_X.509 no hay nada mas que hacer, si realizo sus propios certificados usando en la línea de comandos openssl o GNUTLS , introduzca las rutas a sus certificados

Screenshot 20161213 134007.png

Enter en Siguiente

En la pantalla Configuración básica de la base de datos escribimos la contraseña del Administrador de Ldap en el campo Contraseña del administrador LDAP y repetimos la misma contraseña en Validar contraseña, para esto utilice letras en mayúsculas y minúsculas y números, no utilice caracteres acentuados ni símbolos, y adicionalmente no introduzca nada trivial

Screenshot 20161213 134037.png

Enter en Siguiente

En Autenticación kerberos, apartado Habilitar la autenticación kerberos enter en Si, inmediatamente se debe instalar software adicional, de enter en Instalar

Screenshot 20161213 134101.png

Enter en Siguiente

En la pantalla Resumen de configuración de servidor de autenticación revise el resumen

Screenshot 20161213 134158.png

Enter en Terminar

Con esto se finaliza la configuración muy básica de un servidor de Autenticación

Retoques manuales

Los servicios involucrados son slapd.service, krb5kdc.service, y kadmind.service

srv01:/usr # systemctl status slapd.service 
● slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
   Active: active (running) since mar 2016-12-13 13:42:08 COT; 17min ago
 Main PID: 20775 (slapd)
    Tasks: 7 (limit: 512)
   CGroup: /system.slice/slapd.service
           └─20775 /usr/sbin/slapd -h ldap:///  ldapi:/// -F /etc/openldap/slapd.d -u ldap -g ldap -o slp=off 
dic 13 13:42:07 srv02.antiquitera.site systemd[1]: Starting OpenLDAP Server Daemon...
dic 13 13:42:07 srv02.antiquitera.site slapd[20750]: @(#) $OpenLDAP: slapd 2.4.44 $
                                                           opensuse-buildservice@opensuse.org
dic 13 13:42:08 srv02.antiquitera.site slapd[20775]: slapd starting
dic 13 13:42:08 srv02.antiquitera.site start[20750]: Starting ldap-server
dic 13 13:42:08 srv02.antiquitera.site systemd[1]: Started OpenLDAP Server Daemon.


srv01:/usr # systemctl status krb5kdc.service 
● krb5kdc.service - Kerberos 5 KDC
   Loaded: loaded (/usr/lib/systemd/system/krb5kdc.service; enabled; vendor preset: disabled)
   Active: active (running) since mar 2016-12-13 13:42:10 COT; 17min ago
 Main PID: 20834 (krb5kdc)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/krb5kdc.service
           └─20834 /usr/lib/mit/sbin/krb5kdc -P /var/run/krb5kdc.pid 
dic 13 13:42:10 srv02.antiquitera.site systemd[1]: Starting Kerberos 5 KDC...
dic 13 13:42:10 srv02.antiquitera.site systemd[1]: Started Kerberos 5 KDC.


srv01:/usr # systemctl status kadmind.service 
● kadmind.service - Kerberos 5 Password-changing and Administration
   Loaded: loaded (/usr/lib/systemd/system/kadmind.service; enabled; vendor preset: disabled)
   Active: active (running) since mar 2016-12-13 13:42:11 COT; 17min ago
 Main PID: 20878 (kadmind)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/kadmind.service
           └─20878 /usr/lib/mit/sbin/kadmind -P /var/run/kadmind.pid 
dic 13 13:42:11 srv02.antiquitera.site systemd[1]: Starting Kerberos 5 Password-changing and Administration...
dic 13 13:42:11 srv02.antiquitera.site systemd[1]: Started Kerberos 5 Password-changing and Administration.

Revise el archivo encargado de arrancar el demonio kadmind.service

srv01:/usr # cat /usr/lib/systemd/system/kadmind.service
[Unit]
Description=Kerberos 5 Password-changing and Administration
After=network.target
ConditionPathExists=!/var/lib/kerberos/krb5kdc/kpropd.acl

[Service]
Type=forking
PIDFile=/var/run/kadmind.pid
EnvironmentFile=-/etc/sysconfig/kadmind
ExecStart=/usr/lib/mit/sbin/kadmind -P /var/run/kadmind.pid $KADMIND_ARGS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

La línea 3 debe quedar

After=network.target slapd.service

Sin este cambio en el siguiente arranque del servidor, el servicio kadmind.service no iniciara, luego de realizar el cambio no olvide ejecutar

systemctl daemon-reload 

Para que el sistema tome el cambio

Creación de usuarios y grupos

Configuración de sssd, modulo YaST auth-client

Inicie ejecutando desde la línea de comandos

srv01:/etc/sssd # yast auth-client

Screenshot 20161218 105254.png
Cambiar configuración --> Seleccionamos las opciones: Permitir inicio de sesión de usuarios de dominio --> Crear directorio --> Usuarios --> Grupos --> y damos enter en la opción de Unirse al dominio
Screenshot 20161218 110013.png
Iniciamos introduciendo: nombre de dominio (en el ejemplo antiquitera.site) --> ¿Qué servicio proporciona datos de identidad, como nombres de usuarios y pertenencia a grupos? --> Servicio de directorio genérico (LDAP) --> en la sección ¿Qué servicio se ocupa de la autenticación de usuarios? --> seleccione la opción: Servicio Kerberos genérico --> y la opción: Habilitar el dominio

Screenshot 20161218 111509.png
Enter en Aceptar
Iniciamos introduciendo en Dominio Kerberos (p. ej., EJEMPLO.COM) nuestro dominio Kerberos en el ejemplo ANTIQUITERA.SITE este nombre va en mayúsculas, los parámetros:
-Almacenar credenciales en caché para uso sin conexión
-Tratar los nombres de usuario y grupo distinguiendo mayúsculas de minúsculas.
-Leer todas las entidades de la base de datos del sistema secundario (aumentar la carga del servidor)
son opcionales, en Dirección IP o nombres de host de servidores de Kerberos (separados por comas) de la dirección del servidor kerberos, en el ejemplo srv01.antiquitera.site, Tipo de esquema LDAP no hay motivos para cambiarlo, deje esta elección, DN base para búsqueda LDAP en el ejemplo dc=antiquitera,dc=site, Validar certificación del servidor en sesión LDAP TLS, seleccione Allow y URI (ldap://) de servidores LDAP (separados por comas), la dirección del servidor (ldap y kerberos pueden estar en servidores separados, en el ejemplo están en el mismo servidor ldap://srv01.antiquitera.site, finalmente no seleccione Específico de Active Directory) Usar atributo de grupos de testigos si está disponible

Screenshot 20161218 194548.png

Enter en Aceptar

Después de esto regresa a la pantalla de Gestionar inicio de sesión de usuarios de dominio

Screenshot 20161218 202641.png

Enter en Aceptar


Screenshot 20161218 203608.png

Enter en Terminar

Nota-- Básicamente este es mismo procedimiento que hay que hacer en los clientes que se conectarán al servidor de autenticación , para esto utilice yast en su entorno gráfico favorito

Configuración de valores de creación de usuarios y grupos YaST users

Este proceso se realiza solo una vez

Ejecutamos en la línea de comandos

srv01:~ # yast users

Iniciamos ingresando por Opciones avanzadas seleccionamos Configuración de usuarios y grupos ldap

Screenshot 20161218 204817.png

Enter en Configurar las opciones de gestión de usuarios, luego de esto introducimos la Contraseña del servidor LDAP y damos enter en Aceptar

Screenshot 20161218 210547.png

En esta pantalla cambiamos los valores de suseMinUniqueId' por 10000 y suseNextUniqueId por 10000

Screenshot 20161218 211628.png

luego cambiamos en Modulo de configuración de groupconfiguration a userconfiguration y cambie los valores suseMaxPasswordLength a 20, suseMinUniqueId a 10000 y suseNextUniqueId a 10000

suseMaxPasswordLength es el número máximo de caracteres que tendrán las contraseñas en la base de datos de LDAP, si necesita algo mas largo incremente el numero, suseMinUniqueId es el numero inicial a partir de cual se crearan los números de identificación id de los usuarios/grupos ldap, si dejamos el valor de 1000 los usuarios/grupos LDAP compartirán los mismos números de identificación con los usuarios/grupos normales (que también inician en el numero 1000)

Screenshot 20161218 212302.png

Finalizamos con enter en Aceptar Esto nos regresa a la pantalla de Ajustes de administración LDAP damos enter en Aceptar

Creación de usuarios y grupos

Crear usuarios y grupos en el servidor de autenticación es igual que crearlos para nuestra maquina openSUSE con la herramienta YaST, solo seleccione Definir filtro y en el menú seleccione Usuarios LDAP o Grupos LDAP, dependiendo de la necesidad..

Screenshot 20161218 214507.png

el resto de la creación es igual que usuarios normales o grupos normales..

Pruebas

Cree un usuario, por ejemplo Juan Zea, jzea despues de creado en la línea de comandos como root ejecute slapcat

srv01:~ # slapcat

debe aparecer al final algo muy similar a lo siguiente

dn: uid=jzea,ou=people,dc=antiquitera,dc=site
cn: Juan Zea
gidNumber: 100
givenName: juan
homeDirectory: /home/jzea
loginShell: /bin/bash
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
sn: Zea
uid: jzea
uidNumber: 10001
userPassword:: e3NzaGF9MmI3dGY2aklaMWNtK3llRy9HSFNNN2NZUnVKU1NGaFlTQT09
structuralObjectClass: inetOrgPerson
entryUUID: bb5e0122-59e2-1036-8946-579cc4fd34d4
creatorsName: cn=Administrator,dc=antiquitera,dc=site
createTimestamp: 20161219025815Z
entryCSN: 20161219025815.835562Z#000000#000#000000
modifiersName: cn=Administrator,dc=antiquitera,dc=site
modifyTimestamp: 20161219025815Z

dn: krbPrincipalName=jzea@ANTIQUITERA.SITE,cn=ANTIQUITERA.SITE,cn=krbContain
 er,dc=antiquitera,dc=site
krbLoginFailedCount: 0
krbPrincipalName: jzea@ANTIQUITERA.SITE
krbPrincipalKey:: MIIBTKADAgEBoQMCAQGiAwIBAaMDAgEBpIIBNDCCATAwVKAHMAWgAwIBAK
 FJMEegAwIBEqFABD4gAPxWA8RvgdFMaMt9ojLVFL3qKBUhJS2olfrLmxf3peam8Tx2nJPV+0XoN
 PCFr9amaLKiZKMWC5XXw1oYTzBEoAcwBaADAgEAoTkwN6ADAgERoTAELhAAHi+w5itXxFD0xKzp
 u5l2/viNoFewwhil4CA7UD52660QrCJgrvQGuB7NaT8wTKAHMAWgAwIBAKFBMD+gAwIBEKE4BDY
 YANypJF/r0OVjRAAK1di3CuT9ZKaSm3qQMO6Na1R2WXk7QlQTRgl6w6P9NyvGGHln6HaVhpQwRK
 AHMAWgAwIBAKE5MDegAwIBF6EwBC4QAERyma/rmQ66XRr3RH85sBrpQYKHYwhnRJ02L+TxEINQ9
 U6Yi83t6ial8jJ7
krbLastPwdChange: 20161219025817Z
krbExtraData:: AALJTFdYcm9vdC9hZG1pbkBBTlRJUVVJVEVSQS5TSVRFAA==
krbExtraData:: AAgBAA==
objectClass: krbPrincipal
objectClass: krbPrincipalAux
objectClass: krbTicketPolicyAux
structuralObjectClass: krbPrincipal
entryUUID: bc4bda46-59e2-1036-8947-579cc4fd34d4
creatorsName: cn=Administrator,dc=antiquitera,dc=site
createTimestamp: 20161219025817Z
entryCSN: 20161219025817.394397Z#000000#000#000000
modifiersName: cn=Administrator,dc=antiquitera,dc=site
modifyTimestamp: 20161219025817Z 


que son tanto el usuario LDAP, como el objeto de kerberos del usuario, si solo aparece lo primero, y no lo segundo, revise todo el procedimiento...

Adicionales

El servidor de autenticación ya debe funcionar, vamos a probar otras cosas adicionales, se requieren conocimientos de las herramientas del sistema

Archivo /etc/openldap/ldap.conf Servidor y clientes

El archivo /etc/openldap/ldap.conf tiene el siguiente contenido (cambia dependiendo de su configuración)

host localhost
base    dc=antiquitera,dc=site
binddn  cn=Administrator,dc=antiquitera,dc=site
tls_cacert      /etc/pki/trust/anchors/YaST-CA.pem
TLS_REQCERT   allow

en los clientes debe ser

URI ldap://srv01.antiquitera.site
base    dc=antiquitera,dc=site
binddn  cn=Administrator,dc=antiquitera,dc=site
tls_cacert      /etc/pki/trust/anchors/YaST-CA.pem
TLS_REQCERT   allow

En el cliente solo cambia la línea host localhost por URI ldap://srv01.antiquitera.site, o el nombre de su servidor LDAP, Adicionalmente si aun no lo ha hecho copie el archivo YaST-CA.pem que realizo en el paso Configurar_servidor_de_autenticacion_usando_YaST#Certificados_X.509, a cada cliente.. es muy util el comando scp para estos casos, algo muy parecido a:

client1:~ # scp root@srv01.antiquitera.site:/home/jzea/YaST-CA.pem /etc/pki/trust/anchors/YaST-CA.pem

Todos estos pasos son importantes para hacer funcionar autofs y los perfiles moviles Nota... esta paso puede ser obviado con una completa y correcta configuración de sssd, si no se incluye el archivo /etc/openldap/ldap.conf, instrucciones como ldapwhoami o ldapsearch no funcionan en el cliente

Instalación de openldap2-client

Iniciamos con la instalación de openldap2-client

srv01:~ # sudo zypper in openldap2-client

Esto instala las herramientas para manipular LDAP, ahora ingresamos con nuestro usuario jzea y ejecutamos ldapwhoami

jzea@srv01:~> ldapwhoami
ldap_sasl_interactive_bind_s: No such attribute (16)

Vemos que tal como esta nuestro servidor de autenticación, la instrucción no funciona, iniciamos consultando al servidor que mecanismos de autenticación admite

jzea@srv01:~> ldapsearch -h localhost -p 389 -x -b "" -s base -LLL supportedSASLMechanisms
dn:

jzea@srv01:~>

Instalación de Cyrus-sasl

Como root instalamos

srv01:/home/jzea # zypper in cyrus-sasl-crammd5 cyrus-sasl-digestmd5 cyrus-sasl-gssapi

y reiniciamos el servidor ldap

srv01:/home/jzea # systemctl restart slapd.service
srv01:/home/jzea # ldapsearch -h localhost -p 389 -x -b "" -s base -LLL supportedSASLMechanisms
dn:
supportedSASLMechanisms: GSSAPI
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: CRAM-MD5

nuevamente como Juan Zea ejecutamos ldapwhoami

jzea@srv01:~> ldapwhoami
SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Local error (-2)
       additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (Server ldap/srv01.antiquitera.site@ANTIQUITERA.SITE not found in Kerberos database)

Con esa información creamos los principal ldap/srv01.antiquitera.site y host/srv01.antiquitera.site, y creamos el archivo krb5.keytab, ejecutamos como root, kadmin.local (instrucciones en rojo)

srv01:/home/jzea # kadmin.local
Authenticating as principal jzea/admin@ANTIQUITERA.SITE with password.
kadmin.local:  add_principal -randkey host/srv01.antiquitera.site
WARNING: no policy specified for host/srv01.antiquitera.site@ANTIQUITERA.SITE; defaulting to no policy
Principal "host/srv01.antiquitera.site@ANTIQUITERA.SITE" created.
kadmin.local:  add_principal -randkey ldap/srv01.antiquitera.site
WARNING: no policy specified for ldap/srv01.antiquitera.site@ANTIQUITERA.SITE; defaulting to no policy
Principal "ldap/srv01.antiquitera.site@ANTIQUITERA.SITE" created.
kadmin.local:  ktadd -k /etc/krb5.keytab host/srv01.antiquitera.site
Entry for principal host/srv01.antiquitera.site with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/srv01.antiquitera.site with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/srv01.antiquitera.site with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/srv01.antiquitera.site with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
kadmin.local:  ktadd -k /etc/krb5.keytab ldap/srv01.antiquitera.site
Entry for principal ldap/srv01.antiquitera.site with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal ldap/srv01.antiquitera.site with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal ldap/srv01.antiquitera.site with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal ldap/srv01.antiquitera.site with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
kadmin.local:  ktadd -k /etc/krb5.keytab krbtgt/ANTIQUITERA.SITE@ANTIQUITERA.SITE
Entry for principal krbtgt/ANTIQUITERA.SITE@ANTIQUITERA.SITE with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal krbtgt/ANTIQUITERA.SITE@ANTIQUITERA.SITE with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal krbtgt/ANTIQUITERA.SITE@ANTIQUITERA.SITE with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal krbtgt/ANTIQUITERA.SITE@ANTIQUITERA.SITE with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
kadmin.local: quit

Cambie el propietario del archivo /etc/krb5.keytab de root:root a ldap:ldap

srv01:/home/jzea # chown ldap:ldap /etc/krb5.keytab

Ingrese nuevamente con el usuario Juan Zeajzea y ejecute ldapwhoami

jzea@srv01:~> ldapwhoami
SASL/GSSAPI authentication started
SASL username: jzea@ANTIQUITERA.SITE
SASL SSF: 56
SASL data security layer installed.
dn:uid=jzea,cn=gssapi,cn=auth 

La última pieza del rompecabezas, que después de muchas vueltas estaba en manual de seguridad de openSUSE, copie las siguientes líneas en el archivo seg-sasl.ldif

dn: cn=config
add: olcAuthzRegexp
olcAuthzRegexp: uid=(.*),cn=GSSAPI,cn=auth uid=$1,ou=people,dc=antiquitera,dc=site

y ejecute en la línea de comandos como root

srv01:~ # ldapmodify -Y EXTERNAL -H ldapi:/// -f seg-sasl.ldif

Nuevamente ejecute ldapwhoami como un usuario ldap-kerberos

jzea@smb04:~> ldapwhoami
SASL/GSSAPI authentication started
SASL username: jzea@ANTIQUITERA.SITE
SASL SSF: 56
SASL data security layer installed.
dn:uid=jzea,ou=people,dc=antiquitera,dc=site

También puede ejecutar comandos como ldapseach sin parámetros

SUDO en LDAP

Se instalara sudo en LDAP, y se dara acceso a sudo a todos los usuarios del grupo cn=wheel,ou=group,dc=antiquitera,dc=site

Configuración de servidor

1. Debe agregar el esquema de sudo, sudo.schema, esto se realiza con yast auth-server-->Configuración-->Archivo de esquema-->añadir-->nombre de fichero-->sudo.schema
2. Debe agregar un índice con yast auth-server-->Configuración-->dc=antiquitera,dc=site-->+-->Configuración de índices-->Añadir-->Atributtetypes-->sudoUser-->Igualdad-->Aceptar-->Aceptar
3. Modificar el archivo /etc/sudoers.. como root ejecute visudo (o edite con su editor favorito el archivo /etc/sudoers)

srv01:/etc # visudo

4. Modilfique la línea Defaults secure_path aproximadamente la línea 38

Defaults secure_path="/usr/sbin:/usr/bin:/sbin:/bin"

5. Quite las comillas, debe quedar

Defaults secure_path=/usr/sbin:/usr/bin:/sbin:/bin

6. Modifique esta línea (aproximadamente la línea 43)

Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE"

7. Quite los espacios antes y después del igual, estos espacios producen un error en la ejecución de sudo en LDAP, copie y pegue el siguiente contenido

Defaults env_keep="LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER"

8. Las líneas (aproximadamente la línea 63 y 64)

Defaults targetpw   # ask for the password of the target user i.e. root
ALL     ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!

9. Deben quedar comentadas

#Defaults targetpw   # ask for the password of the target user i.e. root
#ALL     ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!

10. Y la línea (aproximadamente la línea 76)

# %wheel ALL=(ALL) ALL

11. Debe quedar así

%wheel ALL=(ALL) ALL

12. Guarde los cambios
13. Almacene y modifique según su configuración las siguientes líneas con el nombre sudo.ldif

 dn: ou=SUDOers,dc=antiquitera,dc=site
 objectClass: top
 objectClass: organizationalUnit
 ou: SUDOers

14. Ejecute el siguiente comando

user1@srv01:~> ldapadd -x -f sudo.ldif -h localhost -D cn=Administrator,dc=antiquitera,dc=site -W
Enter ldap password:
adding new entry "ou=SUDOers,dc=antiquitera,dc=site"

15. Ahora como root ejecute (su)

srv01:/home/jzea # SUDOERS_BASE=ou=SUDOers,dc=antiquitera,dc=site
srv01:/home/jzea # export SUDOERS_BASE
srv01:/home/jzea # sudoers2ldif /etc/sudoers > /tmp/sudoers.ldif 
srv01:/home/jzea # ldapadd -f /tmp/sudoers.ldif -h localhost -D cn=Administrator,dc=antiquitera,dc=site -W -x
Enter ldap password:
adding new entry "dn: cn=defaults,ou=SUDOers,dc=antiquitera,dc=site"
adding new entry "dn: cn=root,ou=SUDOers,dc=antiquitera,dc=site"
adding new entry "dn: cn=%wheel,ou=SUDOers,dc=antiquitera,dc=site"

16. Ahora cree un grupo wheel en ldap, como root ejecute yast users-->Grupos->Definir filtros-->Usuarios LDAP-->Contraseña de servidor LDAP-->Aceptar-->Añadir-->Nombre de grupo (wheel)-->Miembros de grupo(seleccionar miembros) -->Aceptar-->Aceptar

Configuración de cliente

1. En el cliente ejecute yast Auth-Client(user logon management)-->Cambiar Configuración-->Seleccione Comandos de superusuario (sudo)-->Opciones de dominio-->antiquitera.site-->opciones extendidas-->Filtro de nombres-->digite sudo---> seleccione sudo_provider-->Añadir-->seleccione "ldap_provider"-->Añadir-->ldap-->Aceptar-->Opciones extendidas-->Filtro de nombres-->digite sudo-->Seleccione "ldap_sudo_search_base"-->Añadir-->ou=SUDOers,dc=antiquitera,dc=site-->Aceptar-->Aceptar-->Terminar

O hagalo directamente sobre el archivo /etc/sssd/sssd.conf del cliente (haga esto con sumo cuidado)..

[sssd]
config_file_version = 2
services = pam,nss,sudo
domains = antiquitera.site

[pam]

[nss]

[sudo]

[domain/antiquitera.site]
id_provider = ldap
auth_provider = krb5
ldap_schema = rfc2307bis
enumerate = false
cache_credentials = true
case_sensitive = true
ldap_use_tokengroups = false
ldap_uri = ldap://srv01.antiquitera.site
ldap_search_base = dc=antiquitera,dc=site
ldap_tls_reqcert = allow
krb5_server = srv01.antiquitera.site
krb5_realm = ANTIQUITERA.SITE
sudo_provider = ldap
ldap_sudo_search_base = ou=SUDOers,dc=antiquitera,dc=site

y edite el archivo /etc/nsswitch.conf.. adicione la línea sudoers debe quedar algo parecido a esto

# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
#       compat                  Use compatibility setup
#       nisplus                 Use NIS+ (NIS version 3)
#       nis                     Use NIS (NIS version 2), also called YP
#       dns                     Use DNS (Domain Name Service)
#       files                   Use the local files
#       [NOTFOUND=return]       Stop searching if not found so far
#
# For more information, please read the nsswitch.conf.5 manual page.
#
# passwd: files nis
# shadow: files nis
# group:  files nis
passwd: compat sss
group:  compat sss
hosts:  files mdns_minimal [NOTFOUND=return] dns
networks:       files dns
services:       files
protocols:      files
rpc:    files
ethers: files
netmasks:       files
netgroup:       files nis
publickey:      files
bootparams:     files
aliases:        files
sudoers:        sss

Si ejecuta sudo en un cliente con un usuario autenticado con permiso de SUDO (en el grupo wheel de LDAP) debe funcionar..

Perfiles moviles AUTOFS

Esto es un ejemplo de lo que se puede hacer con autofs

Configuración de AUTOFS en el servidor

1. Almacene y modifique según su configuración las siguientes líneas con el nombre autofs.ldif

dn: ou=AUTOFS,dc=antiquitera,dc=site
objectClass: organizationalUnit
ou: AUTOFS

dn: nisMapName=auto.master,ou=AUTOFS,dc=antiquitera,dc=site
objectClass: nisMap
nisMapName: auto.master

dn: cn=/home,nisMapName=auto.master,ou=AUTOFS,dc=antiquitera,dc=site
objectClass: nisObject
cn: /home
nisMapEntry: ldap:nisMapName=auto.home,ou=AUTOFS,dc=antiquitera,dc=site --timeout=60 --ghost
nisMapName: auto.master

dn: nisMapName=auto.home,ou=AUTOFS,dc=antiquitera,dc=site
objectClass: nisMap
nisMapName: auto.home

dn: cn=/,nisMapName=auto.home,ou=AUTOFS,dc=antiquitera,dc=site
objectClass: nisObject
cn: /
nisMapEntry: -fstype=nfs4,hard,intr,nodev,nosuid srv01.antiquitera.site:/home/&
nisMapName: auto.home

2. Ejecute el siguiente comando

srv01:~> ldapadd -x -f autofs.ldif -h localhost -D cn=Administrator,dc=antiquitera,dc=site -W
Enter ldap password:
adding new entry "ou=AUTOFS,dc=antiquitera,dc=site"
adding new entry "auto.master,ou=AUTOFS,dc=antiquitera,dc=site"
adding new entry "cn=/home, nisMapName=auto.home,ou=AUTOFS,dc=antiquitera,dc=site"
adding new entry "nisMapName=auto.home,ou=AUTOFS,dc=antiquitera,dc=site"
adding new entry "cn=/,nisMapName=auto.home,ou=AUTOFS,dc=antiquitera,dc=site"

Configuración de NFS en el servidor

Instalar en el servidor el paquete yast2-nfs-server

srv01:~> # zypper in yast2-nfs-server 
Loading repository data...                                                                   
Reading installed packages...                                                                
Resolving package dependencies...                                                             
 
The following 2 NEW packages are going to be installed:                                       
nfs-kernel-server yast2-nfs-server                                                          

The following recommended package was automatically selected:                                 
nfs-kernel-server                                                                           

2 new packages to install.                                                                    
Overall download size: 250.1 KiB. Already cached: 0 B. After the operation, additional 694.4 KiB
will be used.                                                                                 
Continue? [y/n/? shows all options] (y): y
Retrieving package yast2-nfs-server-3.1.9-1.2.noarch       (1/2), 118.2 KiB (214.7 KiB unpacked)
Retrieving: yast2-nfs-server-3.1.9-1.2.noarch.rpm ..........................[done (194.0 KiB/s)]
Retrieving package nfs-kernel-server-1.3.0-24.1.x86_64     (2/2), 131.9 KiB (479.7 KiB unpacked)
Retrieving: nfs-kernel-server-1.3.0-24.1.x86_64.rpm ........................[done (347.0 KiB/s)]
Checking for file conflicts: .............................................................[done]
(1/2) Installing: yast2-nfs-server-3.1.9-1.2.noarch ......................................[done]
(2/2) Installing: nfs-kernel-server-1.3.0-24.1.x86_64 ....................................[done]

Ejecute como root yast nfs_server-->Iniciar-->Puerto abierto en el cortafuegos-->habilitar NFSv4 (el resto dejelo como esta)-->Siguiente-->Añadir directorio-->/home-->Aceptar-->Añadir host-->Comodin de servidor--> Opciones -->rw,no_root_squash,sync,no_subtree_check-->Aceptar-->Terminar

No hay que hacer nada especial en la creación de usuarios y grupos

Configuración de cliente

Ejecute yast auth-client (User logon management)-->Cambiar configuración-->antiquitera.site-->Asignar unidades de red (automontaje)-->Opciones de dominio-->Opciones extendidas-->filtro de nombres-->escriba "auto"-->autofs-provider-->Añadir-->ldap-->Aceptar-->Opciones Extendidas-->escriba "auto"-->ldap_autofs_search_base-->ou=AUTOFS,dc=antiquitera,dc=site-->Aceptar
repita los pasos para estas variables
ldap_autofs_map_object_class nisMap
ldap_autofs_map_name nisMapName
ldap_autofs_entry_object_class nisObject
ldap_autofs_entry_key cn
ldap_autofs_entry_value nisMapEntry
y finalice con-->Aceptar-->Terminar

Configuración de clientes

Configurar_cliente_servidor_de_autenticacion_usando_YaST

Kerberos / NFS

para kerberos nfs es obligatorio configurar un servidor DDNS - DHCP como el sugerido en Configuración ddns + dhcp usando la herramienta YaST de openSUSE, hay 3 cosas que se deben cumplir en kerberos para que nfs de acceso a un directorio asegurado,

1. Debe existir el principal nfs/servidor@REALM
2. Debe existir el principal de la maquina cliente nfs/cliente@REALM
3. el usuario debe estar logueado user@REALM

Por que es necesario un servidor DDNS - DHCP...? al intentar realizar un mount

srv01:~ # mount -t nfs4 -o sec=krb5 srv01.antiquitera.site:/home  /mnt/ -vvv
mount.nfs4: timeout set for Mon Jan  9 11:01:57 2017
mount.nfs4: trying text-based options 'sec=krb5,addr=192.168.1.10,clientaddr=192.168.1.10

estas direcciones de servidor y de cliente por medio de resolucion inversa de nombre

srv01@kldap:~> nslookup 192.168.1.10
Server:         127.0.0.1
Address:        127.0.0.1#53

10.1.168.192.in-addr.arpa      name = srv01.antiquitera.site.

es con nombres que se hace la indagación de la existencia del principal tanto de servidor, como de cliente

Creación de principales

como root en el servidor ejecute kadmin.local (instrucciones en rojo) srv01:~ # kadmin.local

Authenticating as principal jzea/admin@ANTIQUITERA.SITE with password.
kadmin.local:  add_principal -randkey nfs/srv01.antiquitera.site
WARNING: no policy specified for nfs/srv01.antiquitera.site@ANTIQUITERA.SITE; defaulting to no policy
Principal "nfs/srv01.antiquitera.site@ANTIQUITERA.SITE" created.
kadmin.local:  add_principal -randkey nfs/client1.antiquitera.site
WARNING: no policy specified for nfs/client1.antiquitera.site@ANTIQUITERA.SITE; defaulting to no policy
Principal "nfs/client1.antiquitera.site@ANTIQUITERA.SITE" created.
kadmin.local:  ktadd -k /etc/krb5.keytab nfs/srv01.antiquitera.site
Entry for principal nfs/srv01.antiquitera.site with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal nfs/srv01.antiquitera.site with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal nfs/srv01.antiquitera.site with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal nfs/srv01.antiquitera.site with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
kadmin.local:  ktadd -k /etc/krb5.keytab nfs/client1.antiquitera.site
Entry for principal nfs/client1.antiquitera.site with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal nfs/client1.antiquitera.site with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal nfs/client1.antiquitera.site with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal nfs/client1.antiquitera.site with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
kadmin.local: quit

El principal de servidor nfs/srv01.antiquitera.site solo se debe crear una vez, y un principal para cada cliente, asegúrese que el nombre del principal y de cada cliente coincidan con su FQDN o nombre cualificado (use esta instrucción en el servidor como en los cliente)

srv01:~ # getent hosts $(hostname) | awk '{print $1; exit}' | xargs getent hosts | awk '{print $2}'

Debe exportar el archivo /etc/krb5.keytab a todos los clientes (con ayuda de scp)

NFS-server Kerberizado

Ejecute Yast nfs_server srv01: ~ # yast nfs_server Servidor NFS -->[x] Iniciar --> [X] Puerto de cortafuegos abierto --> [X] Habilitar NFSv4 --> Especificar Nombre de dominio NFSv4: --> antiquitera.site --> [x] Habilitar seguridad GSS --> Siguiente Screenshot 20170109 125936.png

--> Directorios --> /home --> Comodín del host --> * --> Opciones --> rw,no_subtree_check,no_root_squash,sec=krb5 --> Terminar

Screenshot 20170109 125959.png

Aparece un error (ignórelo)

al finalizar ejecute en el servidor (cualquier cambio en lo que se exporta hay que actualizar lo exportado)

srv01:~ # exportfs -va

los niveles de seguridad en el directorio exportado se establecen con ,sec=krb5, hay 4 niveles de seguridad

  • . sec=sys Es la opción de seguridad por defecto
  • . sec=krb5 Utiliza Kerberos V5 para autenticar usuarios
  • . sec=krb5i Utiliza Kerberos V5 para autenticar usuarios y ejecuta suma de integridad para las operaciones NFS para prevenir modificación no autorizada de datos (interesante)
  • . sec=krb5p Utiliza Kerberos para autenticar usuarios y ejecuta suma de integridad para las operaciones NFS , y cifrado de trafico NFS, es la opción mas segura y la que mas carga en servidor y cliente impone

Modificación de AUTOFS

con NFS kerberizado debe cambiar la entrada cn=/,nisMapName=auto.home,ou=AUTOFS,dc=antiquitera,dc=site el atributo nisMapEntry debe quedar así -fstype=nfs4,sec=krb5,hard,intr,nodev,nosuid srv01.antiquitera.site:/home/& Este cambio lo puede hacer con su editor de LDAP favorito uno muy bueno es Apache directory studio

SSH Single Sign ON

Conseguir esto es muy fácil... cree un principal host/servidor@REALM y un principal para cada estación | cliente host/cliente1@REALM...host/clientn@REALM, cree / modifique el archivo /etc/krb5.keytab y exporte este archivo a cada estación de trabajo, adicionalmente edite el archivo /etc/ssh/ssh_config y modifique estas dos líneas

#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no

deben quedar

  GSSAPIAuthentication yes
  GSSAPIDelegateCredentials yes

y edite el archivo /etc/ssh/sshd_config, modifique estas dos líneas

#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

deben quedar

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

reinicie el servicio ssh, tanto en el servidor, como en cada cliente

srv01:~ # systemctl restart sshd.service 

después de esto desde cualquier estación de trabajo en la línea de comandos con un usuario autenticado podrá hacer

mzea@client1:~> ssh clienteX

recuerde los nombres deben ser de tipo FQDN,

Registros DNS

Kerberos requiere unos registros especiales de dns, este es un ejemplo, debe ajustarlos a sus propios valores

_kerberos               TXT     "ANTIQUITERA.SITE"
_kerberos-adm._tcp      SRV     0 0 749 ns.
_kerberos               SRV     0 0 88 ns.
_kerberos-master        SRV     0 0 88 ns.
_kpasswd                SRV     0 0 464 ns.
_ldap._tcp              SRV     0 0 389 ns.

Por Hacer - To Do

Configuración de NTP

Para kerberos es .. obligatorio!!(y esto es mas importante que nada..).. pero esto esta documentado en cualquier cantidad de sitios.. y me da pereza...

Kerberos Autofs

Ya puestos en gastos...

Bibliografía

los poderosos manuales de openSUSE (son una maravilla)

y otras referencias que tome

Estos 3 son claves para proteger todo el trafico ldap


--jvelez (discusión) 17:35 27 dic 2016 (UTC) línea