27 de juny 2006

Permisos Especiales Linux

SUID y SGID
Existen ocasiones que los usuarios necesitan ejecutar algún programa que requiere de privilegios. Un ejemplo de esto es el uso del programa passwd para cambiar la contraseña.
Sería un error darle a los usuarios los privilegios necesarios para que puedan ejecutar esta clase de programas ya que el usuario podría cambiarse de grupo o crear una cuenta con privilegios de root. Para que esto no suceda, se implemento en Unix, un sistema por el cual un programa que cuente con SUID o SGID puede ser ejecutado con los privilegios del dueño y/o grupo del programa.
Para que quede más claro se tiene que saber que cada usuario esta identificado por el sistema con un número de identificación tanto para él, como para el grupo. Este número se denomina UID (user ID) para el caso de los usuarios y GID para el caso de los grupos. Por ejemplo, un usuario podría tener un UID 100 y un GID 500. En el caso del root, este tiene UID 0 y GID 0. Lo que se efectúa con el sistema SUID es una adquisición temporal de un UID o GID distinto al propio cuando se está ejecutando el programa. Cuando un programa cambia de UID se denomina SUID ( se establece UID) y cuando cambia de GID se denomina SGID (se establece GID) Un programa puede ser SUID y SGID al mismo tiempo.
Para darse cuenta si un programa es SUID o SGID basta con hacer un listado largo con el comando ls -l y se verá que donde tendría que estar una x, que asigna permisos de ejecución, va a estar una letra s.
Algunos archivos con este tipo de permisos pueden resultar ser un problema de seguridad. Para solventar en cierta medida este punto podríamos cambiar los permisos de los programas afectos por este tipo de permisos que no lo necesiten. Sería sencillamente ejecutando: chmod -s archivo.
También podríamos eliminar aquellos programas con este tipo de permiso que sean utiles. Podríamos también asegurarnos que no se puede escrbir en los script de SUID e instalar alguna herramienta que verifique los archivos suid del sistema como pueda ser COPS.

STICKY BIT
Este es un bit que tiene un significado para los directorios. Cuando este bit está activo, hace que un usuario sólo pueda borrar los ficheros que son de su propiedad en dicho directorio. Esto es particularmente útil en el directorio /tmp.
El sticky bit se activa como: $ chmod +t directorio