feat: Mejorar la configuración y seguridad de Koji

Este commit introduce varias mejoras en los roles de Ansible para Koji:

- **Rol koji_hub:**
  - Se reemplazó `lineinfile` con una plantilla completa para `hub.conf` para mejorar la legibilidad y mantenibilidad.
  - Se aseguró la instalación del paquete `python3-koji-hub-plugins` para soportar el plugin `echo`.
  - Se eliminó una tarea `blockinfile` redundante que duplicaba la configuración de la base de datos en `hub.conf`.
  - Se rehabilitó el plugin `echo` en `hub.conf` después de asegurar su disponibilidad.

- **Rol postgresql:**
  - Se modificó la configuración de `pg_hba.conf` para iterar correctamente sobre todos los hosts en el grupo `kojihub`, asegurando que todas las instancias del hub puedan conectarse a la base de datos.

- **Rol dist_git:**
  - Se implementó el etiquetado persistente de contextos SELinux para los directorios de `dist-git` usando `semanage fcontext` y `restorecon`, asegurando que los contextos persistan tras reetiquetados del sistema de archivos.

- **Rol common:**
  - Se mejoró la seguridad en la generación de claves GPG usando un archivo temporal para el script por lotes, el cual se elimina de forma segura después de la generación de la clave.

- **Configuración Global:**
  - Se introdujo la variable `koji_source_script_path` en `vars/default.yaml` para centralizar la ruta del script `mxos-get-sources.bash`, eliminando rutas hardcodeadas en `kojid_allowed_scms` y las tareas de `kojid`.

- **Documentación:**
  - Se actualizó `docs/instalación.rst` para reflejar los cambios en la configuración de Dist-Git, plugins y variables.
This commit is contained in:
Rénich Bon Ćirić 2025-11-22 11:48:06 -06:00
commit f14c01da0b
Signed by: renich
GPG key ID: AB2A9F49384FE324
25 changed files with 731 additions and 123 deletions

View file

@ -14,10 +14,10 @@ Crea la Autoridad de Certificación (CA):
Crea un directorio dedicado para tu infraestructura PKI de Koji (p. ej., `/etc/pki/koji`).
Genera un certificado de CA Raíz autofirmado y su clave privada correspondiente. Usarás esta CA para firmar todos los demás certificados de componentes de Koji.
Genera Certificados de Componentes y Usuarios:
Para cada componente de Koji que requiere autenticación (koji_hub, koji-web, kojid, kojira y usuarios administradores), genera
Para cada componente de Koji que requiere autenticación (koji_hub, koji-web, kojid, kojira, dist-git y usuarios administradores), genera
una solicitud de firma de certificado (CSR) única y una clave privada.
Certificados del Lado del Servidor (koji_hub, koji-web):
Certificados del Lado del Servidor (koji_hub, koji-web, dist-git):
El Common Name (CN) en estos certificados *debe* coincidir con el
Nombre de Dominio Completo (FQDN) del servidor donde los desplegarás. Estos certificados deben incluir `serverAuth` en su
`extendedKeyUsage`.
@ -31,6 +31,8 @@ Genera Certificados de Componentes y Usuarios:
menudo este archivo `.pem`.
Para que los usuarios administradores accedan a través del navegador web, genera un paquete PKCS12 (`.p12`) a partir del
certificado y la clave del usuario, que incluya el certificado de la CA.
**Nota de Seguridad**: Para la generación de claves GPG, utiliza archivos temporales seguros que se eliminen inmediatamente después de su uso para evitar exponer la frase de paso.
Fase 2: Configuración de la Base de Datos PostgreSQL
====================================================
@ -56,7 +58,7 @@ Configura el Acceso a la Base de Datos (`postgresql.conf` y `pg_hba.conf`):
* Configurar `listen_addresses` para permitir conexiones desde Koji Hub (p. ej., `'*'`).
* Aumentar `max_connections` para satisfacer las necesidades de Koji (p. ej., `200`).
Edita `pg_hba.conf` para permitir conexiones desde Koji Hub a la base de datos de Koji con SSL y un método de autenticación seguro (p. ej., `scram-sha-256`). Además, configura el acceso local para el usuario `postgres`.
Edita `pg_hba.conf` para permitir conexiones desde todos los hosts de Koji Hub (si hay varios) a la base de datos de Koji con SSL y un método de autenticación seguro (p. ej., `scram-sha-256`). Además, configura el acceso local para el usuario `postgres`.
Fase 3: Configuración de Koji Hub
=================================
@ -64,14 +66,13 @@ El Koji Hub es el plano de control central para el sistema de compilación Koji.
Instala Koji Hub y Dependencias:
Instala `koji_hub`, `koji-web`, `httpd`, `mod_ssl`, `mod_wsgi`, `python3-cryptography`, `nmap-ncat`, `postgresql` (bibliotecas
de cliente) y `policycoreutils-python-utils`.
de cliente), `policycoreutils-python-utils` y `python3-koji-hub-plugins`.
Configura el Hub (`/etc/koji_hub/hub.conf` y el directorio `.d`):
Configura los parámetros de conexión de la base de datos (`DBName`, `DBUser`, `DBHost`, `DBPass`).
Establece `KojiDir` en la ruta donde Koji almacenará los datos de compilación (p. ej., `/mnt/koji`).
Configura los ajustes de autenticación, incluyendo `DNUsernameComponent` y `ProxyDNs` para la autenticación de certificados de
cliente SSL.
Coloca las configuraciones sensibles (como `DBPass`) in un archivo separado dentro de `/etc/koji_hub/hub.conf.d/` con permisos
restringidos.
Asegúrate de que la configuración de plugins apunte a una ruta válida (p. ej., `/usr/lib/koji-hub-plugins`) y habilita los plugins necesarios (como `echo`).
Configura Apache para el Hub:
Asegúrate de que `mod_ssl` y `mod_wsgi` estén habilitados.
Edita `/etc/httpd/conf.d/ssl.conf` para que apunte al certificado del servidor, la clave y el certificado de la CA de Koji del
@ -82,8 +83,6 @@ Crea la Estructura del Sistema de Archivos de Koji:
Crea los subdirectorios necesarios en `KojiDir` (p. ej., `packages`, `repos`, `work`, `scratch`, `repos-dist`, `certs`,
`clients`).
Asegúrate de que el usuario `apache` tenga la propiedad y los permisos de escritura adecuados en estos directorios.
Despliega Plugins de Koji Hub:
Copia cualquier complemento personalizado de Koji Hub (p. ej., `sigul_sign.py`) a `/usr/lib/koji_hub/plugins`.
Fase 4: Configuración de Koji Web
=================================
@ -96,7 +95,19 @@ Configura Koji Web (`/etc/kojiweb/web.conf` y el directorio `.d`):
Configura Apache para Koji Web:
Configura el bloque `<Location /koji/login>` en `/etc/httpd/conf.d/kojiweb.conf` para que requiera certificados de cliente SSL si los usuarios se autenticarán a través de navegadores web.
Fase 5: Configuración de Kojid (Constructor) y Kojira (Administrador de Repos)
Fase 5: Configuración de Dist-Git
=================================
El sistema Dist-Git gestiona los repositorios Git para las fuentes de los paquetes RPM.
Instalación y Configuración:
Instala `git`, `git-daemon`, `httpd` y `mod_ssl`.
Configura `httpd` para servir los repositorios Git a través de HTTPS, utilizando certificados SSL generados por la CA de Koji.
Asegúrate de que se fuerce el tráfico HTTPS mediante redirecciones.
Directorio y Permisos:
Crea la estructura de directorios para los repositorios Git y la caché de fuentes (lookaside cache).
Asegura que los contextos de SELinux (`httpd_sys_content_t`) sean persistentes mediante `semanage fcontext`.
Fase 6: Configuración de Kojid (Constructor) y Kojira (Administrador de Repos)
==============================================================================
Configura Kojid (en cada host constructor):
@ -106,6 +117,7 @@ Configura Kojid (en cada host constructor):
Establece el parámetro `user` en el FQDN del host constructor.
Establece `topdir` en el directorio de Koji montado (p. ej., `/mnt/koji`).
Establece `workdir` en un directorio local (p. ej., `/var/lib/kojid-work`).
Configura `allowed_scms` para permitir la descarga de fuentes desde tu Dist-Git, utilizando un script wrapper (ej. `mxos-get-sources.bash`) para gestionar la caché de fuentes (lookaside cache).
Asegúrate de que el servicio `kojid` se ejecute como `root` (predeterminado) y tenga los permisos adecuados en `workdir`.
Agrega los usuarios que necesitan compilar paquetes (p. ej., `kojiadmin`) al grupo `mock`.
Configura Kojira (en el hub o en un host dedicado):
@ -115,12 +127,7 @@ Configura Kojira (en el hub o en un host dedicado):
Estos componentes manejan los procesos de compilación reales y la gestión de repositorios.
Configura Kojira (en el hub o en un host dedicado):
Instala `koji-utils`.
Edita `/etc/kojira/kojira.conf` para que apunte a la URL del servidor XML-RPC de Koji Hub.
Especifica el certificado de cliente del componente `kojira` y el certificado de la CA de Koji.
Fase 6: Configuración de SELinux y Firewall
Fase 7: Configuración de SELinux y Firewall
===========================================
Un contexto de seguridad y un acceso a la red adecuados son cruciales para que Koji funcione.
@ -134,18 +141,18 @@ Configuración de SELinux:
Aplica los contextos de archivo de SELinux correctos:
* `semanage fcontext -a -t public_content_rw_t "/mnt/koji(/.*)?"` (para contexto persistente)
* `semanage fcontext -a -t httpd_sys_rw_content_t "/mnt/koji(/.*)?"` (para contexto persistente en directorios de escritura)
* `restorecon -r -v /mnt/koji` (para aplicar el contexto inmediatamente)
* Alternativamente, para recursos compartidos NFS donde `semanage fcontext` podría no aplicarse, usa `chcon -R -t
public_content_rw_t /mnt/koji/*` (aunque esto no es persistente entre reinicios).
Configuración del Firewall:
Abre los puertos de firewall necesarios en los hosts respectivos:
* Koji Hub: HTTP (80/tcp), HTTPS (443/tcp), Servidor Mock Sigul (8080/tcp, si se despliega en el hub).
* Koji Hub: HTTP (80/tcp), HTTPS (443/tcp).
* Servidor PostgreSQL: PostgreSQL (5432/tcp) desde el Koji Hub.
* Servidor NFS: NFS (servicios nfs, rpc-bind, mountd).
* Dist-Git: HTTP (80/tcp), HTTPS (443/tcp), Git (9418/tcp).
Fase 7: Arranque del Entorno de Compilación de Koji
Fase 8: Arranque del Entorno de Compilación de Koji
===================================================
Esta fase final prepara a Koji para que realice compilaciones reales.
@ -172,7 +179,7 @@ Importa Paquetes Iniciales:
Este procedimiento detallado debería servirte como una guía completa para que configures un entorno Koji.
Fase 8: Características Adicionales
Fase 9: Características Adicionales
===================================
Recolección de Basura:
@ -186,4 +193,4 @@ Permisos Granulares:
lo que mejora la seguridad al limitar el acceso a funciones administrativas.
Autoincremento de NVR:
La etiqueta de compilación `mxos0-build` está configurada para incrementar automáticamente el número
de release de los paquetes, simplificando el proceso de compilación.
de release de los paquetes, simplificando el proceso de release.