GNU/Linux >> Tutoriales Linux >  >> Linux

¿Setuid Bit parece no tener 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-test parecía no tener efecto. Cuando ejecuté una instancia de bash-test , mi directorio de inicio no se configuró en /root y cuando ejecuté el whoami comando de bash-test , mi nombre de usuario no se informó como root , sugiriendo que bash-test no se estaba ejecutando como root. Sin embargo, si configuro el bit setuid en whoami , se me informó como root en cualquier shell, como se esperaba.

Intenté configurar el bit setuid en /usr/bin/bash también y observó el mismo comportamiento.

¿Por qué bash no se ejecuta como root cuando configuro el bit setuid en él? ¿Selinux podría tener algo que ver con esto?

Respuesta aceptada:

La explicación es un poco molesta:bash en sí mismo es la razón. strace es nuestro amigo (debe ser raíz de 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 la raíz SUID (UID! =EUID) y usa su poder de raíz para desechar este poder, restableciendo EUID a UID. Y más tarde incluso FSUID, solo para estar seguro...:

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001

Al final:ninguna posibilidad. Tienes que iniciar bash con la raíz UID (es decir, sudo).

Editar 1

La página del manual dice esto:

Si el shell se inicia con la 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 de shell no se heredan del entorno, SHELLOPTS , BASHOPTS, CDPATH y GLOBIGNORE, si aparecen en el entorno, se ignoran y el ID de usuario efectivo se establece en el ID de usuario real. Si se proporciona la opción -p en 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 probé --posix; tampoco funcionó.


Linux
  1. ¿Agregué un usuario a un grupo, pero los permisos de grupo en los archivos siguen sin tener efecto?

  2. Linux:¿Suid no tiene efecto en los directorios con Linux?

  3. Linux:¿Ionice no tiene ningún efecto en las escrituras no sincronizadas (es decir, escrituras normales)?

  4. Linux:¿por qué no funciona Setuid?

  5. ¿Cómo hacer que el asterisco '*' en Zsh tenga el mismo comportamiento que Bash?

Bash Shebang

Ejecute el comando bash en la canalización de jenkins

¿Puedo hacer que un script siempre se ejecute como root?

¿La cuenta raíz siempre tiene UID/GID 0?

¿Es posible tener un historial de bash consciente del directorio?

¿Por qué el bit setuid funciona de manera inconsistente?