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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user