[ Kerberos ] Kerberizando ssh

Introducción – ¿Qué es kerberos?

Kerberos es un protocolo de autenticación de redes creado por el MIT que permite a dos ordenadores en una red insegura demostrar su identidad mutuamente de manera segura.

En este tutorial vamos a ver como raalizar la configuración de kerberos en un sistema operativo debian wheezy.

Configuración

Primero comprobamos que todos los equipos del subdominio están definidos correctamente:

root@targaryen:/var/cache/bind# cat db.manuelluna.gonzalonazareno.org
$ORIGIN manuelluna.gonzalonazareno.org.
$TTL 86400 ; 1 day
@       IN      SOA       targaryen.manuelluna.gonzalonazareno.org. admin.manuelluna.gonzalonazareno.org. (
        1 ; serial
        21600 ; refresh (6 hours)
        3600 ; retry (1 hour)
        604800 ; expire (1 week)
        21600 ; minimum (6 hours)
)
@            IN      NS     targaryen.manuelluna.gonzalonazareno.org.
targaryen    IN      A      10.0.0.16
stark        IN      A      10.0.0.25

Comprobamos que tanto targaryen como stark, resuelven su propio FQDN correctamente.

root@targaryen:/var/cache/bind# hostname --fqdn
 targaryen.manuelluna.gonzalonazareno.org
root@stark:/home/debian# hostname --fqdn
 stark.manuelluna.gonzalonazareno.org

Instalamos el paquete «nptdate» en ambas máquinas para tener sincronizados los relojes:

# apt-get install ntpdate

Una vez instalado configuramos el mismo servidor de hora en ambas máquinas, para evitar errores, paramos el servicio y después lo iniciamos:

# service ntp stop
# ntpdate papion.gonzalonazareno.org
# service ntp start

Ahora procedemos a instalar kerberos en el servidor targaryen:

root@targaryen:/var/cache/bind# apt-get install krb5-kdc krb5-admin-server

Durante la instalación debemos introducir como dominio:

MANUELLUNA.GONZALONAZARENO.ORG

Y como servidor kerberos y  servidor administrativo:

targaryen.manuelluna.gonzalonazareno.org

Moficiamos el fichero «/etc/krb5kdc/kdc.conf« y quitamos el puerto 750:

[kdcdefaults]
 kdc_ports = 88

[realms]
 MANUELLUNA.GONZALONAZARENO.ORG = {
 database_name = /var/lib/krb5kdc/principal
 admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
 acl_file = /etc/krb5kdc/kadm5.acl
 key_stash_file = /etc/krb5kdc/stash
 kdc_ports = 88
 max_life = 10h 0m 0s
 max_renewable_life = 7d 0h 0m 0s
 master_key_type = des3-hmac-sha1
 supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-c$
 default_principal_flags = +preauth
 }

Ahora modificamos el fichero «/etc/default/krb5-kdc« y lo dejamos así:

KRB4_MODE=disable
RUN_KRB524D=false

El fichero debe «/etc/krb5.con tener el siguiente contenido:

[libdefaults]
        default_realm = MANUELLUNA.GONZALONAZARENO.ORG
[realms]
        MANUELLUNA.GONZALONAZARENO.ORG = {
               kdc = targaryen.MANUELLUNA.gonzalonazareno.org
               admin_server = targaryen.MANUELLUNA.gonzalonazareno.org
        }
[domain_realm]
        .MANUELLUNA.gonzalonazareno.org = MANUELLUNA.GONZALONAZARENO.ORG
        MANUELLUNA.gonzalonazareno.org = MANUELLUNA.GONZALONAZARENO.ORG

Una vez modificado, ejecutamos el siguiente comando para definir nuestro nuevo «realm«:

root@targaryen:/home/debian# krb5_newrealm

Nos pedirá una contraseña y una vez termine el proceso los servicios se reiniciarán automáticamente.

Usamos «kadmin.local» ya que sólo podemos acceder desde local y creamos un nuevo usuario:

kadmin.local: add_principal root/admin@MANUELLUNA.GONZALONAZARENO.ORG
WARNING: no policy specified for root/admin@MANUELLUNA.GONZALONAZARENO.ORG; defaulting to no policy
Enter password for principal "root/admin@MANUELLUNA.GONZALONAZARENO.ORG":
Re-enter password for principal "root/admin@MANUELLUNA.GONZALONAZARENO.ORG":
Principal "root/admin@MANUELLUNA.GONZALONAZARENO.ORG" created.

Creamos el usuario «usuario» para hacer las pruebas correspondientes.

kadmin.local:  add_principal usuario@MANUELLUNA.GONZALONAZARENO.ORG
WARNING: no policy specified for usuario@MANUELLUNA.GONZALONAZARENO.ORG; defaulting to no policy
Enter password for principal "usuario@MANUELLUNA.GONZALONAZARENO.ORG":
Re-enter password for principal "usuario@MANUELLUNA.GONZALONAZARENO.ORG":
Principal "usuario@MANUELLUNA.GONZALONAZARENO.ORG" created.

Ahora debemos modificar el fichero » /etc/krb5kdc/kadm5.acl » que es una lista ACL  y descomentamos la linea  */admin* y añadimos la siguiente linea:

usuario@MANUEL.GONZALONAZARENO.ORG *

Ya podemos acceder a kinit con el usuario creado y ver información de la sesión con «klist«.

root@targaryen:/home/debian# kinit usuario
 Password for usuario@MANUELLUNA.GONZALONAZARENO.ORG:
 root@targaryen:/home/debian# klist
 Ticket cache: FILE:/tmp/krb5cc_0
 Default principal: usuario@MANUELLUNA.GONZALONAZARENO.ORG
Valid starting Expires Service principal
 29/01/2015 02:00 29/01/2015 12:00 krbtgt/MANUELLUNA.GONZALONAZARENO.ORG@MANUELLUNA.GONZALONAZARENO.ORG
 renew until 30/01/2015 01:59

Ahora procedemos a configurar el cliente stark:

Instalamos los siguientes paquetes y nos preguntará lo mismo que en la instalación del servidor,  introducimos los mismos datos.

root@stark:/home/debian# apt-get install krb5-user krb5-config

Una vez instalado y configurado, modificamos el fichero /etc/krb5.conf y lo dejamos igual que en el servidor.

Ya podemos autenticarnos con kinit desde el cliente:

root@stark:/home/debian# kinit usuario
 Password for usuario@MANUELLUNA.GONZALONAZARENO.ORG:
root@stark:/home/debian# klist
 Ticket cache: FILE:/tmp/krb5cc_0
 Default principal: usuario@MANUELLUNA.GONZALONAZARENO.ORG
Valid starting    Expires           Service principal
 29/01/2015 02:02  29/01/2015 12:02  krbtgt/MANUELLUNA.GONZALONAZARENO.ORG@MANUELLUNA.GONZALONAZARENO.ORG
 renew until 30/01/2015 02:02

Ahora en el servidor definimos los principales:

 kadmin.local:  add_principal -randkey host/targaryen.manuelluna.gonzalonazareno.org@MANUELLUNA.GONZALONAZARENO.ORG
 WARNING: no policy specified for host/targaryen.manuelluna.gonzalonazareno.org@MANUELLUNA.GONZALONAZARENO.ORG; defaulting to no policy
 Principal "host/targaryen.manuelluna.gonzalonazareno.org@MANUELLUNA.GONZALONAZARENO.ORG" created.
 kadmin.local:  add_principal -randkey host/stark.manuelluna.gonzalonazareno.org@MANUELLUNA.GONZALONAZARENO.ORG
 WARNING: no policy specified for host/stark.manuelluna.gonzalonazareno.org@MANUELLUNA.GONZALONAZARENO.ORG; defaulting to no policy
 Principal "host/stark.manuelluna.gonzalonazareno.org@MANUELLUNA.GONZALONAZARENO.ORG" created.

Ahora exportamos a un fichero los keytabs:

 kadmin.local: ktadd host/targaryen.manuelluna.gonzalonazareno.org
 kadmin.local: ktadd -k /tmp/krb5.keytab host/stark.manuelluna.gonzalonazareno.org

Enviamos el keytab del directorio «/tmp»  por scp al cliente stark:

root@targaryen:/home/debian# scp /tmp/krb5.keytab debian@10.0.0.25:/home/debian

Modificamos los permisos y el propietario del keytab en el servidor:

root@targaryen:/home/debian# chmod 400 /etc/krb5.keytab
root@targaryen:/home/debian# chown sshd:ssh /etc/krb5.keytab

En el cliente stark movemos el keytab al directorio «/etc/» y modificamos sus permisos como en el servidor.

root@stark:/home/debian# mv /home/debian/krb5.keytab /etc/
root@stark:/home/debian# chmod 400 /etc/krb5.keytab
root@stark:/home/debian# chown sshd:ssh /etc/krb5.keytab

Ahora tanto en el servidor como en el cliente editamos el fichero «/etc/ssh/sshd_config« y modificamos la siguientes lineas de tal forma:

#GSSAPI options
 GSSAPIAuthentication yes
 GSSAPICleanupCredentials yes

También debemos modificar las siguientes lineas en el fichero «/etc/ssh/ssh_config«:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

Una vez modificados, reiniciamos el servicio ssh en ambas máquinas y añadimos el usuario «usuario» para realizar las comprobaciones:

# useradd -m -s /bin/bash usuario

Iniciamos con kinit e iniciamos la conexión por ssh desde targaryen a stark:

root@targaryen:/home/debian# kinit usuario
 Password for usuario@MANUELLUNA.GONZALONAZARENO.ORG:

root@targaryen:/home/debian# ssh usuario@stark.manuelluna.gonzalonazareno.org
Linux stark 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
usuario@stark:~$

Ahora desde stark a targaryen:

root@stark:/home/debian# ssh usuario@targaryen.manuelluna.gonzalonazareno.org
Linux targaryen 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u2 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jan 29 02:30:57 2015 from stark.manuelluna.gonzalonazareno.org
usuario@targaryen:~$

 

 

 

Deja un comentario