Ajustar permisos especiales en ficheros y directorios: Sticky bit, SUID Y SGID

Los permisos de los archivos en Linux/Unix se establecen mediante un número octal que permite ajustar los permisos del usuario, el grupo y otros y que varía entre 000 y 777. Y que determinan quién puede leer, escribir y/o ejecutar un fichero o directorio determinado.

Sin embargo, existen unos bits que nos ofrecen la posiblidad de tener unas medidas de protección adicional ajustando permisos especiales sobre ficheros y directorios: El sticky bit, el bit SGID y el bit SGUID.

Su representación en octal es la siguiente:

  • Sticky bit –> 1000.
  • Bit setgid –> 2000.
  • Bit setuid –> 4000.

Sticky bit.

El sticky bit se utilizaba antiguamente en sistemas UNIX para conseguir que el sistema operativo mantuviera en memoria los programas que tenían el sticky bit activado, con el fin de facilitar ejecuciones posteriores. Al permanecer el programa en memoria, no había necesidad de volver a cargarlo.

Como los sistemas de almacenamiento (discos duros, etc…) han mejorado mucho, éste uso ya no es necesario.

Hoy en día, utilizamos el sticky bit con ficheros y directorios.

Cuando se lo asignamos a un directorio, conseguimos que los elementos (ficheros y/o directorios) que haya en ese directorio sólo pueden ser renombrados o borrados por:

  • El propietario del elemento contenido en el directorio.
  • El propietario del directorio.
  • El usuario root.

El sticky bit prevalece sobre los permisos normales y los elementos, lo que quiere decir que tan sólo podrán renombrar o borrar los elementos los usuarios mencionados, aunque el resto de usuarios tenga permisos de escritura.

Ejemplo:

# chmod 1755 /home/aulas

Si queremos comprobar, en nuestro sistema, qué ficheros o directorios tienen el sticky bit activado, usaremos el comando find:

# find / -perm -1000 -exec ls -la {} \;

Bit suid.

El bit SUID activado sobre un fichero indica que todo aquél que ejecute el archivo va a tener, durante la ejecución, los mismos privilegios que quién lo creó. Así que es importante usarlo lo menos posible y con precaución. Si el administrador crea un fichero y activa el bit SUID, todo aquel usuario que lo ejecute, dispondrá, hasta que el programa finalice, de un nivel de privilegio total en el sistema.

El bit SUID o setuid se activa sobre un fichero añadiéndole 4000 a la representación octal de los permisos del archivo y otorgándole además permiso de ejecución al propietario del mismo.

# chmod 4775 /home/prueba

También puede activarse usando el modo simbólico:

# chmod +s /home/prueba

Si hacemos:

#chmod u+s /home/prueba

En la primera terna de los permisos, en lugar de la x, aparecerá una s o una S.

La S aparecerá si no hemos otorgado el permiso de ejecución correspondiente, en cuyo caso el bit no tiene efecto.

No olvidemos que, con ésto, un usuario normal, sin ningún privilegio especial en el sistema, cuando ejecuta el programa con el bit SUID activado, está trabajando con un usuario efectivo (EUID o Effective UID) que, en el caso de que el propietario sea el administrador, sera 0, lo que le otorga todo el poder del administrador.

Y ésto puede no tener mayor importancia en un ejecutable que haga una función muy concreta, pero, si el ejecutable fuera una copia de un shell, el usuario normal tendría todos los privilegios del root mientras no finalice la ejecución, es decir, hasta que no se teclee exit en la línea de órdenes!!!

Bit sgid.

Todo lo que acabamos de explicar con respecto al bit SUID es aplicable al bit SGID tan sólo que aplicado a nivel de grupo del fichero en lugar de propietario.

En el caso del bit SGID, en lugar de trabajar con el EUID del propietario, todo usuario que ejecute un programa al que se le ha activado el bit SGID, tendrá los privilegios del grupo al que pertenece el archivo.

El bit SGID se activa sobre un fichero sumando 2000 a la representación octal del permiso del fichero y dandole, además, permiso de ejecución a la terna de grupo.

Para ver si hemos activado el bit SGID veremos si, al hacer un ls -l, aparece s o S aparecerá en lugar de la x en esta terna.

Si el fichero es un directorio y no un archivo plano, el bit SGID afecta a los ficheros y subdirectorios que se creen en él. Y los ficheros y sudirectorios tendrán como grupo propietario al mismo que el directorio al que se le ha aplicado el bit SGID, siempre que el proceso que los cree pertenezca a dicho grupo.

=-=-=-=-=
Powered by Blogilo

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: