Hace unos días, después de realizar una instalación de una red de detección de intrusos dedicada, nos quedamos unos cuantos compañeros hablando sobre temas de seguridad. Durante la charla, hubo un apartado acerca de los scripts con bit suid y cómo, mientras en Solaris con la shell ksh se permitía la ejecución de un script suidado, el núcleo de Linux evitaba la ejecución de un script con suid. Antes de continuar con la entrada en el blog, es recomendable conocer el funcionamiento del bit suid. Veámoslo brevemente:
El suid en ficheros es un permiso muy especial, que permite a un usuario con permisos de ejecución para dicho fichero, tomar los permisos del dueño del fichero durante su ejecución. Un ejemplo sencillo para entender su funcionamiento el el binario passwd, que permite cambiar las contraseñas de los usuarios en entornos Unix/Linux. Este binario tiene como dueño el usuario root (administrador) y el bit suid activado, permitiendo de esta forma, a un usuario no privilegiado poder cambiar su contraseña. Sino sería imposible/muy inseguro que un usuario cambiara su contraseña, puesto que necesitaría permisos para leer y escribir en el fichero de contraseñas.
Para conceder los permisos suid a un fichero se realiza mediante el comando chmod con flag u+s o valor 4XXX de forma octal. Por ejemplo chmod 4711 binario. Cuando se lista un fichero, este bit se identifica con la letra “S” o “s” en la posición de ejecución del fichero para el usuario. Valdrá “s” cuando aparte del bit suid, tenga activado el bit de ejecución, mientras que valdra “S” cuando no tenga el bit de ejecución activado.