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