# 04 - Usuarios y Permisos > Quién puede hacer qué en el servidor de `proyectosacc`. --- ## 1. Usuarios del sistema En el servidor EC2 de `proyectosacc` existen tres usuarios principales. Cada uno tiene un trabajo específico y **no se mezclan los roles**. --- ### 👤 `ubuntu` Este es el usuario administrador por defecto de Ubuntu en AWS. #### ¿Qué puede hacer? - Todo. Es el usuario con permisos de `sudo` (superusuario). - Se usa para configurar el servidor por primera vez. - Puede instalar programas, crear otros usuarios y revisar logs del sistema. #### ¿Cuándo se usa? - Durante el setup inicial del servidor. - Para tareas de mantenimiento que requieren privilegios elevados. - **No se usa para despliegues automáticos ni para ejecutar la aplicación.** --- ### 👤 `thoth` Este es el usuario de **CI/CD** (Integración Continua / Despliegue Continuo). #### ¿Qué puede hacer? - ✅ Descargar actualizaciones de los repositorios de código (solo lectura). - ✅ Subir el frontend compilado al bucket S3 (`aws s3 sync`). - ✅ Mover archivos compilados de la API (binarios, JARs, etc.) a los directorios correctos en la EC2. - ✅ Hacer copias de seguridad (backups) de los binarios antes de actualizarlos. - ✅ Ejecutar los scripts de despliegue de la API. #### ¿Qué NO puede hacer? - ❌ Ejecutar la aplicación final en producción. Ese trabajo es de `osiris`. #### ¿Por qué existe? Para que el pipeline de Bitbucket se conecte por SSH al servidor y haga el despliegue sin necesidad de usar el usuario administrador. --- ### 👤 `osiris` Este es el usuario de **ejecución** de la aplicación. #### ¿Qué puede hacer? - ✅ Iniciar y detener la aplicación SACC. - ✅ Ejecutar los binarios finales (por ejemplo, archivos `.jar` de Java). - ✅ Escribir logs en los directorios asignados. #### ¿Qué NO puede hacer? - ❌ Realizar despliegues. - ❌ Mover archivos de instalación. - ❌ Acceder a repositorios de código. #### ¿Por qué existe? Por seguridad. Si alguien compromete la aplicación, el atacante solo tendría los permisos de `osiris`, que son muy limitados. --- ## 2. Separación de privilegios Este modelo se llama **SoD** (Segregation of Duties) o "Separación de Funciones". La idea es simple: **una sola persona (o usuario) no debe poder hacer todo**. ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ thoth │ │ osiris │ │ ubuntu │ │ (CI/CD) │ │ (ejecución) │ │ (admin) │ │ │ │ │ │ │ │ Despliega │ ──▶ │ Ejecuta │ ◀── │ Administra │ │ la app │ │ la app │ │ el server │ └─────────────┘ └─────────────┘ └─────────────┘ ``` --- ## 3. Llaves SSH Las **llaves SSH** son como un "carnet de identidad digital" que permite conectarse al servidor sin escribir una contraseña cada vez. En `proyectosacc` usamos un **par de llaves SSH dedicado**, generado específicamente para este proyecto. No se usa contraseña ni herramientas como `sshpass`. ### ¿Cómo funcionan? Una llave SSH siempre viene en **par**: 1. **Llave privada**: es secreta. Solo la tiene quien se va a conectar. 2. **Llave pública**: se puede compartir. Se coloca en el servidor para decirle "confía en quien tenga la llave privada que corresponde a esta pública". ### Analogía simple Imagina un candado con dos llaves: - La **pública** es el candado mismo. Lo pones en la puerta del servidor. - La **privada** es la llave que abre el candado. Solo tú la tienes. --- ## 4. Dónde viven las llaves ### Llave privada - **Vive en**: las variables seguras de **Bitbucket Pipelines**. - **Nombre de variable**: `PROYECTOSACC_SSH_KEY` - **Formato**: codificada en **base64** (esto evita que Bitbucket modifique el formato). - **Quién la usa**: el pipeline de Bitbucket cuando se conecta por SSH al servidor. ### Llave pública - **Vive en**: el archivo `~/.ssh/authorized_keys` del usuario `thoth` en la EC2. - **Ruta completa**: `/home/thoth/.ssh/authorized_keys` - **Función**: permite que el pipeline se conecte sin contraseña. ### Llaves del servidor hacia Bitbucket - El usuario `thoth` también tiene sus propias llaves SSH para clonar repositorios desde Bitbucket. - **Ubicación**: `/home/thoth/.ssh/` - **Ejemplo de nombre**: `proyectosacc_server_thoth_develop_TO_bitbucket_pipeline_ci_cd` --- ## 5. Resumen rápido | Usuario | Rol principal | Llave SSH asociada | |---------|---------------|-------------------| | `ubuntu` | Administrador del servidor | Llave de acceso inicial a la EC2 (creada al lanzarla en AWS) | | `thoth` | Despliegue automático (CI/CD) | `PROYECTOSACC_SSH_KEY` en Bitbucket Variables | | `osiris` | Ejecutar la aplicación | No necesita llave SSH para conexiones externas | --- *Anterior: [`03-infraestructura-aws.md`](03-infraestructura-aws.md)* *Siguiente: [`05-pipeline-bitbucket.md`](05-pipeline-bitbucket.md)*