0% encontró este documento útil (0 votos)
26 vistas27 páginas

Apuntes ASO

El documento es un conjunto de apuntes sobre la configuración y gestión de sistemas en un entorno de computación, incluyendo SSH, NIS, NFS, SLURM, y módulos de entorno. Proporciona instrucciones detalladas para la instalación, configuración y administración de servicios en servidores y clientes. También incluye ejemplos de comandos y scripts necesarios para implementar estas tecnologías en un clúster de computación.

Cargado por

cuentaps77777
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
26 vistas27 páginas

Apuntes ASO

El documento es un conjunto de apuntes sobre la configuración y gestión de sistemas en un entorno de computación, incluyendo SSH, NIS, NFS, SLURM, y módulos de entorno. Proporciona instrucciones detalladas para la instalación, configuración y administración de servicios en servidores y clientes. También incluye ejemplos de comandos y scripts necesarios para implementar estas tecnologías en un clúster de computación.

Cargado por

cuentaps77777
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Apuntes ASO

1. Configuración Key SSH y agregar usuarios....................................................................2


2. Internet en clientes............................................................................................................ 3
3. NIS....................................................................................................................................... 4
3.1. Instalación y configuración en el Servidor...................................................................4
3.2. Instalación y configuracion en Cliente.........................................................................5
4. NFS...................................................................................................................................... 6
4.1. NFS con red interna.................................................................................................... 6
SERVIDOR...................................................................................................................6
CLIENTE...................................................................................................................... 6
4.2. NFS con red interna y AutoFS.................................................................................... 7
5. SLURM................................................................................................................................ 8
5.1. Servidor compute-0-0..................................................................................................8
5.2. Cliente compute-0-1.................................................................................................. 10
6. Environment modules..................................................................................................... 12
7. Ansible.............................................................................................................................. 16
7.1. Comandos ad hoc..................................................................................................... 18
7.2. Plabook..................................................................................................................... 19
7.3. Roles......................................................................................................................... 21
8. LDAP Instalacion..............................................................................................................22
8.1. Crear la estructura del directorio............................................................................... 22
8.2. Configuración de los clientes: Autenticación con OpenLDAP...................................26
1. Configuración Key SSH y agregar usuarios
Para poder loguearse por ssh con el usuario root, primero tendremos que asignarle una
contraseña, para ello ejecutamos los siguientes comandos en el servidor:

[user1@server ~]$ sudo su


[root@server ~]$ passwd

En el archivo /etc/ssh/sshd_config del servidor descomentar o incluir la línea :


PermitRootLogin yes, y por último reinicia el servicio sshd

[root@server ~]$ systemctl restart sshd.service

Genera en el cliente un par de claves rsa, una privada y otra pública, para ello ejecuta el
siguiente comando en tu home:

[user2@client ~]$ ssh-keygen

posteriormente le damos a enter varias veces para terminar de crear la key

Puedes comprobar que se ha generado en el cliente ls .ssh/ tendrá que aparecer las dos
claves id_rsa id_rsa.pub, lo siguiente será exportar la clave publica al servidor, para ello
ejecutamos:

[user2@client ~]$ ssh-copy-id root@IP_servidor

Conectate sin que te pida la contraseña desde el cliente

[user2@client ~]$ ssh root@IP_servidor

CREACION DE USUARIOS
Para la creación de usuarios y grupos en el servidor ponemos lo siguiente

groupadd tuapellido
sudo useradd -g tuapellido -d /home/tunombre1 -m -s /bin/bash tunombre1

cambiamos las contraseñas por alumno:

passwd tunombre1

y escribimos la contraseña alumno


2. Internet en clientes
Para poder tener acceso necesitamos ejecutar en el servidor (compute-0-0):

sudo nano /root/enrutar.sh

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

Le damos permisos de ejecución:

chmod +x /root/enrutar.sh

hemos creado un script llamado enrutar.sh y vamos a crear un servicio que se cargue este
script, para ello edita el archivo sudo nano /etc/systemd/system/enrutar.service e inserta
estos comandos.

[Unit]
Description=Inicia enrutamiento
After=syslog.target

[Service]
ExecStart=/root/enrutar.sh
User=root

[Install]
WantedBy=multi-user.target

Habilitamos el servicio y lo iniciamos:

systemctl enable enrutar.service


systemctl start enrutar.service

Y esto es todo.
3. NIS
3.1. Instalación y configuración en el Servidor
Instalamos

apt-get -y install portmap


apt-get -y install nis

En sudo nano /etc/hosts añadimos:

<IP> servidor.X.nis
#Instalamos dominio servidor.X.nis donde X son las 3 primeras iniciales de tu nombre
también pondremos las ips de los dispositivos que estarán en la red
<IP> compute-0-0
<IP> compute-0-1
...

Ejecuta el comando domainname para mostrar el nombre del dominio y para establecer
uno ponemos:

domainname servidor.X.nis

Copia el nombre de su servidor NIS en el archivo nuevo que vamos a crear con
sudo nano /etc/defaultdomain (de aquí lo leerá el servicio ypserv.service que inicia la nis)
# Actualizamos la base de datos y creamos los mapas de la NIS

/usr/sbin/ypserv start
/usr/sbin/rpc.ypxfrd
/usr/lib/yp/ypinit -m

# Comprobamos

rpcinfo -p

En el caso de que no funcione, puedes buscar posibles errores en firewall (iptables -F)

Iniciar el servidor nis :

systemctl enable ypserv.service


systemctl status ypserv.service

Configurar archivo de hosts lo ideal es configurar todos los equipos que estarán validando
contra NIS en el archivo /etc/hosts para independizarse del DNS.
3.2. Instalación y configuracion en Cliente
Instalamos el paquete nis

apt-get -y install nis

Podemos comprobar el nombre del servidor NIS (servidor.X.nis) con el comando


nisdomainname o domainname en el caso de que queramos cambiarlo

nisdomainname servidor.X.nis

Copia el nombre de su servidor NIS en el archivo nuevo que crearemos


sudo nano /etc/defaultdomain (de aquí lo leerá el servicio ypbind.service que inicia la nis)

En sudo nano /etc/nsswitch.conf añadiendo al final de cada línea la palabra «nis».

passwd: files systemd nis


group: files systemd nis
shadow: files nis

En sudo nano /etc/yp.conf añadimos ypserver <ip_del_servidor_nis>, y añade el


servidor al sudo nano /etc/hosts

Por ultimo lanzamos el servicio ypbind

ypbind

para comprobarlo puedes utilizar el comando:

getent passwd

Para hacer que se cree el directorio de los usuarios de forma automática marcarlo con el
siguiente comando:

sudo pam-auth-update

PAM (Pluggable Authentication Modules) establece una interfaz entre los programas de
usuario y distintos métodos de autenticación. De esta forma, el método de autenticación se
hace transparente para los programas.

Haz que el cliente NIs se inice como servicios en el arranque del sistema, para ello

systemctl enable ypbind.service


systemctl status ypbind.service

Si diera algún error al conectar, podría ser por el firewall, para borrar las reglas: iptables -F
4. NFS
4.1. NFS con red interna

SERVIDOR

Instalamos

apt update
apt install nfs-kernel-server

Supongamos que queremos compartir la carpeta /home/tunombre1 situada en un servidor


con un cliente, para ello crearemos las siguientes líneas en el archivo
sudo nano /etc/exports

/home/tunombre1 172.16.0.11(rw,sync,no_root_squash,no_subtree_check)

rw: Da permisos de lectura y escritura al cliente


sync: sincroniza la escritura
no_subtree_check: permite que no se compruebe el camino hasta el directorio que se
exporta, en el caso de que el usuario no tenga permisos sobre el directorio exportado
no_root_squash: permite que los usuarios root de los equipos cliente tengan acceso root
en el servido

Cada vez que cambiemos el archivo /etc/exports tendremos que reiniciar el servicio

systemctl restart nfs-kernel-server.service

Una forma abreviada de incluir más nodos sería:

/home/tunombre1 172.16.0.0/24(rw,sync,no_root_squash,no_subtree_check)

CLIENTE

Instalamos

apt-get install nfs-common

#con esto ya estaría de momento


4.2. NFS con red interna y AutoFS
Vamos a configurar autofs para montar de forma automática el home de los usuarios, para
ello vamos a instalar al cliente compute-0-1:

apt-get install autofs

En sudo nano /etc/auto.master incluimos la siguiente línea

/home /etc/auto.home

Donde el archivo sudo nano /etc/auto.home sería:

# /etc/auto.home
tunombre1 compute-0-0:/home/tunombre1
tunombre2 compute-0-0:/home/tunombre2
tunombre3 compute-0-0:/home/tunombre3

No lo hacemos así para exportar el home de los usuarios por separado, de otra forma cada
vez que un usuarios se loguease en el cliente todas las carpetas se exportarían, podemos
escribirlo de una forma más resumida:

* compute-0-0:/home/&

El asterisco (*) se utiliza para reemplazar el punto de montaje y (&) lo que queremos montar

Hacemos que se inicie cuando se reinicia el cliente compute-0-1

systemctl enable autofs

Fíjate cómo debería verse:

root@compute-0-1:~# df -h | grep tunombre


root@compute-0-1:~# su tunombre1
tunombre1@compute-0-1:/root$ df -h | grep tunombre
compute-0-0:/home/tunombre1 116G 128K 110G 1% /home/tunombre1

NOTA:si no funciona nada de lo anterior prueba a reiniciar las máquinas


5. SLURM
Slurm (Simple Linux Utility for Resources Management), es un sistema de gestión de tareas
y de clústeres (nodos o servidores de cómputo).

srun # Envía un trabajo para su ejecución


scancel # Finaliza trabajos que se encuentren en ejecución o pendientes
sinfo # Muestra información sobre el estado de los nodos de cómputo
squeue # Informa sobre el estado de los trabajos en ejecución y pendientes
sbatch # Envía un script para su posterior ejecución

5.1. Servidor compute-0-0

Lo instalaremos en el servidor compute-0-0, en el que exporta los usuarios por NIS y el


home por NTFS

apt install slurm-wlm

Munge es un servicio de autenticación y validación de credenciales. Se utilizará con Slurm


para validar sus procesos. comprueba que se haya instalado ejecutando:

munge -n | unmunge

Buscamos el archivo slurm-wlm-configurator.html, para ello ejecuta el comando

dpkg -L slurmctld

Vamos al directorio donde esté instalado, en mi caso:

cd /usr/share/doc/slurmctld/

# levantamos el servidor http


python3 -m http.server
Ponemos en el navegador la <IP servidor>:8000 y vamos a slurm-wlm-configurator.html
Cambiamos el nombre del servidor en SlurmctldHost por compute-0-0

Ponemos el nombre de un nodo en NodeName, por ejemplo compute-0-1, fijate que este en
/etc/hosts

En Process Tracking cambiamos a Linuxproc

Aceptamos las demás opciones que vienen por defecto presionando submit, después de
esto saldrá un archivo de texto que copiaremos en /etc/slurm/slurm.conf (crearemos el
archivo y ten cuidado si el directorio es /etc/slurm-llnl/)

Descomenta o copia a mano estas lineas:

SlurmUser=root (cambiar de slurm a root)


SlurmdUser=root (descomentar)
ProctrackType=proctrack/linuxproc (ya esta descomentado)

(copiar y pegar o escribir a mano)


AuthType=auth/munge
CryptoType=crypto/munge
Lanza los servicios:

systemctl start slurmctld

Fíjate que el cliente compute-0-1 no esta todavía configurado STATE = unkonwn

root@compute-0-0:~# sinfo
PARTITION AVAL TIMELIMIT NODES STATE NODELIST
debug* up infite 1 unk* compute-0-1

5.2. Cliente compute-0-1


En el que instalamos Slurmd

apt-get install slurmd

Comprueba que los nodos son accesibles por el root desde el servidor sin el uso de
contraseña

root@compute-0-0:~# ssh compute-0-1 hostname


compute-0-1
Comprueba que se haya instalado munge ejecutando (munge -n | unmunge), para que los
nodos se puedan autentificar en el servidor tenemos que copiar la misma clave y el archivo
de configuración slurm.conf, es decir desde compute-0-0 hacemos lo siguiente:
copiamos y pegamos todo esto
i=compute-0-1
scp /etc/munge/munge.key ${i}:/etc/munge/
ssh ${i} chown munge /etc/munge/munge.key
ssh ${i} chmod 400 /etc/munge/munge.key
ssh ${i} systemctl enable munge --now
ssh ${i} systemctl restart munge
ssh ${i} systemctl status munge

scp /etc/slurm/slurm.conf ${i}:/etc/slurm/slurm.conf


ssh ${i} touch /var/log/slurmd.log
ssh ${i} chown slurm: /var/log/slurmd.log
ssh ${i} systemctl enable slurmd.service
ssh ${i} systemctl start slurmd.service
ssh ${i} systemctl restart slurmd.service
ssh ${i} systemctl status slurmd.service

munge -n | ssh ${i} unmunge


systemctl restart slurmctld.service
systemctl status slurmctld.service

Volvemos a comprobar desde el servidor el estado del nodo

root@compute-0-0:~# sinfo
PARTITION AVAL TIMELIMIT NODES STATE NODELIST
debug* up infite 1 idle compute-0-1

Iniciamos los servicios en compute-0-1

systemctl start slurmd.service

Volvemos a comprobar desde el servidor el estado del nodo:

root@compute-0-0:~# sinfo
PARTITION AVAL TIMELIMIT NODES STATE NODELIST
debug* up infite 1 idle compute-0-1

en el caso de que no se cambie el estado automáticamente lo podemos intentar a cambiar a


mano

scontrol update nodename=compute-0-1 state=idle


6. Environment modules
(ATENCION ESTO NO ENTRA EN PRINCIPIO EN EL EXAMEN)
Modules permite el cambio rápido de un entorno a otro porque nos deja cargar o borrar las
variables necesarios para un programa ejecutando un comando sencillo y avisa si hay
conflictos entre un entorno ya definido con otro que el usuario quiere cargar.

Una vez instalado, es fácil definir los entornos, consiste básicamente en crear los diferentes
ficheros en modulefiles

Los modulefiles están escritos en Tcl (Tool Command Language) y son interpretados por el
modulecmd que se ejecuta cada vez que invocamos module

Especifica variables como el MODULESHOME o MODULEPATH

Los comandos básicos de la herramienta son:

module avail # Muestra los módulos de entornos de programas disponibles


module load # Carga el entorno del programa <prog> de la versión por defecto
module load # Carga el entorno del programa <prog> de la versión <vers>
module list # Muestra los módulos cargados actualmente
module unload # Quita el entorno del <prog>
module show # Muestra el entorno que define el módulo
module whatis # información que aparecerá al usar module whatis modulefile

Configuración de environment modules: instalamos en el servidor :

apt-get install environment-modules

Podemos comprobar que se ha instalado iniciando con uno de los usuarios y ejecutando el
siguiente comando para ejecutar el modul:

source /usr/share/modules/init/bash
y posteriormente ejecutamos module avail aun con el usuario iniciado:

tunombre1@compute-0-0:~$ module avail


------------------------ /usr/share/modules/modulefiles ------------------------
dot module-git module-info modules null use.own

Vamos a crear un nuevo modulo

root@compute-0-0:sudo nano /usr/share/modules/modulefiles/test

y pegamos lo siguiente:
#%Module
##
## test modulefile
##
##
proc ModulesHelp { } {
global version modroot
puts stderr "\ttest carga nada"
}
module-whatis "Entorno para test"
prepend-path PATH /export/apps/test/bin

root@compute-0-0:~# sudo nano /export/apps/test/bin/test.x

echo hola $(whoami)


echo hoy es $(date)

Podemos comprobar que se ha cargado entrando desde un usuario y ejecutando lo


siguiente:
tunombre1@compute-0-0:~$ source /usr/share/modules/init/bash (ejecuta el modul)
tunombre1@compute-0-0:~$ module avail
------------------------ /usr/share/modules/modulefiles ------------------------
dot module-git module-info modules null test use.own

module whatis test


------------------------ /usr/share/modules/modulefiles ------------------------
test: Entorno para test

module help test


-------------------------------------------------------------------
Module Specific Help for /usr/share/modules/modulefiles/test:

test carga nada


-------------------------------------------------------------------

tunombre1@compute-0-0:~$ text.x
text.x: command not found

tunombre1@compute-0-0:~$ module list


No Modulefiles Currently Loaded.

tunombre1@compute-0-0:~$ module load test


tunombre1@compute-0-0:~$ module list
Currently Loaded Modulefiles:
1) test

tunombre1@compute-0-0:~$ test.x
hola tunombre1
hoy es vie 14 abr 2023 10:21:49 UTC

tunombre1@compute-0-0:~$ module rm test


tunombre1@compute-0-0:~$ module list
No Modulefiles Currently Loaded.
tunombre1@compute-0-0:~$ test.x
test.x: command not found

- Ahora vamos a lanzarlo al sistema de colas con sbatch:

tunombre1@compute-0-0:~$ sudo nano script.sh


pegamos lo siguiente

#!/bin/bash
#SBATCH --job-name=serial_job_test # Job name
#SBATCH --ntasks=1 # Run on a single CPU
#SBATCH --partition=debug
#SBATCH --time=00:05:00 # Time limit hrs:min:sec
#SBATCH --output=serial_test_%j.log # Standard output and error log

module load test


pwd > salida
hostname >> salida
test.x >> salida

tunombre1@compute-0-0:~$ sbatch script.sh


Submitted batch job 10

tunombre1@compute-0-0:~$ sudo nano salida


/home/tunombre1
compute-0-1

tunombre1@compute-0-0:~$ cat serial_test_10.log


tunombre1@compute-0-0:~$ cat salida

/var/lib/slurm/slurmd/job00010/slurm_script: line 12: test.x: command not found


como podemos ver, no se encuentra el ejecutable test.x, para que funcione tenemos que
exportar a los nodos /export/app, instalar los environment-modules en los nodos y copiar su
configuración:

tunombre1@compute-0-0:~$ scp /usr/share/modules/modulefiles/test


compute-0-1:/usr/share/modules/modulefiles/test

tunombre1@compute-0-0:~$ tail -5 /etc/exports


/home/tunombre1 172.16.0.12(rw,sync,no_root_squash,no_subtree_check)
/home/tunombre1 172.16.0.13(rw,sync,no_root_squash,no_subtree_check)
/home/tunombre1 172.16.0.14(rw,sync,no_root_squash,no_subtree_check)
/export 172.16.0.10(rw,async,no_root_squash) 172.16.0.0/255.255.255.0(rw,async)
/export/apps *(rw,async,no_root_squash)

tunombre1@compute-0-1:~$ tail -4 /etc/auto.master


#
+auto.master
/home /etc/auto.home
/export /etc/auto.share --timeout=1200

tunombre1@compute-0-1:~$ tail -4 /etc/auto.home


* compute-0-0:/home/&

tunombre1@compute-0-1:~$ tail -4 /etc/auto.share


apps compute-0-0:/export/&

Volvemos a lanzar el proceso y comprobamos que ahora sí existe el comando test.x

tunombre1@compute-0-0:~$ sbatch script.sh


Submitted batch job 11

tunombre1@compute-0-0:~$ cat salida


/home/tunombre1
compute-0-1
hola tunombre1
hoy es vie 14 abr 2023 10:23:51 UTC

#No hace falta tenerlo cargado en el nodo principal

tunombre1@compute-0-0:~$ module list


No Modulefiles Currently Loaded.
7. Ansible
El nodo de control, es la máquina que tiene instalado Ansible. Desde ella administraremos
el resto de nodos.

El Inventario es el archivo host para Ansible. En él se incluye información, estática o


dinámica, de los nodos administrados y su información. Datos como IP o nombre.

Los Módulos, como en otros lenguajes, serían las librerías que ejecuta Ansible.

Los Playbooks se encargan de definir todas las tareas que debemos realizar sobre un
conjunto de nodos administrador.

Los Roles es una agrupación de ficheros, tareas y plantillas

Una Task se podría definir como una acción a realizar.

Instalamos ansible

apt install ansible -y

Añadimos al final del archivo según los equipos que tengamos:

root@compute-0-0:~# sudo nano /etc/ansible/hosts

[server]
server0 ansible_host=172.16.0.10
server1 ansible_host=172.16.0.11
server2 ansible_host=172.16.0.12

[all:vars]
ansible python interpreter=/usr/bin/python3

Para consultar el inventario escribimos lo siguiente


root@compute-0-0:~# ansible-inventory --list -y

y nos tendría que salir lo siguiente


all:
children:
server:
hosts:
server0:
ansible python interpreter: /usr/bin/python3
ansible_host: 172.16.0.10
server1:
ansible python interpreter: /usr/bin/python3
ansible_host: 172.16.0.11
server2:
ansible python interpreter: /usr/bin/python3
ansible_host: 172.16.0.12
ungrouped: {}

Comprobamos la conexión

root@compute-0-0:~# ansible all -m ping -u root


server0 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}

si alguno está en rojo asegurate de haber hecho bien la parte de key SSH y dar permisos de
inicio root !!! INCLUSO A TI MISMO (LOL)!!!
7.1. Comandos ad hoc
Cualquier comando que se ejecute normalmente en un servidor remoto a través de SSH
puede ejecutarse con Ansible en los servidores especificados en su archivo de inventario.
Como ejemplo, puede verificar la utilización del disco en todos los servidores con lo
siguiente:

root@compute-0-0:~# ansible all -a "df -h /dev/sda2" -u root

server2 | CHANGED | rc=0 >>


Filesystem Size Used Avail Use% Mounted on
/dev/sda2 79G 6,0G 69G 9% /
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 79G 6,4G 68G 9% /
server0 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 79G 6,5G 68G 9% /

Podemos instalar en todos los nodos el comando tree:

ansible all -m apt -a "name=tree" -u root

Podemos comprobar que se ha instalado ejecutando:

ansible all -a "tree" -u root

Podemos especificar múltiples hosts separándolos con comas:

ansible server1:server2 -m ping -u root


7.2. Plabook
Ansible ad hoc estan bien para algo rápido, sin embargo para organizar varios modulos se
utilizan los playbook, por ejemplo:

ansible all -m apt -a "name=vim state=latest" -u root

Podríamos escribir lo mismo con un plabook:

root@compute-0-0:~# sudo nano playbook.yml


- name: Playbook
hosts: all
become: yes
become_user: root
tasks:
- name: install vim latest
apt:
name: vim
state: latest

Comprobamos la lista de tareas

root@compute-0-0:~# ansible-playbook playbook.yml --list-tasks

playbook: playbook.yml

play #1 (all): Playbook TAGS: []


tasks:
install vim latest TAGS: []

Comprobamos la lista de máquinas sobre la que va actuar

root@compute-0-0:~# ansible-playbook playbook.yml --list-host

playbook: playbook.yml

play #1 (all): Playbook TAGS: []


pattern: ['all']
hosts (3):
server1
server0
server2
Ejecutamos con ansible el playbook y nos tendría que mostrar lo siguiente

root@compute-0-0:~# ansible-playbook playbook.yml

PLAY [Playbook] *************************************************************************

TASK [Gathering Facts] ******************************************************************


ok: [server2]
ok: [server0]
ok: [server1]

TASK [install vim latest] ***************************************************************


ok: [server1]
ok: [server0]
ok: [server2]

PLAY RECA P******************************************************************************


server0 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0
server1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0
server2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0

Podríamos ejecutarlo solo en el server1 desde server0 con:

ansible-playbook -l server1 playbook.yml

Para cambiar el grupo de hosts por defecto.

ansible-playbook playbook.yml -i ansible_hosts


7.3. Roles
Cuando se crea un rol, se descompone el playbook en partes y esas partes se encuentran
en una estructura de directorios.

Vamos a ver un ejemplo utilizando el comando

ansible-galaxy init --offline cluster-ubuntu22.04

Como podemos ver se han creado los siguientes directorios:

root@compute-0-0:~# tree cluster-ubuntu22.04/


cluster-ubuntu22.04/
├── defaults
│ └── main.yml
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml

6 directories, 8 files

Los diversos archivos main.yml contienen contenido dependiendo de su ubicación en la


estructura de directorios que se muestra arriba. Por ejemplo, vars/main.yml hace referencia
a variables, handlers/main.yaml describe controladores, y así sucesivamente.

Las variables se pueden establecer en vars/main.yml o defaults/main.yml, pero no en


ambos lugares.

Para programar los roles podemos utilizar un control de versiones como es el git, además
podemos publicarlo y luego indexarlo desde https://galaxy.ansible.com/, para su posterior
instalación.
8. LDAP Instalacion
Instalamos
sudo apt-get install slapd ldap-utils
#contraseña slapd : alumno
configuramos con las siguientes opciones
-NO
-dominio DNS : ldap.tunombre.local
-organización : tunombre
-contraseña : alumno
-HDB

#en caso de que no nos salga las opciones de configuración simplemente reconfiguramos
con:
sudo dpkg-reconfigure slapd

Puedes chequear que se ha creado tu LDAP utilizando el comando:

sudo ldapsearch -xLLL -b "dc=ldap,dc=tunombre,dc=local"

8.1. Crear la estructura del directorio


Una vez configurado el servidor, deberemos configurar la estructura básica del directorio. Es
decir, crearemos la estructura jerárquica del árbol (DIT – Directory Information Tree).

Una de las formas más sencillas de añadir información al directorio es utilizar archivos LDIF
(LDAP Data Interchange Format). En realidad, se trata de archivos en texto plano, pero con
un formato particular que debemos conocer poder construirlos correctamente

El formato básico de una entrada es así:

# comentario
dn: <nombre global único>
<atributo>: <valor>
<atributo>: <valor>
...

<atributo> puede ser un tipo de atributo como cn o objectClass, o puede incluir opciones
como cn;lang_en_US o userCertificate;binary.

Entre dos entradas consecutivas debe existir siempre una línea en blanco. Si una línea es
demasiado larga, podemos repartir su contenido entre varias, siempre que las líneas de
continuación comiencen con un carácter de tabulación o un espacio en blanco.
Por ejemplo, las siguientes líneas son equivalentes:

dn: uid=alumno1, ou=ldap, dc=tunombre,dc=local

dn: uid=alumno1, ou=ldap,

dc=tunombre,dc=es

Vamos insertar los siguientes objetos en el LDAP

sudo nano tunombre.ldif

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

Añadimos la información a la base de datos OpenLDAP. Con el comando ldapadd:

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

Para comprobar que todo está bien, podemos ejecutar:

sudo ldapsearch -xLLL -b "dc=ldap,dc=tunombre,dc=local"

Para añadir nuevos usuarios primero añadiremos los grupos

Para añadir un grupo

$ sudo nano grupo.ldif

dn: cn=tuapellido,ou=grupos,dc=ldap,dc=tunombre,dc=local
objectClass: posixGroup
cn: GA
gidNumber: 501
Para Añadir los usuarios

$ sudo nano usuarios.ldif

dn: uid=tunombre1,dc=ldap,dc=tunombre,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: tunombre1
sn: sntunombre1
givenName: tunombre1
cn: tunombre1
displayName: tunombre1
uidNumber: 1010
gidNumber: 501
userPassword: alumno
loginShell: /bin/bash
homeDirectory: /home/tunombre1
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: [email protected]
postalCode: 28027

(asegurate de cambiar los parámetros necesarios de cada usuario bien.


Recomiendo cambiarlo en un txt o en visual studio)

Para cargar el nuevo usuario en el directorio.

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

Para añadir la información al ldap

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

Cuando añadas nuevos usuarios, recuerda que los valores para los atributos uidNumber y
homeDirectory deben ser diferentes para cada usuario.
Lo mismo ocurre con el atributo gidNumber de los grupos.
Además, los valores de los campos uidNumber y gidNumber no deben coincidir con el UID
y GID de ningún usuario y grupo local ya existentes.

Ahora podemos comprobar que el contenido anterior se ha añadido correctamente. Para


lograrlo podemos utilizar, por ejemplo, el comando ldapsearch , que nos permite hacer una
búsqueda en el directorio.:

sudo ldapsearch -xLLL -b "dc=ldap,dc=tunombre,dc=local" uid=tunombre1


Otra opción interesante para comprobar el contenido del directorio es utilizar el comando
slapcat. Su cometido es mostrar el contenido completo del directorio LDAP. Además, esta
información se obtiene en formato LDIF, lo que nos permitirá volcarla a un fichero y exportar
la base de datos de un modo muy sencillo.

Para editar Objetos creamos un archivo nuevo, lo llamamos como queramos con un .ldif al
final.
por ejemplo:
$ sudo nano change.ldif

dn: uid=tunombre4,dc=ldap,dc=tunombre,dc=local
changetype: modify
replace: uidNumber
uidNumber: 1014

aplicamos los cambios con:

$ sudo ldapmodify -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -f change.ldif -W

Añadir Objetos:
$ cat add.ldif

dn: uid=usuario4,dc=ldap,dc=tunombre,dc=local
changetype: modify
add: homePhone
homePhone: 1234567

$ sudo ldapmodify -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -f add.ldif -W

Para borrar por ejemplo el objeto tunombre1 :

sudo ldapdelete -x -W -D "cn=admin,dc=ldap,dc=tunombre,dc=local"


"uid=tunombre1,dc=ldap,dc=tunombre,dc=local"

Cuando lo borramos, aunque no aparezca nada, si hacemos un ldapsearch veremos que no


está.

sudo ldapsearch -xLL -b "dc=ldap,dc=tunombre,dc=local" uid=tunombre1


Para hacer copias de seguridad y restaurarlas utilizamos:

$ slapcat -l backup.ldif #hacemos un backup

#borramos los usuarios, por error ...


sudo ldapdelete -x -W -D "cn=admin,dc=ldap,dc=tunombre,dc=local"
"uid=tunombre1......,dc=ldap,dc=tunombre,dc=local"

systemctl stop slapd.service #antes de restaurar paramos el servicio


rm -Rf /var/lib/ldap/* #limpiamos el directorio ldap
slapadd -v -c -l backup.ldif #restauramos
slapindex -v #rehacemos índices

chown -Rf openldap.openldap /var/lib/ldap/*

systemctl start slapd.service

8.2. Configuración de los clientes: Autenticación con


OpenLDAP

Empezamos instalando todo esto en las máquinas que iniciaran los usuarios (En servidor o
clientes)

$ sudo apt-get install libnss-ldap libpam-ldap ldap-utils -y

ldap://172.16.0.10
dc=ldap,dc=tunombre,dc=local
LDAP version : 3
Yes
No
LDAP account for root: cn=admin,dc=ldap,dc=tunombre,dc=local
contraseña: alumno

#reconfigurar : sudo dpkg-reconfigure ldap-auth-config

sudo nano /etc/hosts


172.16.0.10 ldap.tunombre.local

sudo nano /etc/ldap.conf

#Ponemos la siguiente linea al final: 172.16.0.10


sudo pam-auth-update #marcar que se cree el directorio automáticamente

Algunos de estos comandos ya no están actualizados o tienen problemas lo importante es:

/etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap

para comprobarlo puedes utilizar el comando:

getent passwd

Hacer que funcione el caché de nombres

apt-get install nscd

Para poder cambiar el password

apt-get install libpam-cracklib

También podría gustarte