Complementa el directorio instalado en croqueta creando un sistema centralizado de cuentas de usuarios en GNU/Linux con LDAP, Kerberos 5 y NFS4.
Utiliza el manual de http://albertomolina.files.wordpress.com/2014/01/krb_ldap.pdf
Ten en cuenta que en este caso es necesario que el directorio home del usuario esté centralizado y para eso es para lo que se utiliza NFSv4 con kerberos, que no aparece en la documentación.
Forma de corregir:
- Se hace login en tortilla con un usuario que esté en kerberos para lo que hay que facilitar la contraseña del principal.
- Los datos de la cuenta del usuario deben estar en el LDAP de croqueta
- Se comprueba que al hacer login se crea el TGT de kerberos y el TGS de LDAP mediante “klist -5”
- El directorio home del usuario debe estar disponible a través de NFS4y se comprueba creando un fichero
- Se accede por ssh a croqueta de forma transparente (no debe pedir contraseña ni usar clave pública/privada), el fichero creado anteriormente debe estar en el nuevo equipo.
- Se accede de nuevo por ssh a tortilla y se comprueba la generación correcta de los TGS
Introducción
Vamos a realizar un sistema de cuentas de usuarios con LDAP, Kerberos 5 y NFS4.
Kerberos es diferente de los métodos de autenticación de nombre de usuario/contraseña. En vez de validar cada usuario para cada servicio de red, Kerberos autentifica los usuarios a un conjunto de servicios de red.
Configuración del DNS
Para empezar tenemos que hacer algunas configuraciones previas, una de ellas es la configuración del DNS, en nuestro caso con Bind9
Para ello editamos el siguiente fichero:
1
2
3
4
5
6
7
8
debian@croqueta:~$ sudo nano /var/cache/bind/db.ernesto.gonzalonazareno.org
kerberos IN CNAME croqueta
ldap IN CNAME croqueta
_kerberos IN TXT "ERNESTO.GONZALONAZARENO.ORG"
_kerberos._udp IN SRV 0 0 88 kerberos.ernesto.gonzalonazareno.org.
_kerberos_adm._tcp IN SRV 0 0 749 kerberos.ernesto.gonzalonazareno.org.
_ldap._tcp IN SRV 0 0 389 kerberos.ernesto.gonzalonazareno.org.
Posteriormente reiniciamos y probamos si hace bien la consulta mediante dig:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
debian@croqueta:~$ sudo systemctl restart bind9
debian@croqueta:~$ dig ldap.ernesto.gonzalonazareno.org
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> ldap.ernesto.gonzalonazareno.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42319
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 0e030eed954c2ff892fd7a2e5e53ab6b3c028f8af87f20ca (good)
;; QUESTION SECTION:
;ldap.ernesto.gonzalonazareno.org. IN A
;; ANSWER SECTION:
ldap.ernesto.gonzalonazareno.org. 604784 IN CNAME croqueta.ernesto.gonzalonazareno.org.
croqueta.ernesto.gonzalonazareno.org. 604784 IN A 172.22.200.111
;; AUTHORITY SECTION:
ernesto.gonzalonazareno.org. 86400 IN NS croqueta.ernesto.gonzalonazareno.org.
;; Query time: 1 msec
;; SERVER: 192.168.202.2#53(192.168.202.2)
;; WHEN: Mon Feb 24 11:54:35 CET 2020
;; MSG SIZE rcvd: 142
Servidor de hora
Este paso es muy importante ya que ambas máquinas tienen que tener la misma fecha y hora.
Podremos usar ntp:
1
debian@croqueta:~$ sudo apt install ntp
Solamente tendremos que añadir en el fichero /etc/ntpd.conf
el servidor croqueta.
Servidor LDAP
Vamos a crear el usuario y el grupo en un nuevo fichero.
Tengo que añadir, que las dos unidades organizativas (ou) llamadas People y Group, se han reutilizado de la práctica anterior de LDAP.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
debian@croqueta:~/kerberos$ nano inicio.ldif
dn: ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
ou: Group
objectClass: top
objectClass: organizationalUnit
dn: cn=pruebagroup,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: posixGroup
objectClass: top
cn: pruebagroup
gidNumber: 2012
dn: uid=pruebauser,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org
objectClass: account
objectClass: posixAccount
objectClass: top
cn: pruebauser
uid: pruebauser
loginShell: /bin/bash
uidNumber: 2510
gidNumber: 2012
homeDirectory: /home/users/pruebauser
Lo añadimos con el siguiente comando:
1
2
3
4
5
debian@croqueta:~/kerberos$ ldapadd -f inicio.ldif -x -D "cn=admin,dc=ernesto,dc=gonzalonazareno,dc=org" -W
Enter LDAP Password:
adding new entry "cn=pruebagroup,ou=Group,dc=ernesto,dc=gonzalonazareno,dc=org"
adding new entry "uid=pruebauser,ou=People,dc=ernesto,dc=gonzalonazareno,dc=org"
A continuación tenemos que editar el fichero /etc/ldap/ldap.conf.
Tanto en el cliente como en el servidor.
1
2
3
4
debian@croqueta:~$ sudo nano /etc/ldap/ldap.conf
BASE dc=ernesto,dc=gonzalonazareno,dc=org
URI ldap://ldap.ernesto.gonzalonazareno.org
Ahora vamos a crear el directorio y le asignamos el grupo correcto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
debian@croqueta:~$ sudo mkdir -p /home/users/pruebauser
debian@croqueta:~$ sudo cp /etc/skel/.bash_logout /home/users/pruebauser/
debian@croqueta:~$ sudo cp /etc/skel/.bashrc /home/users/pruebauser/
debian@croqueta:~$ sudo cp /etc/skel/.profile /home/users/pruebauser/
debian@croqueta:/home/users/pruebauser$ ls -al
total 20
drwxr-xr-x 2 root root 4096 Feb 24 12:52 .
drwxr-xr-x 3 root root 4096 Feb 24 12:51 ..
-rw-r--r-- 1 root root 220 Feb 24 12:53 .bash_logout
-rw-r--r-- 1 root root 3526 Feb 24 12:53 .bashrc
-rw-r--r-- 1 root root 807 Feb 24 12:53 .profile
debian@croqueta:~$ sudo chown -R 2510:2012 /home/users/pruebauser/
debian@croqueta:/home/users/pruebauser$ ls -al
total 20
drwxr-xr-x 2 2510 2012 4096 Feb 24 12:52 .
drwxr-xr-x 3 root root 4096 Feb 24 12:51 ..
-rw-r--r-- 1 2510 2012 220 Feb 24 12:53 .bash_logout
-rw-r--r-- 1 2510 2012 3526 Feb 24 12:53 .bashrc
-rw-r--r-- 1 2510 2012 807 Feb 24 12:53 .profile
Configuración del cliente LDAP. Name Service Switch (NSS)
Para la autenticación de usuarios con LDAP debemos instalar el paquete libnss-ldap
.
1
debian@croqueta:~$ sudo apt install --no-install-recommends libnss-ldap
Las siguientes pantallas las podemos ignorar de momento.
Si queremos volver a configurar solamente tendremos que poder lo siguiente:
1
debian@croqueta:~$ sudo dpkg-reconfigure libnss-ldap
A continuación nos dirigimos al fichero de configuración /etc/libnss-ldap.conf
parra comentar la siguiente línea
1
2
3
debian@croqueta:~$ sudo nano /etc/libnss-ldap.conf
#rootbinddn cn=manager,dc=example,dc=net
En el caso de que exista contraseña del administrador de LDAP se borraría:
1
debian@croqueta:~$ rm -f /etc/libnss-ldap.secret
Ahora vamos a configurar las líneas de passwd y group, donde le indicaremos al sistema que busque en directorios LDAP y files.
1
2
3
4
debian@croqueta:~$ sudo nano /etc/nsswitch.conf
passwd: ldap files
group: ldap files
Para comprobar el correcto funcionamiento de nss con ldap, realizaremos el mismo listado que antes.
1
2
3
4
5
6
7
debian@croqueta:~/kerberos$ ls -al /home/users/pruebauser/
total 20
drwxr-xr-x 2 pruebauser pruebagroup 4096 Feb 24 12:52 .
drwxr-xr-x 3 root root 4096 Feb 24 12:51 ..
-rw-r--r-- 1 pruebauser pruebagroup 220 Feb 24 12:53 .bash_logout
-rw-r--r-- 1 pruebauser pruebagroup 3526 Feb 24 12:53 .bashrc
-rw-r--r-- 1 pruebauser pruebagroup 807 Feb 24 12:53 .profile
Como podemos apreciar se han cambiado el UID/GID por el correspondiente, obtenido mediante una consulta al directorio LDAP.
Otra forma de hacer la consulta es mediante el uso de getent
, podemos verlo con el siguiente comando.
1
2
3
4
5
debian@croqueta:~$ getent passwd pruebauser
pruebauser:*:2510:2012:pruebauser:/home/users/pruebauser:/bin/bash
debian@croqueta:~$ getent group pruebagroup
pruebagroup:*:2012:
Instalación del servidor MIT Kerberos 5
Vamos a instalar el servidor Kerberos y a la correspondiente configuración.
1
debian@croqueta:~$ apt install krb5-kdc krb5-admin-server
Al finalizar la instalación nos dirigimos al siguiente fichero de configuración:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
debian@croqueta:~$ sudo nano /etc/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 750,88
[realms]
ERNESTO.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 = 750,88
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des3-hmac-sha1
#supported_enctypes = aes256-cts:normal aes128-cts:normal
default_principal_flags = +preauth
}
Ahora tendremos que quitar el puerto 750.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[kdcdefaults]
kdc_ports = 88
[realms]
ERNESTO.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 aes128-cts:normal
default_principal_flags = +preauth
}
En caso de necesitar desactivar Kerberos 4 nos dirigimos al fichero de configuración /etc/default/krb5-kdc.
1
2
KRB4_MODE = disable
RUN_KRB524D = false
Para deshabilitar por completo la utilización de Kerberos4.
Añadimos las siguientes líneas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
debian@croqueta:~$ sudo nano /etc/krb5.conf
[libdefaults]
default_realm = ERNESTO.GONZALONAZARENO.ORG
...
[realms]
ERNESTO.GONZALONAZARENO.ORG = {
kdc = kerberos.ernesto.gonzalonazareno.org
admin_server = kerberos.ernesto.gonzalonazareno.org
}
...
[domain_realm]
.ernesto.gonzalonazareno.org = ERNESTO.GONZALONAZARENO.ORG
ernesto.gonzalonazareno.org = ERNESTO.GONZALONAZARENO.ORG
A continuación lo agregamos con el comando krb5_newrealm
, donde nos pedirá la clave maestra de Kerberos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
debian@croqueta:~$ sudo krb5_newrealm
This script should be run on the master KDC/admin server to initialize
a Kerberos realm. It will ask you to type in a master key password.
This password will be used to generate a key that is stored in
/etc/krb5kdc/stash. You should try to remember this password, but it
is much more important that it be a strong password than that it be
remembered. However, if you lose the password and /etc/krb5kdc/stash,
you cannot decrypt your Kerberos database.
Loading random data
Initializing database '/var/lib/krb5kdc/principal' for realm 'ERNESTO.GONZALONAZARENO.ORG',
master key name 'K/M@ERNESTO.GONZALONAZARENO.ORG'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
Now that your realm is set up you may wish to create an administrative
principal using the addprinc subcommand of the kadmin.local program.
Then, this principal can be added to /etc/krb5kdc/kadm5.acl so that
you can use the kadmin program on other computers. Kerberos admin
principals usually belong to a single user and end in /admin. For
example, if jruser is a Kerberos administrator, then in addition to
the normal jruser principal, a jruser/admin principal should be
created.
Don't forget to set up DNS information so your clients can find your
KDC and admin servers. Doing so is documented in the administration
guide.
Posteriormente reiniciamos los servicios:
1
2
debian@croqueta:~$ sudo systemctl restart krb5-kdc
debian@croqueta:~$ sudo systemctl restart krb5-admin-server
Podremos ver los principales que se generan automáticamente al instalar el servidor kadmin:
1
2
3
4
5
6
7
8
9
root@croqueta:~# kadmin.local
Authenticating as principal root/admin@ERNESTO.GONZALONAZARENO.ORG with password.
kadmin.local: list_principals
K/M@ERNESTO.GONZALONAZARENO.ORG
kadmin/admin@ERNESTO.GONZALONAZARENO.ORG
kadmin/changepw@ERNESTO.GONZALONAZARENO.ORG
kadmin/croqueta.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG
kiprop/croqueta.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG
krbtgt/ERNESTO.GONZALONAZARENO.ORG@ERNESTO.GONZALONAZARENO.ORG
A continuación vamos a crear los principales para el usuario pruebauser
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
kadmin.local: add_principal pruebauser
WARNING: no policy specified for pruebauser@ERNESTO.GONZALONAZARENO.ORG; defaulting to no policy
Enter password for principal "pruebauser@ERNESTO.GONZALONAZARENO.ORG":
Re-enter password for principal "pruebauser@ERNESTO.GONZALONAZARENO.ORG":
Principal "pruebauser@ERNESTO.GONZALONAZARENO.ORG" created.
kadmin.local: add_principal -randkey host/croqueta.ernesto.gonzalonazareno.org
WARNING: no policy specified for host/croqueta.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG; defaulting to no policy
Principal "host/croqueta.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG" created.
kadmin.local: add_principal -randkey host/tortilla.ernesto.gonzalonazareno.org
WARNING: no policy specified for host/tortilla.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG; defaulting to no policy
Principal "host/tortilla.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG" created.
kadmin.local: add_principal -randkey ldap/croqueta.ernesto.gonzalonazareno.org
WARNING: no policy specified for ldap/croqueta.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG; defaulting to no policy
Principal "ldap/croqueta.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG" created.
Ficheros keytab
En este apartado vamos a configurar los ficheros keytab para las claves cifradas puedan autenticarse contra el servidor Kerberos de forma no interactiva.
1
2
3
4
5
6
7
kadmin.local: ktadd host/croqueta.ernesto.gonzalonazareno.org
Entry for principal host/croqueta.ernesto.gonzalonazareno.org with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal host/croqueta.ernesto.gonzalonazareno.org with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
kadmin.local: ktadd ldap/croqueta.ernesto.gonzalonazareno.org
Entry for principal ldap/croqueta.ernesto.gonzalonazareno.org with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal ldap/croqueta.ernesto.gonzalonazareno.org with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Creación de usuarios para la administración de Kerberos
Para crear un rol de administración con todos los permisos hay que descomentar la siguiente línea.
1
2
3
debian@croqueta:~$ sudo nano /etc/krb5kdc/kadm5.acl
# */admin *
A continuación accedemos de nuevo a kadmin.local
.
1
2
3
4
5
6
7
8
debian@croqueta:~$ sudo kadmin.local
Authenticating as principal root/admin@ERNESTO.GONZALONAZARENO.ORG with password.
kadmin.local: add_principal ernestovazgar/admin
WARNING: no policy specified for ernestovazgar/admin@ERNESTO.GONZALONAZARENO.ORG; defaulting to no policy
Enter password for principal "ernestovazgar/admin@ERNESTO.GONZALONAZARENO.ORG":
Re-enter password for principal "ernestovazgar/admin@ERNESTO.GONZALONAZARENO.ORG":
Principal "ernestovazgar/admin@ERNESTO.GONZALONAZARENO.ORG" created.
De esta manera hemos crear un principal para un usuario administrador.
Configuración del cliente Kerberos
A continuación vamos a instalar el cliente kerberos en tortilla.
1
ubuntu@tortilla:~$ sudo apt install krb5-config krb5-user
Editamos el fichero de configuración /etc/krb5.conf,
al igual que en el servidor.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ubuntu@tortilla:~$ sudo nano /etc/krb5.conf
[libdefaults]
default_realm = ERNESTO.GONZALONAZARENO.ORG
...
[realms]
ERNESTO.GONZALONAZARENO.ORG = {
kdc = kerberos.ernesto.gonzalonazareno.org
admin_server = kerberos.ernesto.gonzalonazareno.org
}
...
[domain_realm]
.ernesto.gonzalonazareno.org = ERNESTO.GONZALONAZARENO.ORG
ernesto.gonzalonazareno.org = ERNESTO.GONZALONAZARENO.ORG
klist y knit
Para ver los tickets de la sesión de usuario utilizarenos el comanto klist -5
(Pero antes tenemos que autenticarnos), en caso de no estar autenticados saltaria la siguiente salida:
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)
Para autenticarnos utilizarenos kinit
seguido del nombre de usuario.
1
2
3
4
5
6
7
8
9
10
11
12
13
ubuntu@tortilla:~$ klist -5
klist: No credentials cache found (filename: /tmp/krb5cc_1000
root@tortilla:/home/ubuntu# kinit pruebauser
Password for pruebauser@ERNESTO.GONZALONAZARENO.ORG:
root@tortilla:/home/ubuntu# klist -5
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: pruebauser@ERNESTO.GONZALONAZARENO.ORG
Valid starting Expires Service principal
02/25/20 19:20:57 02/26/20 05:20:57 krbtgt/ERNESTO.GONZALONAZARENO.ORG@ERNESTO.GONZALONAZARENO.ORG
renew until 02/26/20 19:20:53
SASL/GSSAPI
Autentificación simple con LDAP.
LDAP nos permite autenticarnos utilizando Simple Authentication and Security Layer(SASL) y con kerberos mediante GSSAPI.
Para ello vamos a instalar los paquetes necesarios.
1
debian@croqueta:~$ sudo apt install libsasl2-modules-gssapi-mit
Vamos a cambiar los permisos al siguiente fichero, para que ldap pueda acceder.
1
2
root@croqueta:~# chmod 640 /etc/krb5.keytab
root@croqueta:~# chgrp openldap /etc/krb5.keytab
A continuación vamos a añadir al fichero de configuración de slapd lo siguiente.
1
2
3
debian@croqueta:~$ sudo nano /etc/ldap/sasl2/slapd.conf
mech_list: GSSAPI
1
2
3
4
5
debian@croqueta:~$ sudo nano /etc/ldap/ldap.conf
SASL_MECH GSSAPI
SASL_REALM ERNESTO.GONZALONAZARENO.ORG
SASL_NOCANON ON
Ahora vamos a reiniciar los servicios:
1
root@croqueta:~# systemctl restart slapd
Para comprobar si está activado SASL/GSSAPI realizamos la siguiente consulta.
1
2
3
4
root@croqueta:~# ldapsearch -x -b "" -s base -LLL supportedSASLMechanisms
dn:
supportedSASLMechanisms: GSSAPI
Ahora con el usuario pruebauser desde tortilla:
1
2
3
4
ubuntu@tortilla:~$ ldapsearch "gidNumber=2510"
ldap_sasl_interactive_bind_s: Unknown authentication method (-6)
additional info: SASL(-4): no mechanism available: No worthy mechs found
Para que funcione vamos a instalar en tortilla el siguiente paquete.
1
root@tortilla:/etc/ldap# apt install libsasl2-modules-gssapi-mit
He tenido que abrir los siguientes puertos: 464 tcp, 464 udp, 88 udp y 749 tcp.
He tenido que realizar el klist y kinit en croqueta.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@croqueta:~# kinit pruebauser
Password for pruebauser@ERNESTO.GONZALONAZARENO.ORG:
root@croqueta:~# klist -5
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: pruebauser@ERNESTO.GONZALONAZARENO.ORG
Valid starting Expires Service principal
02/26/2020 12:55:54 02/26/2020 22:55:54 krbtgt/ERNESTO.GONZALONAZARENO.ORG@ERNESTO.GONZALONAZARENO.ORG
renew until 02/27/2020 12:54:36
root@croqueta:~# ldapwhoami
SASL/GSSAPI authentication started
SASL username: pruebauser@ERNESTO.GONZALONAZARENO.ORG
SASL SSF: 256
SASL data security layer installed.
dn:uid=pruebauser,cn=gssapi,cn=auth
He tenido que añadir la información al fichero de configuración:
1
2
3
4
5
6
7
8
root@tortilla:/etc/ldap# nano ldap.conf
BASE dc=ernesto,dc=gonzalonazareno,dc=org
URI ldap://ldap.ernesto.gonzalonazareno.org
...
SASL_MECH GSSAPI
SASL_REALM ERNESTO.GONZALONAZARENO.ORG
SASL_NOCANON ON
1
2
3
root@tortilla:~# sudo nano /etc/ldap/sasl2/slapd.conf
mech_list GSSAPI
Si necesitamos quitar los tickets podemos realizar un kdestoy
, en mi caso voy a realizar klist y kinit.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
root@tortilla:/etc/ldap# kdestroy
root@tortilla:/etc/ldap# kinit pruebauser
Password for pruebauser@ERNESTO.GONZALONAZARENO.ORG:
root@tortilla:~# klist -5
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: pruebauser@ERNESTO.GONZALONAZARENO.ORG
Valid starting Expires Service principal
02/26/20 12:56:42 02/26/20 22:56:42 krbtgt/ERNESTO.GONZALONAZARENO.ORG@ERNESTO.GONZALONAZARENO.ORG
renew until 02/27/20 12:56:39
02/26/20 13:00:43 02/26/20 22:56:42 ldap/croqueta.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG
renew until 02/27/20 12:56:39
root@tortilla:/etc/ldap# ldapwhoami
SASL/GSSAPI authentication started
SASL username: pruebauser@ERNESTO.GONZALONAZARENO.ORG
SASL SSF: 56
SASL data security layer installed.
dn:uid=pruebauser,cn=gssapi,cn=auth
PAM
Para que el sistema pueda usar kerberos es necesario instalar los siguientes paquetes.
1
2
root@croqueta:~# apt install libpam-krb5
root@tortilla:~# apt install libpam-krb5
Vamos a realizar una copia del fichero que vamos a modificar, por seguridad.
1
2
root@croqueta:~# cp -r /etc/pam.d /etc/pam.d.old
root@tortilla:~# cp -r /etc/pam.d /etc/pam.d.old
Vamos configurar los siguientes ficheros:
- /etc/pam.d/common-auth
1
2
auth sufficient pam_krb5.so minimum_uid=2000
auth required pam_unix.so try_first_pass nullok_secure
- /etc/pam.d/common-session
1
2
session optional pam_krb5.so minimum_uid=2000
session required pam_unix.so
- /etc/pam.d/common-account
1
2
account sufficient pam_krb5.so minimum_uid=2000
account required pam_unix.so
- /etc/pam.d/common-password
1
2
password sufficient pam_krb5.so minimum_uid=1000
password required pam_unix.so nullok obscure sha512
Estos pasos lo realizaremos también en tortilla.
Ahora provamos hacer login:
1
2
3
4
5
6
7
8
9
10
11
12
root@croqueta:~# login pruebauser
Password:
Linux croqueta 4.19.0-6-cloud-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) 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.
pruebauser@croqueta:~$
Network File System 4 (NFS4)
Vamos a instalar los paquetes para el servidor:
1
debian@croqueta:~$ sudo apt install nfs-kernel-server
Vamos a editar el siguiente fichero de configuración para que pueda utilizar kerberos:
1
2
3
4
5
6
7
debian@croqueta:~$ sudo nano /etc/default/nfs-common
# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=yes
# Do you want to start the gssd daemon? It is required for Kerberos mount$
NEED_GSSD=yes
1
2
3
4
5
debian@croqueta:~$ sudo nano /etc/default/nfs-kernel-server
# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD="yes"
Descomentamos la siguiente línea y añadimos nuestro dominio.
1
2
3
4
5
6
debian@croqueta:~$ sudo nano /etc/idmapd.conf
# set your own domain here, if it differs from FQDN minus hostname
# Domain = localdomain
Domain = ernesto.gonzalonazareno.org
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
debian@croqueta:~$ sudo kadmin.local
Authenticating as principal pruebauser/admin@ERNESTO.GONZALONAZARENO.ORG with password.
kadmin.local: add_principal -randkey nfs/croqueta.ernesto.gonzalonazanareno.org
WARNING: no policy specified for nfs/croqueta.ernesto.gonzalonazanareno.org@ERNESTO.GONZALONAZARENO.ORG; defaulting to no policy
Principal "nfs/croqueta.ernesto.gonzalonazanareno.org@ERNESTO.GONZALONAZARENO.ORG" created.
kadmin.local: add_principal -randkey nfs/tortilla.ernesto.gonzalonazareno.org
WARNING: no policy specified for nfs/tortilla.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG; defaulting to no policy
Principal "nfs/tortilla.ernesto.gonzalonazareno.org@ERNESTO.GONZALONAZARENO.ORG" created.
kadmin.local: ktadd nfs/croqueta.ernesto.gonzalonazanareno.org
Entry for principal nfs/croqueta.ernesto.gonzalonazanareno.org with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal nfs/croqueta.ernesto.gonzalonazanareno.org with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
kadmin.local: ktadd -k /tmp/krb5.keytab nfs/tortilla.ernesto.gonzalonazareno.org
Entry for principal nfs/tortilla.ernesto.gonzalonazareno.org with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/krb5.keytab.
Entry for principal nfs/tortilla.ernesto.gonzalonazareno.org with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/krb5.keytab.
A continuación vamos a tener copiar dicho fichero en tortilla
Para ello podemos utilizar scp
y lo meteremos en el directorio /etc/krb5.keytab
.
Ahora vamos a crear el directorio para guardar el home de los usuarios:
1
2
3
root@croqueta:~# mkdir -p /srv/nfs4/homes
root@croqueta:~# cd /srv/nfs4/homes/
root@croqueta:/srv/nfs4/homes# mount --bind /home /srv/nfs4/homes
Vamos editar el fichero de exportación y descomentamos las últimas líneas.
1
2
3
4
5
root@croqueta:/srv/nfs4/homes# nano /etc/exports
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
A continuación vamos reiniciar los servicios:
1
2
3
root@croqueta:~# systemctl restart nfs-kernel-server
root@croqueta:~# systemctl restart nfs-common
Failed to restart nfs-common.service: Unit nfs-common.service is masked.
Como se puede apreciar no se puede reiniciar el servicio de nfs-common, para ello vamos a realizar la siguiente instrucción.
1
2
3
root@croqueta:~# rm /lib/systemd/system/nfs-common.service
root@croqueta:~# systemctl daemon-reload
root@croqueta:~# systemctl restart nfs-common.service
Ya podremos reiniciar los servicios, esto se debe a que la unidad está enmascarada.
1
2
3
4
root@croqueta:~# showmount -e
Export list for croqueta:
/srv/nfs4/homes gss/krb5i
/srv/nfs4 gss/krb5i
Con ese comando podremos ver si se han montado correctamente.
Cliente NFS
En este apartado vamos a configurar el cliente NFS en tortilla
Para ello vamos a instalarlo:
1
ubuntu@tortilla:~$ sudo apt install nfs-common
A continuación tendremos que configurarlo, igual que lo hemos realizado en croquete:
1
2
3
4
5
ubuntu@tortilla:~$ sudo nano /etc/default/nfs-common
# Do you want to start the gssd daemon? It is required for Kerberos moun$
NEED_GSSD=yes
NEED_IDMAPD=yes
1
2
3
ubuntu@tortilla:~$ sudo nano /etc/idmapd.conf
Domain = ernesto.gonzalonazareno.org
Volvemos a reiniciar los servicios:
1
2
3
root@tortilla:~# rm /lib/systemd/system/nfs-common.service
root@tortilla:~# systemctl daemon-reload
root@tortilla:~# systemctl restart nfs-common
Por último vamos a configurar el fichero /etc/fstab
:
- Croqueta:
1
2
3
root@croqueta:~# nano /etc/fstab
/home /srv/nfs4/homes none rw,bind 0 0
- Tortilla:
1
2
3
root@tortilla:~# nano /etc/fstab
croqueta.ernesto.gonzalonazareno.org /home/nfs4 nfs4 rw,sec=krb5i 0 0