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/hostsde 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
enp0s3es la tarjeta de compute-0-0 que tiene salida a internet (compruébalo conip a). Si tienes algún problema, prueba a deshabilitar el cortafuegos consystemctl disable --now firewalld.Sube el pantallazo2, donde se vea
ping -c 3 8.8.8.8desde 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>_