2 jul 2011

SUID, SGID, Sticky…Los otros permisos de ficheros

Si en el artículo de hace unos días vimos las operaciones con los permisos básicos (lectura, escritura y ejecución) hoy vamos a ver una serie de permisos extras, que podemos asignarles a los ficheros y directorios de nuestro Unix y Linux. Estos permisos nos posibilitan hacer cosas tan interesantes como que un proceso corra con otro usuario diferente al que lo ejecuta o que un directorio tenga permisos un tanto “especiales”.

Estos permisos son los siguientes:

  • set-user-ID-on-execution (AKA SUID) permite que, al ejecutarse un fichero, se realice bajo los privilegios del propietario. Por ejemplo, si necesitamos ejercer los privilegios de root para poder acceder a cierto módulo, escribir en logs, leer/escribir de dispositivos, etc.
  • set-group-ID-on-execution (AKA SGID) permite que, al ejecutarse un fichero, se realice bajo los privilegios del grupo propietario del fichero.
  • Sticky bit: Este permiso, si se asigna a un ejecutable, nos permite que este se guarde directamente en memoria para que al ejecutarse las siguientes veces, sea leido desde allí. Realmente lo que hace es guardar copia en la swap, por lo que en los sistemas modernos, poco o nada nos va a beneficiar. Lo que todavía resulta muy interesante es al asignarlo a un directorio. Si se lo asignamos al directorio, nos permite que los ficheros creados en el mismo, independientemente de los permisos que tengan, únicamente podrán ser eliminados y/o renombrados por el propietario de los ficheros residentes en el mismo. Un claro ejemplo de esto es el directorio /tmp.

Como en los permisos básicos, para asignar estos permisos, podemos usar el modo simbólico o el modo octal. Para el modo octal, deberemos agregar en la primera cifra…

  • chmod 4xxx fichero para activar el modo Suid
  • chmod 2xxx fichero para activar el modo Sgid
  • chmod 1xxx fichero para activar el modo sticky bit

Un poco mas sencillo es el modo simbólico:

  • chmod +s fichero para activar el modo suid
  • chmod g+s fichero para activar el modo sgid
  • chmod +t fichero para activar el sticky bit

Para ver un ejemplo de esto del SUID, he hecho una copia del programa id, que nos devuelve el usuario con el cual le estamos ejecutando y el resultado es el siguiente:

 $ ls -l id-r-xr-xr-x  1 root  wheel  63632  8 jun 15:44 id

como root, ejecutamos el comando chmod para cambiarlo a suided:

# chmod u=+s id

o bien:

# chmod 4555 id

dando como resultado:

-r-sr-xr-x  1 root    wheel  63632 Jun  8 15:44 id

Ahora, si ejecutamos el comando id modificado, obtendremos lo siguiente:

$ ./iduid=501(jesusdml),gid=20(staff),euid=0(root),groups=20(staff).....

Como se puede apreciar, aunque seamos el usuario jesusdml, en este caso, el euid o id efectivo, es el de root. Si dejamos el fichero tal y como estaba, obtendremos lo siguiente:

# chmod u=-s id

o bien:

# chmod 0555 id

dará como resultado el fichero con los permisos originales y por tanto con la respuesta original:

$ ./iduid=501(jesusdml),gid=20(staff),groups=20(staff),101...

Por supuesto, antes de ir dando SUID o SGID a nuestro software, hay que tener cuidado porque estos programas con ejecutados con el usuario propietario de los mismos. Esto significa que cualquier otro usuario que los ejecute, podrá tener acceso como tal y son víctimas frecuentes de exploits locales.

Cabe destacar que si ejecutamos un script con SUID o SGID, los programas que se ejecuten dentro del script no correrán con estas propiedades.

Saludos,

No hay comentarios:

Publicar un comentario