Autenticación en máquinas linux mediante kerberos

https://wiki.debian.org/AuthenticatingLinuxWithActiveDirectory

Instalación y configuración de libpam-krb5

[logging]
        Default = FILE:/var/log/krb5.log
[libdefaults]
        default_realm =  DOMINIO.COM
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
        v4_instance_resolve = false
        v4_name_convert = {
                host = {
                        rcmd = host
                        ftp = ftp
                }
                plain = {
                        something = something-else
                }
        }
        fcc-mit-ticketflags = true
[realms]
        DOMINIO.COM = {
                kdc = server1.dominio.com
                kdc = server2.dominio.com
                admin_server = server1.dominio.com:88
                default_domain = dominio.com
        }
[domain_realm]
        .DOMINIO.COM = DOMINIO.COM
        DOMINIO.COM = DOMINIO.COM
[login]
        krb4_convert = true
        krb4_get_tickets = false

Prueba con kinit

Probamos nuestro usuario de pruebas contra el dominio:

kinit  usuario@dominio.com

Revisión de archivos de PAM

Por defecto, se crean las líneas de pam para aceptar krb5:

http://www.debian-administration.org/article/570/MIT_Kerberos_installation_on_Debian#PAM_configuration

Prueba con login

login usuario

en el log se debe ver algo como

tail -f /var/log/auth.log
Mar 17 13:15:14 puppettest login[20778]: pam_krb5(login:auth): user usuario authenticated as usuario@dominio.com

Pasos a seguir

Crear localmente los usuarios que van a usar su autenticación mediante kerberos.

Autenticación de apache con Directorio Activo. LDAP, NTLM

Queremos que una serie de máquinas con apache, usen el siguiente método de autenticación:

  1. Validar usuario en directorio activo
  2. Validar usuario local (si hay problemas con el directorio activo).

Instalamos los módulos de apache para aceptar ldap:

apt-get install -y libapache-authznetldap-perl  libapache-session-ldap-perl libapache2-mod-ldap-userdir

Activamos el módulo de ldap en apache

a2enmod authnz_ldap

Versión 1: Usuario válido en dominio

El excelente tutorial de adam.shand.net , nos propone una primera versión:
<Location /aplicacion1>
AuthType Basic
AuthBasicProvider ldap
AuthName "Restricted Directory"
require valid-user

AuthLDAPURL ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword
</Location>

Para probar la cadena de conexión, se puede usar Apache Directory Studio.

Versión 2: Usuario válido en dominio de un grupo concreto (member of)

Añadimos en el parámetro AuthLDAPURL, la consulta después de sub, para que coja los usuarios de un dominio concreto.

<Location /aplicacion1>
AuthType Basic
AuthBasicProvider ldap

AuthName "Restricted Directory"
require valid-user

AuthLDAPURL ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword
</Location>

Versión 3: Aceptar también usuarios locales

Cambiamos el comportamiento de la autenticación ldap, para que no sea la única opción, con AuthzLDAPAuthoritative off

Además, aceptamos también la configuración desde nuestro fichero local de usuarios

<Location /aplicacion1>
AuthType Basic
AuthName "Restricted Directory"
AuthBasicProvider ldap
require valid-user

# Configuracion contra directorio activo:
AuthLDAPURL
ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword

AuthzLDAPAuthoritative off

# Configuración local

AuthUserFile /etc/apache/.htpasswd
AuthGroupFile /dev/null

Para crear el archivo local de contraseñas en apache:

htpasswd -c .htpasswd user

 

Para editar las contraseñas de un usuario concreto:

 

htpasswd .htpasswd user

 

Versión 4: aceptando también ntlm

 

Para rizar el rizo, querríamos que acepte las credenciales de windows de forma directa, sin que el usuario tenga que introducir las credenciales.

Vamos a usar el módulo Apache2::AuthenNTLM

El problema es que no se verifica el grupo de dominio, cualquier usuario que exista en dominio, entra en el apache.

<Location /aplicacion1>
AuthType ntlm, Basic
AuthBasicProvider ldap
AuthName "Restricted Directory"
require valid-user

# Configuracion contra directorio activo:
AuthLDAPURL
ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword

AuthzLDAPAuthoritative off

# Configuración local
# Configuración ntlm:
# domain pdc bdc
# pdc: primary domain controller
# bdc: backup domain controller
PerlAddVar ntdomain “name_domain1 name_of_pdc1”
PerlAddVar ntdomain “other_domain pdc_for_domain bdc_for_domain”

PerlSetVar defaultdomain wingr1
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmdebug 1

AuthUserFile /etc/apache/.htpasswd
AuthGroupFile /dev/null

Versión 5: ntlm con módulo python

Legrandin  nos propone un módulo python para hacer más sencilla la integración con ntlm version 2.

El problema de este tipo de acceso, es que no permite autenticar sin el dominio. En caso de caida o aislamiento del dominio, no se puede recaer en los usuarios locales de nagios.

Existe opción de especificar grupos de dominios, aunque es experimental.

Instalar módulos que nos faltan:


sudo apt-get update
sudo apt-get install libapache2-mod-python python-crypto git
git clone https://github.com/Legrandin/PyAuthenNTLM2.git
cd PyAuthenNTLM2
sudo python setup.py install -f

La configuración de apache quedaría:

<Location /aplicacion1>
AuthType ntlm
AuthName "Restricted Directory"
require valid-user
# Configuración de autenticación ntlm:
PythonAuthenHandler pyntlm
PythonOption Domain adserver.domain.com
# pdc : Primary Domain Controller
PythonOption PDC 192.1.2.45
# bdc : Backup Domain controller.
PythonOption BDC 192.1.2.46
Require group grupo_dominio1,grupo_dominio2

Versión 6: libapache2-authenntlm-perl

Vamos a probar authenntlm-perl, que, según este tutorial es ridículamente fácil:

apt-get install libapache2-authenntlm-perl