Cómo Setuid Permite a los Usuarios Ejecutar Archivos con Privilegios Elevados

Bg Setuid

Cuando ejecutas un archivo ejecutable en Linux, normalmente se ejecuta con el ID de usuario y grupo actual. Sin embargo, hay momentos en los que necesitas ejecutar ese archivo como otro usuario (como root). En lugar de cambiar tu cuenta de usuario, puedes hacer uso de setuid para ejecutar el ejecutable como el propietario del archivo y no como el usuario actual. Aquí explicaremos cómo funciona setuid y cómo permite a los usuarios ejecutar ejecutables/binarios con privilegios elevados.

¿Cómo Funciona Setuid?

Setuid significa SET User ID on execution. Supongamos que tenemos un ejecutable llamado “identity” creado por el usuario root. Cuando lo ejecutas, se ejecutará con tu ID de usuario, ID de grupo y privilegios de usuario. Si el bit setuid está configurado en el archivo “identity”, cuando lo ejecutes, se ejecutará como el usuario root y con sus privilegios de usuario.

Como ilustración, primero podemos verificar la propiedad del archivo “identity” y confirmar que es propiedad del usuario root. La cadena de permisos también muestra los bits ejecutables (x) configurados para el usuario, grupo y otros.

El usuario “john1” ejecuta el archivo “identity”, que se convierte en un proceso al ejecutarse. Como se muestra en la lista de procesos, el proceso se crea y se ejecuta bajo el nombre de usuario y ID de usuario “john1”.

Setuid John Id Owner

A continuación, como usuario root, configuramos el bit setuid del archivo “identity”:

chmod u+s /usr/bin/identity

“u” denota que el bit setuid (+s) debe configurarse solo para el usuario.

Para el propietario, en la parte ejecutable de la cadena de permisos podemos ver que “x” ha sido reemplazado por “s.” Siempre que encuentres “s” para un ejecutable, significa que el bit setuid ha sido configurado en él.

La variante numérica del comando chmod también se puede usar como se muestra a continuación.

chmod4755/usr/bin/identity

La adición de 4 en la cadena de permisos numéricos denota la inclusión del bit setuid.

Lo siguiente es lo que sucede cuando “john1” ejecuta el archivo “identity” nuevamente. Al observar la lista de procesos en ejecución, ahora podemos ver que el proceso es creado y ejecutado por el usuario “root” en lugar de “john1.”

Setuid John Ids Ownder

Uso Importante del Bit Setuid

La mayoría de las veces escucharás de expertos que no deberías ejecutar aplicaciones como el usuario root. Sin embargo, hay instancias en las que ciertos archivos necesitan ejecutarse con permisos de root. Por ejemplo, la utilidad passwd que viene instalada por defecto en los sistemas Linux tiene el bit setuid configurado en ella.

La razón es simple: La información de la contraseña de un usuario se almacena en los archivos “/etc/passwd” y “/etc/shadow”, que solo pueden ser modificados por “root.” Cuando “john1” intenta cambiar la contraseña para sí mismo, necesitará tener el permiso para modificar la información en los dos archivos mencionados anteriormente. Tener el bit setuid configurado en passwd permite que “john1” tenga temporalmente permisos de root para cambiar la contraseña del usuario y también actualizar la información en los dos archivos.

Riesgo de Seguridad de Setuid

Si no tienes cuidado, un atacante puede explotar los binarios setuid para controlar tu sistema. Normalmente, los usuarios no deberían tener programas setuid instalados, especialmente setuid a usuarios que no sean ellos mismos. Más importante aún, no deberías tener ningún binario habilitado setuid para el usuario root en tu carpeta de inicio. Estos suelen ser caballos de Troya o malware.

Conclusión

Setuid solo se puede establecer en archivos ejecutables. Asimismo, el bit setgid también se puede establecer, lo que permite a todos los miembros de un grupo ejecutar un ejecutable con permisos de propietario.

Ten en cuenta que los bits setuid y setgid son sensibles a la seguridad y deben ser utilizados solo por administradores de sistemas calificados.

Lee a continuación:

  • Cómo Usar el Bit Sticky para Administrar Archivos en Directorios Compartidos en Linux
  • Cómo Hacer Comprobaciones de Ortografía en la Terminal de Linux
  • Usando los Comandos find, locate, which y whereis para Buscar Archivos en Linux