borré /usr/bin/id probando el setuid — qué pasó y por qué no se prueba así

Para saber si el bit setuid elevaba copié busybox sobre /usr/bin/id (busybox elige el applet por
argv[0] y necesitaba un nombre válido) y después borré «mis» copias de prueba. Una era el `id` del
sistema, y no quedaba otro: /bin/id tampoco existía. El usuario se lo encontró de frente: «claude:
line 23: id: not found» y «-bash: /usr/bin/id: No such file or directory».

Restaurado como sus hermanos de identidad —whoami y groups apuntan a ../../bin/busybox— y comprobado
con id de root, de sergio y con el `id -un` que usa el lanzador. Barrido: 0 enlaces colgados en
/bin, /usr/bin, /sbin y /usr/sbin.

La lección es de método: para probar una propiedad del sistema no se usa un nombre que el sistema ya
ocupa. La sonda correcta fue la que terminé escribiendo —cinco líneas de C a un nombre inventado—.
Y es la misma familia que el /etc/shadow del §6.51: la caja no avisa cuando le falta algo esencial,
se entera el que lo usa.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-09-18 15:39:14 +00:00
co-authored by Claude Opus 5
parent 9db1845f22
commit 5999aeda45
+25
View File
@@ -3243,6 +3243,31 @@ ahí llevaba quién sabe cuánto igual de mudo. Se creó el `/etc/profile` con e
caché de `zig cc` vive en `/work/zig-cache` (54 M) y **no** en la raíz de 5,9 G, por lo aprendido en
§6.50 quinquies.
### 6.53 🔧 Borré `/usr/bin/id` probando el setuid *(2026-09-18)*
Para saber si el bit setuid elevaba en esta caja copié `busybox` sobre **`/usr/bin/id`** —porque
busybox elige el applet por `argv[0]` y necesitaba un nombre válido— y después borré «mis» copias de
prueba. Una de ellas **era el `id` del sistema**. Resultado, del lado del usuario:
```
$ claude --dangerously-skip-permissions
/usr/bin/claude: line 23: id: not found
$ id
-bash: /usr/bin/id: No such file or directory
```
No quedaba ninguno: `/bin/id` tampoco existía. Se restauró como sus hermanos de identidad —`whoami`
y `groups` apuntan a `../../bin/busybox`— y se comprobó con `id` de root, de `sergio` y con el
`id -un` que usa el lanzador. Barrido posterior: **0 enlaces colgados** en `/bin`, `/usr/bin`,
`/sbin` y `/usr/sbin`, y presentes los ocho comandos de los que dependen el arranque y el lanzador.
> **La lección, que es de método:** para probar una propiedad del sistema —¿eleva el setuid?— **no se
> usa un nombre que el sistema ya ocupa**. La sonda correcta era la que terminé escribiendo: cinco
> líneas de C compiladas con el `cc` nuevo a un nombre inventado (`probe-suid`). Copiar sobre `id`
> fue elegir el camino corto, y el camino corto se llevó un binario del que depende hasta el script
> que abre al agente. Es la misma familia que el `/etc/shadow` del §6.51: **la caja no avisa cuando
> le falta algo esencial — se entera el que lo usa**.
### 6.51 🔥 Me dejé afuera de la caja — 20 minutos caída, y tres causas encadenadas *(2026-09-17)*
Crear una cuenta de usuario tiró el servidor de producción. Queda escrito entero porque **ninguna de