![El bit Setuid parece no tener ningún efecto en bash](https://rvso.com/image/31653/El%20bit%20Setuid%20parece%20no%20tener%20ning%C3%BAn%20efecto%20en%20bash.png)
Estaba experimentando un poco y noté algo extraño: configurar el bit setuid en una copia de bash ubicada en /usr/bin/bash-test
parecía no tener ningún efecto. Cuando ejecuté una instancia de bash-test
, mi directorio de inicio no estaba configurado /root
y cuando ejecuté el whoami
comando desde bash-test
, no se informó que mi nombre de usuario fuera root
, lo que sugiere que bash-test
no se estaba ejecutando como root. Sin embargo, si configuro el bit setuid en whoami
, se me informa como root en cualquier shell, como se esperaba.
/usr/bin/bash
También intenté configurar el bit setuid y observé el mismo comportamiento.
¿Por qué bash no se ejecuta como root cuando le configuro el bit setuid? ¿Selinux podría tener algo que ver con esto?
Respuesta1
La explicación es un poco molesta: bash en sí es la razón. strace
es nuestro amigo (debe ser la raíz SUID para que esto funcione):
getuid() = 1000
getgid() = 1001
geteuid() = 0
getegid() = 1001
setuid(1000) = 0
setgid(1001) = 0
bash detecta que se ha iniciado SUID root (UID!=EUID) y usa su poder de root para desechar este poder, restableciendo EUID a UID. Y más tarde incluso FSUID, sólo para estar seguros...:
getuid() = 1000
setfsuid(1000) = 1000
getgid() = 1001
setfsgid(1001) = 1001
Al final: no hay posibilidad. Tienes que iniciar bash con la raíz UID (es decir, sudo).
Editar 1
La página de manual dice esto:
Si el shell se inicia con una identificación de usuario (grupo) efectiva que no es igual a la identificación de usuario (grupo) real y no se proporciona la opción -p, no se leen los archivos de inicio, las funciones del shell no se heredan del entorno, los SHELLOPTS , las variables BASHOPTS, CDPATH y GLOBIGNORE, si aparecen en el entorno, se ignoran y la identificación de usuario efectiva se establece en la identificación de usuario real. Si se proporciona la opción -p durante la invocación, el comportamiento de inicio es el mismo, pero la identificación de usuario efectiva no se restablece.
Pero esto no funciona para mí. -p
Ni siquiera se menciona entre las opciones de inicio. También lo intenté --posix
; tampoco funcionó.
Respuesta2
En cualquier caso, un programa raíz SUIDno esse ejecuta con el entorno de root ( $HOME
, configuración para el shell, lo que sea), se ejecuta con rootpotestades(es decir, puede eliminar cualquier archivo, cambiar permisos, etc.).