Fase 2: 04_sanitize.py - scrubbing de secretos de skills/agentes/plans (10 secretos unicos, gate en verde)
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# Plan: Dockerfile user-agnostic con sudo
|
||||
|
||||
## Context
|
||||
|
||||
El Dockerfile hardcodea el usuario `aleleba` y no crea la imagen para múltiples usuarios. Cuando se ejecuta con `HOME_USER=aleleba-telus`, el entrypoint.sh intenta sourcear `/home/aleleba-telus/.bashrc` que no existe → "Permission denied".
|
||||
|
||||
**Objetivo:** Instalar todo como root en paths globales. Cualquier `HOME_USER` funciona — el entrypoint crea el usuario, le da sudo, y copia la configuración.
|
||||
|
||||
## Cambios (solo 3)
|
||||
|
||||
### 1. Eliminar creación hardcoded de usuario (líneas 7-11)
|
||||
Eliminar estas líneas del Dockerfile:
|
||||
```dockerfile
|
||||
RUN sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER}
|
||||
RUN sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
|
||||
USER ${HOME_USER}
|
||||
WORKDIR /home/${HOME_USER}
|
||||
```
|
||||
|
||||
El entrypoint.sh ya hace todo esto al runtime:
|
||||
- Crea el usuario si no existe (línea 56)
|
||||
- Le da sudo (línea 58)
|
||||
- Copia `/usr/bin/.bashrc` al home del usuario (línea 99)
|
||||
|
||||
### 2. Mover `.bashrc` a global (líneas 172-179)
|
||||
Cambiar todos los `~/.bashrc` a `/usr/bin/.bashrc`:
|
||||
|
||||
```bash
|
||||
# Antes
|
||||
RUN echo "PATH=..." | sudo tee -a ~/.bashrc
|
||||
RUN echo "export JAVA_HOME=..." | sudo tee -a ~/.bashrc
|
||||
RUN echo "export ANDROID_HOME=..." | sudo tee -a ~/.bashrc
|
||||
RUN echo "export ANDROID_SDK_ROOT=..." | sudo tee -a ~/.bashrc
|
||||
RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' | sudo tee -a ~/.bashrc
|
||||
RUN echo "export EMSDK_QUIET=1" | sudo tee -a ~/.bashrc
|
||||
RUN echo "source /emsdk/emsdk_env.sh" | sudo tee -a ~/.bashrc
|
||||
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' | sudo tee -a ~/.bashrc
|
||||
|
||||
# Después — todo a /usr/bin/.bashrc
|
||||
RUN echo "PATH=..." | sudo tee -a /usr/bin/.bashrc
|
||||
RUN echo "export JAVA_HOME=..." | sudo tee -a /usr/bin/.bashrc
|
||||
RUN echo "export ANDROID_HOME=..." | sudo tee -a /usr/bin/.bashrc
|
||||
RUN echo "export ANDROID_SDK_ROOT=..." | sudo tee -a /usr/bin/.bashrc
|
||||
RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' | sudo tee -a /usr/bin/.bashrc
|
||||
RUN echo "export EMSDK_QUIET=1" | sudo tee -a /usr/bin/.bashrc
|
||||
RUN echo "source /emsdk/emsdk_env.sh" | sudo tee -a /usr/bin/.bashrc
|
||||
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' | sudo tee -a /usr/bin/.bashrc
|
||||
```
|
||||
|
||||
El entrypoint.sh ya se encarga de copiar `/usr/bin/.bashrc` a cada home.
|
||||
|
||||
### 3. Limpiar redundancias (líneas 155-159)
|
||||
Eliminar comentarios de "already installed" — no aportan valor.
|
||||
|
||||
## Todas las herramientas siguen disponibles
|
||||
|
||||
Nada cambia en las instalaciones — todo está en paths globales:
|
||||
|
||||
| Herramienta | Dónde |
|
||||
|---|---|
|
||||
| `code` | `/usr/bin/code` (base image) |
|
||||
| `docker` | `/usr/bin/docker` |
|
||||
| `docker-compose` | `/usr/local/bin/docker-compose` |
|
||||
| `gh` | `/usr/bin/gh` |
|
||||
| `node`/`npm`/`nvm` | `/usr/local/bin/` + `/root/.nvm` |
|
||||
| `python3`/`pip` | `/usr/bin/python3` |
|
||||
| `pandas`/`numpy`/etc | `pip install` global |
|
||||
| `kubectl` | `/usr/bin/kubectl` |
|
||||
| `flux` | `/usr/bin/flux` |
|
||||
| `conan` | `pip install` global |
|
||||
| `emsdk` | `/emsdk` |
|
||||
| `android-sdk` | `/opt/android-sdk` |
|
||||
| `claude` | `/usr/local/bin/claude` |
|
||||
|
||||
Los binarios están en `/usr/bin` y `/usr/local/bin` — paths que **cualquier usuario** puede usar. Solo cambia que ya no está restringido al usuario `aleleba`.
|
||||
|
||||
## Verificación
|
||||
|
||||
1. `docker build` — sin errores
|
||||
2. `docker run -e HOME_USER=aleleba` — funciona (mismo usuario)
|
||||
3. `docker run -e HOME_USER=aleleba-telus` — funciona (nuevo usuario, sin permission denied)
|
||||
4. Dos contenedores con diferente `HOME_USER` coexisten
|
||||
5. Cada usuario tiene sudo: `sudo apt-get update` funciona
|
||||
6. Todos los binarios accesibles: `code`, `docker`, `node`, `python3`, `adb`, `emcc`, `claude`, `gh`, `kubectl`
|
||||
Reference in New Issue
Block a user