Cuando ejecuta un archivo ejecutable en Linux, generalmente se ejecuta con el ID de usuario y grupo actual. Sin embargo, hay momentos en los que necesita ejecutar ese archivo como otro usuario (como root). En lugar de cambiar su cuenta de usuario, puede utilizar setuid para ejecutar el ejecutable como propietario del archivo y no como usuario actual. Aquí explicaremos cómo funciona setuid y cómo permite a los usuarios ejecutar ejecutables/binarios con privilegios escalados.
¿Cómo funciona setuid?
Setuid significa SET ID de usuario en ejecución. Digamos que tenemos un ejecutable llamado «identidad» creado por el usuario root. Cuando lo ejecute, se ejecutará con su ID de usuario, ID de grupo y privilegios de usuario. Si el bit setuid está configurado en el archivo de «identidad», cuando lo ejecute, se ejecutará como el usuario raíz y sus privilegios de usuario.
Como ilustración, primero podemos verificar la propiedad del archivo de «identidad» y verificar que sea propiedad del usuario raíz. La cadena de permiso también muestra los bits ejecutables (x) establecidos para el usuario, el grupo y otros.
El usuario «john1» ejecuta el archivo de «identidad», que se convierte en un proceso en ejecución. Como se muestra en la lista de procesos, el proceso se crea y se ejecuta con el nombre de usuario y la ID de usuario «john1».
A continuación, como usuario root, configuramos el bit setuid del archivo de «identidad»:
chmod u+s /usr/bin/identity
“u” indica que el bit setuid (+s) debe configurarse solo para el usuario.
Para el propietario, en la parte ejecutable de la cadena de permiso podemos ver que “x” ha sido reemplazada por “s”. Cada vez que encuentre una «s» para un ejecutable, significa que se ha configurado el bit setuid.
La variante numérica de la chmod
El comando también se puede usar como se muestra a continuación.
chmod 4755 /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 de nuevo el archivo “identity”. Mirando la lista de procesos en ejecución, ahora podemos ver que el usuario «raíz» crea y ejecuta el proceso en lugar de «john1».
Uso importante del bit setuid
La mayoría de las veces escuchará de los expertos que no debe ejecutar aplicaciones como usuario root. Sin embargo, hay casos en los que ciertos archivos deben ejecutarse con permiso de root. por ejemplo, el passwd
La utilidad que viene instalada por defecto en los sistemas Linux tiene configurado el bit setuid.
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” intente cambiar la contraseña por sí mismo, deberá tener permiso para modificar la información en los dos archivos mencionados. Tener el bit setuid activado passwd
permite que “john1” tenga temporalmente permisos de raíz para cambiar la contraseña de usuario y también actualizar la información en los dos archivos.
Riesgo de seguridad de Setuid
Si no tiene cuidado, un atacante puede explotar los binarios setuid para controlar su sistema. Los usuarios normalmente no deberían tener programas setuid instalados, especialmente setuid para usuarios que no sean ellos mismos. Lo más importante es que no debe tener ningún binario habilitado para setuid para el usuario raíz en su carpeta de inicio. Suelen ser caballos de Troya o malware.
Conclusión
Setuid solo se puede configurar en archivos ejecutables. Asimismo, la setgid
bit también se puede configurar, lo que permite a todos los miembros de un grupo ejecutar un ejecutable con permisos de propietario.
Tenga en cuenta que setuid
y setgid
Los bits son sensibles a la seguridad y deben ser utilizados únicamente por administradores de sistemas calificados.
Lea a continuación: