Permisos especiales de archivos en Linux

,
Linux en Chrome OS para 2018

En artículos anteriores hemos hablado ya sobre los permisos en Linux. Entre los más interesantes que puedes consultar están «Todo sobre propietarios de archivos y permisos en Linux» y «Cómo establecer permisos recursivos en Linux«. Hoy hablaremos sobre los permisos especiales en archivos y directorios, los cuales solucionan algunos problemas que pueden presentarse debido a la forma en que está construido el sistema de archivos de Linux. Por ejemplo, un solo grupo puede ser el grupo propietario para un objeto dado (dígase archivo o directorio). Quien quiera acceder a ese objeto debe ser miembro del grupo que posee el archivo (a menos que, como propietario del archivo, desees dar permiso a todos los demás).

Intentar configurar muchos grupos y usuarios para tener acceso a los archivos correctos puede ser una tarea difícil. Cada usuario tiene un grupo primario y estos, a su vez, pueden ser miembros de otros grupos (grupos secundarios). Esto es un problema cuando se comparten archivos entre miembros que están en grupos secundarios «compartidos». Veamos la siguiente situación:

El usuario bob (grupo primario: staff, grupo secundario: project), el usuario sue (grupo primario: payroll, grupo secundario: project) y el usuario steve (grupo primario: acct, grupo secundario: project) están trabajando en un proyecto conjunto en el directorio /home/project, por lo que comparten varios archivos. El usuario bob crea un nuevo archivo, al inspeccionar los permisos de este con el comando «ls -l», tenemos que:

Aunque todos los usuarios están en el mismo grupo (project), los usuarios sue and steve no pueden ver el contenido del archivo, ya que no son miembros de grupo staff. El archivo anterior solo permite acceso al propietario (bob) y a los miembros del grupo staff. Para que los usuarios sue and steve puedan accer al archivo en cuestión el usuario bob puede cambiar el grupo propietario del archivo o asignarle permiso de lectura al resto de los usuarios.

Esto realmente no es una solución factible, pues no podemos asumir que los usuarios cada vez que agreguen un nuevo archivo cambiarán los permisos. Existe una forma de solucionar esto de forma más práctica. Es posible establecer un bit adicional o espacial en el directorio compartido. Esto hace que todos los usuarios que tienen acceso hereden el propietario del grupo del directorio en todos los objetos que crean dentro de ese directorio. Hay que tener en cuenta que esta técnica solo es aplicable a los nuevos archivos creados dentro del directorio al cual se le aplicó el bit especial.

Permisos especiales

En los sitemas de archivos Linux se encuentran disponibles los siguientes permisos especiales o bit especiales:

  • SUID (Set User ID) –  Permite a los usuarios ejecutar un programa como si ellos fueran el usuario propietario del programa. En la mayoría de los casos el usuario propietario es el usuario root. El valor numérico para este permiso es 4XXX, donde «XXX» es el valor numérico de los permisos tradicionales.
  • SGID (Set Group ID) – Cuando es establecido en un directorio para cada nuevo archivo creado dentro de ese directorio, le asigna de forma automática el grupo propietario del directorio. El valor numérico es 2XXX. En cambio, cuando es establecido en un archivo, SGID permite a los usuarios ejecutar un programa como si ellos fueran el grupo propietario del archivo.
  • Sticky bit – Este permiso es usado para evitar que los usuarios que no sean propietarios puedan borrar archivos en un directorio común o compartido. El valor numérico para este permiso es 1XXX. En un directorio con el Sticky bit activo, solo el propietario del archivo o del directorio puede borrar el archivo. El usuario root siempre puede borrar los archivos.

Los permisos especiales en Linux pueden establecerse tanto de forma numérica como simbólica mediante el comando chmod.

Estableciendo permisos especiales

La primera forma para establecer los permisos especiales es haciendo uso del modo numérico al ejecutar el comando chmod. Todos los permisos deben ser sobreescritos al usar este modo, por ejemplo para establecer el SUID a un determiando programa:

Pueden establecerse varios bits de forma simultánea. El siguiente ejemplo establece los bits SUID (2) y SGID (4) para un determinado programa (lo cual 2 + 4 = 6):

Si solo queremes establecer el SGID a un directorio:

La segunda forma de establecer permisos especiales es a través del modo simbólico. Por ejemplo, para agregar el SUID a un archivo:

Para el caso de un directorio mediante el método simbólico:

El «Sticky bit» es usado mayormente para asegurarse de que los usuarios, en un directorio compartido, no puedan borrar los archivos de otros. Un buen ejemplo de esto es el directorio /tmp:

La «t» en el permiso de ejecución para otros indica que es un directorio con el sticky bit activo. El directorio /tmp es una ubicación donde todos los usuarios pueden crear archivos. Sin embargo, el permiso que permite a los usuarios crear archivos también les permite borrarlos. Agregando el permiso de sticky bit, el significado de permiso de escritura para directorios cambia. Ahora los únicos usuarios que pueden borrar archivos en el directorio son:

  • El propietario the archivo.
  • El propietario del directorio (el cual normalmente es el usuario root).
  • El usuario root.

Cualquiera puede agregar un archivo en este directorio, siempre y cuando no sobreescriba el archivo de otro usuario.

Buscando archivos mediante permisos especiales

Los atacantes que infringen un sistema a menudo intentan establecer ciertos archivos para que tengan el bit SUID o SGID establecido. Esto permite que una cuenta normal realice todo tipo de tareas no autorizadas.

El comando find tiene un opción que permite localizar archivos que posean determiandos permisos. Esto permite encontrar brechas de seguridad asociadas con los bits SUID y SGID. En el siguiente ejemplo se listan todos los archivos del sistema que tiene el bit SUID establecido:

Puede resultar últil redireccionar la salida del comando anterior en un archivo de texto la primera vez que haz instalado el sistema y ejecutarlo cada cierto tiempo para analizar las diferencias con el comando diff:

Punto Final

Debes tener presente que los permisos especiales solo son usados cuando es necesario, no siempre. Al establecer los permisos SUID y SGID en un archivo ejecutable puede representar un riesgo de seguridad, incluso cuando es usado adecuadamente. Estos permisos le permiten a un simple usuario reemplazar código dentro del archivo. Imaginarás que esto representa un hueco de seguridad en el sistema. Y así es.

En próximos artículos hablaremos sobre el uso de ACLs (Access Control Lists) que permite realizar ajustes más específicos a los permisos de ususarios.

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *