⚠ un overlay abierto se traga TODA la máquina: el /etc/shells y el chsh no estaban donde parecía

Mientras se escribían el /etc/shells y el `chsh -s /bin/zsh sergio` había un overlay del FHS
abierto —de un `takana install` sin --prefix sin commitear— y las DOS escrituras cayeron dentro,
aunque no tenían nada que ver con ese paquete ni pasaron por takana (un `cat >` y el chsh de
shadow). Medido con `mount --bind /` no recursivo: en el /etc REAL no había shells y sergio seguía
en /bin/bash, mientras la pantalla mostraba las dos cosas hechas. Un discard o un reinicio lo
borraba y nadie se habría enterado hasta el siguiente login.

Resuelto con commit (5 ficheros promocionados: passwd, passwd-, shells, zsh, zsh-5.9). El
desmontaje perezoso del §5.10 se ganó el sueldo ahí mismo: saltó en /bin y en /usr/bin.

La lección, que es más grande que el caso: `install` sin --prefix NO es un experimento acotado a
ese paquete — cambia la semántica de escritura de la máquina entera hasta que alguien commitea o
descarta, y el overlay no avisa por ningún lado. Como mínimo `takana status` debería salir al
entrar, y el `overlay listo` del install no debería leerse como «terminé». Anotado en SDD 28 §5.11.
This commit is contained in:
Sergio
2026-09-21 20:43:22 +00:00
parent b6e20829e4
commit bf6037c832
+23
View File
@@ -793,6 +793,29 @@ si aparece.
setuid root en una distro de artefactos sellados necesita contestar quién lo pone, quién lo
verifica y qué significa que el hash no lo cubra. Anotado, sin decidir.
⚠⚠ **Y lo que de verdad hay que llevarse de esto: un overlay abierto se traga TODA la máquina.**
Mientras el `/etc/shells` y el `chsh` se escribían, había un overlay abierto sobre el FHS —de un
`takana install` sin `--prefix` que alguien había dejado sin commitear— y **las dos escrituras
cayeron dentro de él**, aunque no tenían nada que ver con ese paquete ni pasaron por takana (fueron
un `cat >` y el `chsh` de shadow). Medido con un `mount --bind /` no recursivo, que enseña el
directorio real sin el overlay encima:
| | `/etc` real | lo que se veía |
|---|---|---|
| `/etc/shells` | **no existe** | existe |
| shell de `sergio` | **`/bin/bash`** | `/bin/zsh` |
O sea: el trabajo estaba hecho «según la pantalla» y **un `discard` o un reinicio lo borraba**. Se
resolvió con `commit` (5 ficheros promocionados: `passwd`, `passwd-`, `shells`, `zsh`, `zsh-5.9`) y
ahí el desmontaje perezoso del §5.10 se ganó el sueldo: saltó en `/bin` **y** en `/usr/bin`.
**`install` sin `--prefix` no es «un experimento para ese paquete»: cambia la semántica de
escritura de la máquina entera hasta que alguien commitea o descarta.** Cualquiera que toque `/etc`
mientras tanto —otro agente, un servicio, un humano por ssh— escribe en el upper sin enterarse. El
overlay no avisa: no hay nada en el prompt, ni en `mount` a simple vista, ni un aviso al entrar.
Como mínimo `takana status` tendría que salir en el arranque de sesión, y `install` debería decir
**qué queda pendiente** en vez de un `overlay listo` que se lee como «terminé». Anotado.
Consecuencia práctica mientras tanto: **los cambios de shell y de contraseña en esta caja los hace
root**. Y una observación que sale de mirar esto: no hay `/etc/shadow`; las contraseñas viven en
`/etc/passwd`, que es legible por todos, con hash DES clásico. No lo toqué — es su propia unidad de