El bit Setuid parece no tener ningún efecto en bash

El bit Setuid parece no tener ningún efecto en bash

Estaba experimentando un poco y noté algo extraño: configurar el bit setuid en una copia de bash ubicada en /usr/bin/bash-testparecía no tener ningún efecto. Cuando ejecuté una instancia de bash-test, mi directorio de inicio no estaba configurado /rooty cuando ejecuté el whoamicomando desde bash-test, no se informó que mi nombre de usuario fuera root, lo que sugiere que bash-testno 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/bashTambié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. stracees 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í. -pNi 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.).

información relacionada