⚠ 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 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. 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 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 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 `/etc/passwd`, que es legible por todos, con hash DES clásico. No lo toqué — es su propia unidad de