Domina los permisos de archivos en GNU/Linux

jun. 1, 2024

Este artículo forma parte de una serie:

En el último capítulo nos adentramos en las profundidades de GNU/Linux, explorando la gestión de usuarios, la organización del sistema de archivos y la configuración básica del entorno. Aprendimos sobre la importancia del usuario root, la administración de usuarios y grupos, y la estructura jerárquica del sistema de archivos. Estos conceptos son fundamentales para comprender el funcionamiento de Linux y prepararnos para tareas más avanzadas.

En este capítulo, vamos a profundizar en la gestión de permisos de archivos y directorios, un aspecto crucial para mantener la seguridad y el control en un sistema multiusuario como GNU/Linux. Además, abordaremos el uso de umask para definir permisos predeterminados en nuevos archivos y directorios, proporcionando una base sólida para cualquier usuario o administrador de sistemas.

Conociendo el sistema de permisos en Linux

Los ficheros en Linux tienen permisos asociados que controlan quién puede leer, escribir o ejecutarlos. Como en cualquier sistema operativo moderno en los que múltiples usuarios pueden acceder a los mismos recursos, es importante tener un sistema de control para determinar qué usuarios pueden hacer qué con los ficheros. GNU/Linux no iba a ser menos, su sistema de permisos se enfoca en tres categorías:

  • Usuario (u): El propietario del fichero.
  • Grupo (g): Los usuarios que forman parte del grupo al que pertenece el fichero.
  • Otros (o): Todos los demás usuarios.

Para ver los permisos de un fichero, se puede usar el comando ls -l:

  
  ls -l archivo.txt
  

La salida de este comando mostrará algo como:


  drwxr-xr-x  2 user group 4096 mar 10 12:34 .
  drwxr-xr-x  4 user group 4096 mar 10 12:30 ..
  -rw-r--r--  1 user group  220 mar 10 12:34 .bash_logout
  -rw-r--r--  1 user group 3771 mar 10 12:34 .bashrc
  -rw-r--r--  1 user group  807 mar 10 12:34 .profile
  -rwxr-xr-x  1 user group   98 mar 10 12:34 script.sh
  

El primer grupo de caracteres es el de los permisos, empieza por el tipo de fichero (d para directorio, - para fichero normal y l para enlace simbólico). Los siguientes tres caracteres indican los permisos del propietario, los siguientes los del grupo y el último trío los de los permisos para los demás usuarios. En el primer caso “drwxr-xr-x”, el propietario puede leer, escribir y ejecutar, el grupo y los demás usuarios pueden leer y ejecutar. El desglose es el siguiente:

  • r: Permite leer el fichero.
  • w: Permite escribir en el fichero.
  • x: Permite ejecutar el fichero.

Junto a los permisos podemos observar también el propietario del fichero y el grupo al que pertenece, además de otra información relevante que ahora mismo no nos interesa. Los permisos en Linux tienen una equivalencia numérica (octal), que se puede ver a continuación:

  • r (Lectura): 4
  • w (Escritura): 2
  • x (Ejecución): 1
  • - (Sin permiso): 0

Para saber los permisos de un fichero en formato numérico, se puede usar el comando stat:


  stat archivo.txt
  

Cuya salida nos mostrará algo similar a esto:


  Fichero: archivo.txt
  Tamaño: 6610      	Bloques: 16         Bloque E/S: 4096   fichero regular
  Device: 252,0	Inode: 31101793    Links: 1
  Acceso: (0664/-rw-rw-r--)  Uid: ( 1001/betazetadev)   Gid: ( 1001/betazetadev)
  Acceso: 2024-05-27 15:58:21.474596420 +0200
  Modificación: 2024-05-27 15:58:21.475596402 +0200
      Cambio: 2024-05-27 15:58:21.476596383 +0200
      Creación: 2024-05-27 15:58:21.474596420 +0200
       

Podemos obeservar que los permisos de acceso del fichero son 0664 (el “0” indica que se trata de un número en notación octal), lo que significa que el propietario y el grupo pueden leer y escribir, mientras que los demás usuarios solo pueden leer. El equivalente a rw-rw-r--, por lo que según esto sabemos que el número máximo en notación octal es 7 (4+2+1), así que el máximo valor que se puede asignar es 777, que sería el equivalente a rwxrwxrwx, la opción menos restrictiva en cuanto a permisos ya que permite hacer todo a todos los usuarios.

El permiso más restrictivo sería 0, que no permitiría hacer nada al tipo de usuario al que se le asignara, por ejemplo, si se le asignara 000 a un fichero, ni el propietario, ni el grupo, ni los demás usuarios podrían hacer nada con él. Algo que no tendría mucho sentido, pero que se puede hacer.

Es importante destacar que una gestión inadecuada de los permisos puede llevar a problemas de seguridad, por lo que es importante conocer los requisitos de seguridad de cada uno de los ficheros y directorios de nuestro sistema, sobre todo los que contienen información sensible o importante, en raras ocasiones será necesario hacer disponibles los ficheros para todos los usuarios.

Existen diferentes formas de gestionar los ficheros de un sistema GNU/Linux, a pesar de poder hacerse también a través de una interfaz gráfica de forma fácil y sencilla utilizando un explorador de archivos, la forma más flexible de hacerlo es a través de la terminal. Además, al conocer cómo funcionan y poder cambiarlos directamente desde la terminal se puede hacer gestiones de mantenimiento y/ó reparación de forma más rápida sin necesidad de tener que abrir un programa. Muchas veces en Linux se trabaja en servidores que no tienen interfaz gráfica.

Para cambiar los permisos de un fichero, se puede usar el comando chmod:


  chmod u+x script.sh   # Añade permiso de ejecución para el propietario
  chmod g+w archivo.txt # Añade permiso de escritura para el grupo
  chmod o-r archivo.txt # Elimina permiso de lectura para otros
  chmod a=r archivo.txt # Asigna permisos de solo lectura para todos
  

También podemos utilizar la notación octal para cambiar los permisos de un fichero:


  chmod 755 script.sh   # Asigna permisos de lectura, escritura y ejecución para el propietario, y permisos de lectura y ejecución para el grupo y otros
  chmod 700 script.sh   # Asigna permisos de lectura, escritura y ejecución para el propietario, sin permisos para el grupo y otros
  chmod 664 archivo.txt # Asigna permisos de lectura y escritura para el propietario y el grupo, y permisos de lectura para otros
  chmod 640 archivo.txt # Asigna permisos de lectura y escritura para el propietario, y permisos de lectura para el grupo, sin permisos para otros
  chmod 444 archivo.txt # Asigna permisos de solo lectura para el propietario, el grupo y otros
    

De esta forma podemos gestionar eficientemente todos y cada uno de los ficheros de nuestro sistema, aunque no es la única herramienta que tenemos a nuestra disposición para gestionar los permisos de nuestros ficheros, chmod es una de las más importantes y más utilizadas. Con la herramienta chown podemos cambiar el propietario de un fichero:


  sudo chown nuevo_usuario archivo.txt
  

Y con chgrp podemos cambiar el grupo al que pertenece:


  sudo chgrp nuevo_grupo archivo.txt
  

La combinación de estos comandos nos permite tener un control total sobre los ficheros de nuestro sistema, pudiendo asignar permisos personalizados a cada uno de ellos, y cambiar el propietario y el grupo al que pertenecen. Es importante tener en cuenta que algunos ficheros del sistema no deben ser modificados, ya que pueden causar problemas si se modifican sus permisos. Además, como mencionábamos anteriormente, una gestión inadecuada de los permisos puede llevar a problemas de seguridad, por lo que es importante conocer los requisitos de seguridad de cada uno de los ficheros y directorios de nuestro sistema y servicios.

Qué es umask y cómo se utiliza

Existe otro concepto importante en la gestión de permisos en Linux, el umask es un valor que se resta a los permisos predeterminados de los archivos y directorios creados por un usuario. Generalmente, en sistemas como Ubuntu, el umask por defecto es 0002, lo que significa que se resta el permiso de escritura para otros usuarios. Es decir, umask determina los permisos que se asignarán por defecto a los nuevos archivos y directorios, restando su valor a 666 para archivos y a 777 para directorios. Podemos comprobar el valor actual con el comando umask:


  umask
  

La salida de este comando mostrará algo como:


  0002
  

Conociendo que los permisos predeterminados para archivos y directorios en Linux son 666 (rw-rw-rw-) y 777 (rwxrwxrwx) respectivamente, se pueden calcular los permisos finales restando el valor de umask a estos valores. Por ejemplo, una umask de 0002 eliminará el permiso de escritura para otros usuarios:

  • Archivos: 666 - 002 = 664 (rw-rw-r–)
  • Directorios: 777 - 002 = 775 (rwxrwxr-x)

Esto asegura que los archivos y directorios creados sean accesibles por el propietario y el grupo, pero no modificables por otros usuarios. Para cambiar el valor de umask, se puede usar el comando umask seguido del valor deseado:


  umask 0022
  

Este cambio se aplicará a todos los archivos y directorios creados a partir de ese momento, aunque normalmente no es algo necesario cambiar, ya que el valor por defecto es el más seguro y el más utilizado en la mayoría de los sistemas, puede llegar a necesitarse en entornos muy específicos.

La gestión de permisos en Linux es una habilidad fundamental para cualquier administrador de sistemas o usuario avanzado. Desde la configuración de permisos básicos con chmod, hasta el ajuste de propietarios y grupos con chown y chgrp, y la definición de permisos predeterminados mediante umask, estos conocimientos te permitirán tener un control total sobre los archivos y directorios de tu sistema. Una gestión adecuada de los permisos no solo garantiza la seguridad, sino que también facilita la colaboración y el mantenimiento del sistema.

Al dominar estos conceptos, estarás mejor preparado para gestionar y proteger tu entorno Linux, asegurando que los recursos estén correctamente asignados y accesibles solo para quienes tienen el permiso adecuado, además, gestionarlos desde una interfaz gráfica se te hará pan comido una vez entendido su funcionamiento interno. En el próximo capítulo, exploraremos la gestión de procesos y los recursos del sistema de forma eficiente. ¡Hasta la próxima!

¿Te ha servido esta información?

Tu apoyo nos permite seguir compartiendo conocimiento de calidad. Si alguno de nuestros artículos te han aportado valor, considera hacer una donación para mantener este espacio en marcha y actualizado. ¡Gracias por tu contribución! 😊

Artículos relacionados

Quizá te puedan interesar