Rocky Linux#

Caso práctico: Cluster con red interna#

Partimos de la máquina virtual MV Rocky Linux del Ejercicio 1: Instalación de Rocky Linux.

  • Crea dos clones enlazados de "MV Rocky Linux", generando nuevas direcciones MAC, y llámalos "compute-0-0" y "compute-0-1":

    • compute-0-0:

      • Tarjeta de red modo "Puente": 10.4.X.Y/8 (DHCP si usas portátil)

      • Añade una segunda tarjeta de red en modo "Red interna": 172.16.0.10/16

      • Cambia el nombre por compute-0-0 (/etc/hostname)

      • Haz que el usuario root pueda acceder por ssh sin pedir contraseña

    • compute-0-1:

      • Deja solo una tarjeta de red en modo "Red interna": 172.16.0.11/16, con puerta de enlace 172.16.0.10 y DNS 8.8.8.8 (tendrá internet a través de compute-0-0). Si el clon conserva la tarjeta de adaptador puente, deshabilítala con nmtui (IPv4 <disabled>)

      • Cambia el nombre por compute-0-1 (/etc/hostname)

      • Haz que el usuario root pueda acceder desde compute-0-0 por ssh sin pedir contraseña

    • Para configurar la red usa el comando nmtui

  • Añade en el /etc/hosts de las dos máquinas:

    172.16.0.10 compute-0-0
    172.16.0.11 compute-0-1
    172.16.0.12 compute-0-2
    172.16.0.13 compute-0-3
    
  • Sube el pantallazo1, donde se vea que las dos máquinas se hacen ping.

  • Haz que compute-0-1 tenga internet a través de compute-0-0. Para ello, activa el enrutamiento en compute-0-0:

    echo "1" > /proc/sys/net/ipv4/ip_forward
    iptables -A FORWARD -j ACCEPT
    iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o enp0s3 -j MASQUERADE
    

    enp0s3 es la tarjeta de compute-0-0 que tiene salida a internet (compruébalo con ip a). Si tienes algún problema, prueba a deshabilitar el cortafuegos con systemctl disable --now firewalld.

  • Sube el pantallazo2, donde se vea ping -c 3 8.8.8.8 desde compute-0-1.

  • Para que el enrutamiento no se pierda al reiniciar, crea un servicio como hicimos en Ubuntu Server, pero haz que el script con estos comandos se ejecute desde:

    /usr/local/bin/enrutar.sh
    
  • Instala el servidor LDAP en compute-0-0

Servidor Rocky Linux#

Vamos a instalar el servidor ldap en compute-0-0:

dnf update

El plus repo esta deshabilitado por defecto en rocky linux

dnf config-manager --set-enabled plus
dnf clean all
dnf -y install openldap-servers openldap-clients

Podemos confirmar que todo esta instalado ejecutando:

rpm -qa | grep ldap
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl enable --now slapd
systemctl restart slapd

Comprueba que esta corriendo e instalado

systemctl status slapd

Generamos la contraseña del admin para ello ejecutamos

slappasswd

En mi caso con alumno obtengo

{SSHA}ZjYOkjfHrwAx/mjrOndWyUIzyuaXSZJf

La directiva La directiva olcRootPW puede usarse para especificar la password del DN para el rootdn

cat changerootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}ZjYOkjfHrwAx/mjrOndWyUIzyuaXSZJf

ldapadd -Y EXTERNAL -H ldapi:/// -f changerootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

Importamos lo esquemas básicos

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif


$ cat setdomainname.ldif

dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ldap,dc=tunombre,dc=local

dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin, dc=ldap,dc=tunombre,dc=local

dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW:  {SSHA}ZjYOkjfHrwAx/mjrOndWyUIzyuaXSZJf

Aplicamos setdomainname.ldif

ldapmodify -Y EXTERNAL -H ldapi:/// -f setdomainname.ldif

Vamos a crear las unidades organizativas

$ cat adddomain.ldif

dn: dc=ldap,dc=tunombre,dc=local
objectClass: top
objectClass: dcObject
objectclass: organization
o: My example Organisation
dc: ldap

dn: cn=admin, dc=ldap,dc=tunombre,dc=local
objectClass: organizationalRole
cn: admin
description: OpenLDAP Manager

dn: ou=usuarios,dc=ldap,dc=tunombre,dc=local
objectClass: organizationalUnit
ou: usuarios

dn: ou=grupos,dc=ldap,dc=tunombre,dc=local
objectClass: organizationalUnit
ou: grupos

Aplicamos los cambios:

ldapadd -x -D "cn=admin,dc=ldap,dc=tunombre,dc=local" -W -f adddomain.ldif

Para añadir nuevos usuarios

cat addtestuser.ldif
dn: uid=tunombre1,ou=usuarios,dc=ldap,dc=tunombre,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: tunombre1
sn: tunombre1
userPassword: alumno
loginShell: /bin/bash
uidNumber: 1010
gidNumber: 501
homeDirectory: /home/tunombre1
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

Lo añadimos:

sudo ldapadd -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -W -f addtestuser.ldif

Para añadir un grupo

$ cat grupo.ldif

dn: cn=tuapellido,ou=grupos,dc=ldap,dc=tunombre,dc=local
objectClass: posixGroup
cn: tuapellido
gidNumber: 501

Para añadir la información al ldap

sudo ldapadd -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -W -f grupo.ldif

Comprobamos ejecutado en compute-0-0:

[root@compute-0-0 ~] ldapsearch -xLLL -b "dc=ldap,dc=tunombre,dc=local"

Configuración de los certificados TLS

dnf -y install openssl #instalamos el paquete openssl para crear certificados

Vamos a Generar nuestro propio certificado CA requerido para la comunicación segura del LDAP

cd /etc/pki/CA/
touch index.txt
echo 01 > serial

Generamos la clave privada para el certificado CA

openssl genrsa -out ldap.example.com.key 4096

Usamos nuestra clave privada para generar el certificado CA

openssl req -new -key ldap.tunombre.local.key -out ldap.tunombre.local.csr

ES
Madrid
Madrid
IESQuevedo
INF
ldap.tunombre.local
tu_correo@educa.madrid.org

Vamos a crear un certificado SAN para evitar crear multiples certificados para cada cliente del ldap, para ello introduciremos los clientes que vamos a utilizar para hacer la conexión segura

$cat server_cert_ext.cnf
[v3_ca]
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1 = 172.16.0.10
IP.2 = 172.16.0.11
IP.3 = 172.16.0.12
IP.4 = 172.16.0.13
IP.5 = 172.16.0.14
DNS.1 = 8.8.8.8

Necesitaremos otra clave privada para el servidor LDAP con el nombre "ldap.tunombre.local.key" para ello

cd /etc/pki/CA/private
openssl genrsa -out ldap.tunombre.local.key 4096

También necesitaremos crear una solicitud de firma del certificado (csr)

openssl req -new -key ldap.tunombre.local.key -out ldap.tunombre.local.csr

Por ultimo creamos nuestro certificado del servidor ldap, utilizando CSR, la clave CA y el certificado CA creado anteriormente, este certificado será válido por 365 días y esta encriptado con un algoritmo sha256

cd /etc/pki/CA/
openssl ca -keyfile ca.key -cert ca.cert.pem -in private/ldap.tunombre.local.csr -out private/ldap.tunombre.local.crt -extensions v3_ca -extfile server_cert_ext.cnf

Podemos ver que index.txt ha sido actualizado

cat index.txt

Para verificar el certificado del cliente

openssl verify -CAfile ca.cert.pem private/ldap.tunombre.local.crt

Podemos ver que contiene la lista de IPs y DNS que le proporcionamos

openssl x509  -noout -text -in private/ldap.tunombre.local.crt | grep -A 1 "Subject Alternative Name"

Copiamos los certificados dentro de la configuración del ldap

cp -v private/ldap.tunombre.local.crt private/ldap.tunombre.local.key /etc/openldap/certs/
cp -v ca.cert.pem /etc/openldap/cacerts/
chown -R ldap:ldap /etc/openldap/certs
chown -R ldap:ldap /etc/openldap/cacerts

Podemos comprobar que estos son los valores por defecto en los que slapcat buscara los certificados

slapcat -b "cn=config" | egrep "olcTLSCertificateFile|olcTLSCertificateKeyFile"

Vamos a modificar los valores olcTLSCertificateFile y olcTLSCertificateKeyFile

$ cat tls7.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldap.tunombre.local.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.tunombre.local.key

ldapmodify -Y EXTERNAL -H ldapi:// -f tls7.ldif

$ cat tls7_1.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldap.tunombre.local.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.tunombre.local.key

$ cat tls7_1.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/cacerts/ca.cert.pem

Aplicamos los cambios

ldapmodify -Y EXTERNAL -H ldapi:// -f tls7_1.ldif

Validamos los nuevos valores

slapcat -b "cn=config" | egrep "olcTLSCertificateFile|olcTLSCertificateKeyFile|olcTLSCACertificateFile"

Habilitamos la configuración del TLS en LDAP, para ello añadimos en /etc/openldap/ldap.conf

TLS_CACERTDIR /etc/openldap/certs
TLS_CACERT /etc/openldap/cacerts/ca.cert.pem
TLS_REQCERT allow

Activamos los cambios

systemctl status slapd

Permitimos el tráfico del firewall entrante

firewall-cmd --add-service=ldap
firewall-cmd --add-service=ldaps
firewall-cmd --reload

probamos:

ldapsearch -x -ZZ

Cliente Rocky Linux#

dnf -y install openldap-clients sssd sssd-ldap oddjob-mkhomedir

$ cat /etc/sssd/sssd.conf
[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://ldap.tunombre.local
ldap_search_base = dc=ldap,dc=tunombre,dc=local
ldap_id_use_start_tls = False
ldap_tls_cacertdir = /etc/openldap/certs
cache_credentials = True
ldap_tls_reqcert = allow
enumerate = true

[sssd]
services = nss, pam, autofs
domains = default

[nss]
homedir_substring = /home

$ chmod 600 /etc/sssd/sssd.conf
$ systemctl restart sssd
$ systemctl enable sssd

Añade en /etc/hosts

172.16.0.10 ldap.tunombre.local

#instalamos
dnf install authconfig -y

authconfig --enableldap --enableldapauth --ldapserver=ldap.tunombre.local --ldapbasedn="dc=ldap,dc=tunombre,dc=local" --enablemkhomedir --update

Fíjate que en /etc/openldap/ldap.conf ha introducido las siguientes lineas

BASE dc=ldap,dc=tunombre,dc=local
URI ldap://ldap.tunombre.local

Bibliografía:

  • golinuxcloud <https://www.golinuxcloud.com/configure-openldap-with-tls-certificates/#Create_private_key_for_CA_certificate>_