Gestión Centralizada de Configuraciones con Ansible en un Entorno de Aula.

Objetivo: Configurar un entorno de aula virtualizado utilizando Linux Mint en máquinas virtuales y Ansible para la gestión centralizada de las configuraciones. El objetivo principal es restringir la instalación de software por parte de los usuarios normales (alumnos), permitiendo únicamente la instalación y gestión a través de Ansible desde una máquina de control. Se proporcionará un ejemplo de cómo instalar software (Google Chrome) utilizando un playbook de Ansible.

Paso 1: Requisitos Previos

Antes de comenzar, asegúrate de tener lo siguiente:

  1. Máquina de Control: 1 x Máquina (física o virtual) con Linux Mint instalado. Aquí es donde se instalará Ansible.
  2. Nodos Gestionados (Aulas): 2 x Máquinas Virtuales con Linux Mint instalado (llamadas aula01 y aula02 en este ejemplo).
  3. Red: Todas las máquinas deben estar en la misma red y poder comunicarse entre sí. Necesitarás conocer las direcciones IP de aula01 y aula02.
  4. Usuario con privilegios sudo: Un usuario con permisos sudo debe existir en aula01 y aula02 para la configuración inicial de SSH y para que Ansible pueda realizar tareas administrativas (become: yes). En este ejemplo, asumiremos que existe un usuario (p. ej., mintuser) con sudo en ambas VMs de aula. Posteriormente crearemos usuarios administradores específicos.

Paso 2: Configuración de la Máquina de Control

En tu máquina designada como “Máquina de Control”:

1.Actualizar el sistema

sudo apt update && sudo apt upgrade -y

2.Instalar Ansible

sudo apt install ansible -y

3.Verificar la Instalación

ansible --version

Paso 3: Configurar Acceso SSH sin Contraseña (Desde Control a Aulas)

Ansible utiliza SSH para conectarse a los nodos gestionados. Configurar claves SSH evita tener que introducir contraseñas constantemente.

1. Generar claves SSH en la máquina de control

ssh-keygen -t rsa -b 4096

Copiar la clave pública a aula01 y aula02:
Reemplaza USUARIO_EN_AULA con el nombre del usuario con privilegios sudo que existe en las máquinas virtuales (p. ej., mintuser) y IP_AULA01 / IP_AULA02 con las direcciones IP correspondientes. Te pedirá la contraseña de USUARIO_EN_AULA para cada máquina.

ssh-copy-id USUARIO_EN_AULA@IP_AULA01
ssh-copy-id USUARIO_EN_AULA@IP_AULA02

Probar la conexión SSH (Opcional pero recomendado): Verifica que puedes conectarte sin contraseña.

ssh USUARIO_EN_AULA@IP_AULA01
exit
ssh USUARIO_EN_AULA@IP_AULA02
exit

Paso 4: Configurar el Inventario de Ansible

El inventario es un archivo donde Ansible encuentra la información sobre los nodos que gestiona.

  1. Editar el archivo de hosts de Ansible:
    Usaremos el archivo de inventario por defecto. Necesitarás permisos de superusuario para editarlo. sudo nano /etc/ansible/hosts

(Nota: Para proyectos más grandes, es común usar un archivo inventory o hosts dentro del propio directorio del proyecto).

Agregar las máquinas virtuales al inventario:
Añade las siguientes líneas al final del archivo. Reemplaza IP_AULA01 e IP_AULA02 con las IPs reales. ansible_user debe ser el usuario para el que copiaste la clave SSH en el paso anterior.

[aula]
aula01 ansible_host=IP_AULA01 ansible_user=USUARIO_EN_AULA
aula02 ansible_host=IP_AULA02 ansible_user=USUARIO_EN_AULA
  • [aula] define un grupo llamado aula.
  • aula01, aula02 son los nombres que usaremos en Ansible para referirnos a estas máquinas.
  • ansible_host especifica la IP o nombre DNS.
  • ansible_user especifica el usuario SSH a usar.

Probar la conexión con Ansible: Usa el módulo ping de Ansible para verificar que puede conectar con las máquinas del grupo aula.

ansible -m ping aula

Deberías ver una respuesta SUCCESS con “ping”: “pong” para cada máquina (aula01 y aula02).

Paso 5: Crear Usuarios Administradores y Alumnos con Ansible

Ahora usaremos un playbook para crear los usuarios necesarios en las máquinas de aula.

  1. Crear un archivo de playbook:
    Crea un archivo llamado crear_usuarios.yml (puedes usar nano o tu editor preferido). nano crear_usuarios.yml

Agregar el siguiente contenido al playbook:
Este playbook define dos tareas: una para crear administradores (con sudo) y otra para crear alumnos (sin sudo).

- name: Crear usuarios administradores y alumnos en las máquinas de aula
  hosts: aula # Ejecutar en todas las máquinas del grupo [aula]
  become: yes # Ejecutar tareas como root (necesario para crear usuarios)
  tasks:
    - name: Crear usuarios administradores
      ansible.builtin.user:
        name: "{{ item }}" # Nombre del usuario tomado del loop
        # ¡Importante! Usar contraseñas más seguras en un entorno real
        # Considera usar Ansible Vault para cifrar las contraseñas hash
        password: "{{ 'admin123' | password_hash('sha512') }}" # Contraseña hasheada
        groups: sudo # Añadir al grupo sudo para privilegios de administrador
        shell: /bin/bash
        state: present # Asegura que el usuario exista
      loop:
        - administrador01
        - administrador02

    - name: Crear usuarios alumnos sin privilegios sudo
      ansible.builtin.user:
        name: "{{ item }}"
        password: "{{ 'alumno123' | password_hash('sha512') }}"
        shell: /bin/bash
        state: present # No se especifica 'groups: sudo', por lo que no tendrán privilegios
      loop:
        - alumno01
        - alumno02
    

Ejecutar el playbook:
Desde la Máquina de Control, ejecuta el playbook.

ansible-playbook crear_usuarios.yml

  1. Ansible se conectará a aula01 y aula02 y ejecutará las tareas para crear los usuarios.(Nota: A partir de ahora, podrías cambiar ansible_user en tu inventario a administrador01 o administrador02 si prefieres que Ansible use estas cuentas para futuras conexiones, pero asegúrate de copiar también la clave SSH a estas nuevas cuentas si lo haces).

Paso 6: Restringir Permisos de Instalación a los Alumnos

Usaremos polkit (PolicyKit) para definir una regla que impida a los usuarios alumno01 y alumno02 usar apt.

  1. Crear un playbook para restringir la instalación: nano restringir_instalacion.yml

Agregar el siguiente contenido al playbook:
Este playbook copia un archivo de reglas de polkit.

      ---
- name: Restringir instalación de software (apt) a los alumnos
  hosts: aula
  become: yes
  tasks:
    - name: Bloquear acciones de apt para alumnos específicos con polkit
      ansible.builtin.copy:
        dest: /etc/polkit-1/localauthority/50-local.d/10-restrict-apt.pkla # Ubicación estándar para reglas locales
        content: |
          [Denegar gestión de paquetes APT a alumnos]
          Identity=unix-user:alumno01;unix-user:alumno02
          Action=org.debian.apt.*;org.freedesktop.packagekit.package-install;org.freedesktop.packagekit.package-remove
          ResultAny=no
          ResultInactive=no
          ResultActive=no
    

La regla especifica las identidades (alumno01, alumno02).

Define las acciones relacionadas con apt y packagekit (usado por algunas herramientas gráficas) que se van a bloquear.

Result*=no deniega el permiso para estas acciones a los usuarios especificados.

Ejecutar el playbook:

ansible-playbook restringir_instalacion.yml

Paso 7: Instalar Google Chrome con Ansible (Ejemplo de Gestión Centralizada)

Ahora, como administradores, instalaremos software en todas las máquinas de aula usando Ansible.

  1. Crear el playbook de instalación: nano instalar_chrome.yml

Agregar el siguiente contenido al playbook:
Este playbook descarga el paquete .deb de Google Chrome y luego usa el módulo apt para instalarlo, gestionando las dependencias.

- name: Instalar Google Chrome en las máquinas de aula
  hosts: aula
  become: yes
  tasks:
    - name: Descargar el paquete .deb de Google Chrome Stable
      ansible.builtin.get_url:
        url: https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
        dest: /tmp/google-chrome-stable_current_amd64.deb # Descargar a un directorio temporal
        mode: '0644' # Permisos del archivo descargado

    - name: Instalar Google Chrome desde el archivo .deb descargado
      ansible.builtin.apt:
        deb: /tmp/google-chrome-stable_current_amd64.deb
        state: present # Asegura que esté instalado
      # El módulo apt con 'deb:' maneja la instalación y dependencias

    - name: Limpiar el archivo .deb descargado (opcional)
      ansible.builtin.file:
        path: /tmp/google-chrome-stable_current_amd64.deb
        state: absent
    

Ejecutar el playbook:

      ansible-playbook instalar_chrome.yml

Paso 8: Verificación

Comprueba que todo funciona como se espera.

  1. Acceso SSH: Asegúrate de que todavía puedes acceder vía SSH (si no cambiaste ansible_user, usa ese; si lo cambiaste, usa el nuevo usuario administrador). Reemplaza IP_AULA… y el usuario si es necesario.
ssh USUARIO_CONFIGURADO_EN_INVENTARIO@IP_AULA01
exit
ssh USUARIO_CONFIGURADO_EN_INVENTARIO@IP_AULA02
exit

Usuarios Creados: Conéctate a una de las máquinas de aula (p. ej., aula01) y verifica que los usuarios existen.

ssh USUARIO_CONFIGURADO_EN_INVENTARIO@IP_AULA01
getent passwd | grep -E '(alumno|administrador)' # Busca líneas con alumno o administrador
exit

Deberías ver las entradas para administrador01, administrador02, alumno01 y alumno02.

Restricción de Instalación: Conéctate a una máquina de aula y intenta instalar algo como un usuario alumno.

ssh USUARIO_CONFIGURADO_EN_INVENTARIO@IP_AULA01
su - alumno01 # Cambiar al usuario alumno01 (pedirá la contraseña 'alumno123')
sudo apt update # Intentar actualizar lista de paquetes
# Debería fallar con un error de autenticación o permisos de polkit
sudo apt install vim # Intentar instalar un paquete
# Debería fallar igualmente
exit # Salir de la sesión de alumno01
exit # Salir de la sesión SSH

Repite para alumno02 si quieres estar seguro. El comando sudo debería fallar indicando que el usuario no tiene permiso o pidiendo una contraseña que el alumno no debería tener (la de administrador).

Google Chrome Instalado: Conéctate a una máquina de aula y verifica que Chrome está instalado.

ssh USUARIO_CONFIGURADO_EN_INVENTARIO@IP_AULA01
google-chrome --version
# O alternativamente:
# which google-chrome
# dpkg -l | grep google-chrome
exit
  1. Deberías ver la versión de Google Chrome instalada o la ruta al ejecutable.

Conclusión

Siguiendo esta guía, has logrado:

  • Instalar y configurar Ansible en la máquina de control.
  • Configurar acceso SSH sin contraseña desde la máquina de control a las máquinas de aula.
  • Definir un inventario de Ansible para gestionar las máquinas de aula.
  • Crear usuarios administradores y alumnos de forma centralizada usando un playbook de Ansible.
  • Restringir los permisos de instalación de software (apt) para los usuarios alumnos mediante polkit.
  • Instalar una aplicación (Google Chrome) en todas las máquinas de aula de manera automatizada y centralizada utilizando Ansible.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

+ 89 = 94