Así puedes controlar los permisos de archivos y carpetas en tu servidor

Cuando tenemos un servidor NAS basado en Linux, o directamente un sistema operativo como Debian o Ubuntu donde tenemos instalados diferentes servicios para acceder a los archivos y carpetas en red local por parte de otros usuarios, controlar el acceso de lectura, escritura y ejecución a los archivos y carpetas que compartimos es algo fundamental. Debemos tener en cuenta que, cuando compartir vía Samba o FTP nuestras carpetas y archivos, es posible que la autenticación de los clientes sea con un usuario sin privilegios, por tanto, deberemos organizar correctamente los usuarios y grupos para proporcionar los permisos necesarios y no más.

También debemos tener en cuenta que los sistemas operativos son multiusuario, podríamos acceder de forma simultánea con varios usuarios registrados localmente en nuestro sistema operativo, por tanto, es muy importante realizar una revisión periódica de los permisos existentes. Muchas veces queremos evitar que otros usuarios del equipo modifiquen los archivos, pero no sabemos cómo conseguirlo. En esta ocasión, os vamos a enseñar o cómo asignar permisos a carpetas y archivos en Linux.

Para que todo sea mucho más claro, vamos a dividir este artículo en varios apartados que permitirán entender mejor en todo momento de qué se está hablando. Hay que aclarar que todo lo que explicaremos será a través de la línea de comandos, es decir, tendremos que sacar una consola o bien conectarnos vía SSH a nuestro servidor Linux. Si no estás familiarizado con este componente de Linux tal vez este sea el mejor momento, ya que el nivel de dificultad de lo que vamos a hablar es bajo.

Qué es el comando chmod y para qué sirve

El comando chmod (change mode) tiene como finalidad cambiar los permisos de usuario, grupo y otros a los archivos y carpetas, podremos cambiar los permisos de lectura, escritura y ejecución de todos los archivos y carpetas que nosotros deseemos, además, podremos hacer una modificación recursiva de una determinada carpeta, de esta forma, todos los archivos y carpetas de su interior también se verán afectados por este cambio. El comando chmod está disponible tanto en sistemas operativos Linux como también Unix, por tanto, si nuestro servidor está basado en Unix como un FreeBSD, podremos cambiar los permisos de archivos y carpetas de la misma forma que lo hacemos en un Debian o Ubuntu.

La sintaxis de utilización de chmod es la siguiente:

chmod [modificadores] permisos fichero/directorio

Primero ejecutaremos la orden chmod, a continuación, podremos incorporar diferentes modificadores, por ejemplo, el «-R» para hacerlo recursivo a todas las carpetas y archivos dentro de una misma carpeta, a continuación, deberemos poner los permisos nuevos que queremos aplicar, y finalmente, pondremos la ruta absoluta o relativa del archivo o carpeta que queremos modificar los permisos.

Un detalle muy importante, es que en algunos casos es totalmente necesario ejecutar chmod con permisos de superusuario, ya que solamente el usuario administrador del sistema operativo podrá cambiar los permisos. Esto se puede conseguir iniciando sesión como root, o directamente utilizando el popular comando «sudo» para ascender a superusuario temporalmente con el comando a ejecutar.

Ejemplos de uso de chmod para cambiar los permisos

Lo primero que vamos a hacer es crear una carpeta nueva y archivos en su interior, con el objetivo de que practiquéis con estas carpetas y archivos, y no modifiquéis los permisos predeterminados de las carpetas ya existentes en vuestro sistema operativo. Por este motivo, vamos a realizar los preparativos para que las pruebas sean un éxito.

Antes de empezar, todos los comandos que vais a ejecutar se harán con diferentes usuarios, con el objetivo de comprobar correctamente los permisos que vayamos a aplicar. Para pasar de un usuario a otro en sistemas Linux, basta con abrir la consola y ejecutar «su nombre_usuario«, introducimos la contraseña y automáticamente accederemos al terminal como si fuéramos el otro usuario.

Preparando nuestro sistema para las pruebas

Lo primero que vamos a hacer es crear una carpeta en el directorio actual de cada usuario, generalmente está ubicado en /home/nombre_usuario.

mkdir CarpetaRedesZone

Posteriormente, nos moveremos dentro de esta carpeta y crearemos un archivo:

cd CarpetaRedesZone

touch archivoDePrueba

Para finalizar escribiremos el siguiente comando para subir de nivel y salir de la carpeta que hemos creado:

cd ..

Con esto ya tenemos nuestro sistema preparado para empezar con las pruebas de cambios de permisos.

Obtener información de ficheros y carpetas

Si queremos listar los archivos existentes en una carpeta solo tendremos que escribir el siguiente comando:

ls

Con esto solo obtenemos el nombre de los archivos o carpetas del lugar de la ruta en el que nos encontramos. Para obtener mucho más detalle tendremos que escribir lo siguiente:

ls -l

Nosotros hemos ejecutado este comando en nuestro servidor, aquí podéis ver el aspecto de la salida:

Este comando ofrece la siguiente información (en orden de izquierda a derecha):

  • Tipo de archivo (archivo muestra «-» y directorio muestra una «d»).
  • Permisos de lectura, escritura y ejecución, tanto para usuario, grupo y otros.
  • Usuario propietario.
  • Grupo propietario del archivo.
  • Tamaño
  • Última fecha de modificación.
  • Nombre

Una vez que ya hemos creado la carpeta y archivos, así como hemos visto la salida del comando «ls -l», vamos a interpretar los permisos que tienen los ficheros o carpetas.

Interpretar los permisos que tiene un fichero o carpeta

Anteriormente habéis visto que los diferentes archivos tienen estos permisos:

drwxr-xr-x 3 bron bron 4096 may 6 13:19 Descargas

En esta ristra ofrecida veremos que, para cada archivo o carpeta, hay una serie de letras en primer lugar. Estos son los permisos que posee el archivo y se leen de la siguiente forma:

otorgar-permisos-fichero-o-carpeta-linux

En el anterior ejemplo, tenemos los permisos «drwxr-xr-x», esto significa lo siguiente:

  • d: directorio
  • rwx: permisos de lectura, escritura y ejecución para el usuario propietario del directorio.
  • r-x: permisos de lectura y ejecución para el grupo propietario del directorio.
  • r-x: permisos de lectura y ejecución para otros del directorio.

Si queremos que solo el usuario propietario pueda leer, escribir y ejecutar un determinado archivo, tendríamos que ver lo siguiente:

-rwx------

Es decir, podremos otorgar permisos a los siguientes roles:

  • Usuario propietario.
  • Grupo al que pertenece el propietario
  • Resto de usuarios del equipo.

Cómo cambiar los permisos de archivos y carpetas

El comando que debemos utilizar para realizar esta tarea es chmod, esta será la herramienta con el que podremos añadir o quitar permisos, tanto a un archivo como a una carpeta existente en el sistema de fichero de nuestro sistema operativo. Para realizar esta configuración con chmod, podremos realizarlo de dos formas diferentes, utilizando letras que es más «humano» pero más largo, y también números en formato «octal», que es mucho más rápido. Esta última forma es nuestra favorita por la rapidez, aunque, es posible que en un primer momento te guste más utilizar letras, porque se entiende mucho mejor.

Letras

Si vamos a utilizar letras para añadir o quitar permisos de una carpeta o archivo, debemos tener en cuenta los roles, símbolos y los permisos.

Existen tres tipos de roles:

  • u: usuario
  • g: grupo
  • o: otros
  • a: todos (all), si necesitas aplicar el mismo permiso a usuario, grupos y otros, usa «a» para ahorrar tiempo.

Dos tipos de símbolos:

  • +: añadir permisos
  • -: quitar permisos
  • =: especifica los permisos fijados.

Tres tipos de permisos:

  • r: lectura
  • w: escritura
  • x: ejecución

A continuación, os ofrecemos una serie de ejemplos para que veáis de qué estamos hablando:

Dar permisos completos de lectura, escritura y ejecución a todos los roles, tanto usuario como grupo como otros:

chmod ugo+rwx archivoDePrueba

Quitar permisos de lectura, escritura y ejecución a otros usuarios:

chmod o-rwx archivoDePrueba

Al final, todo radica en combinar los roles, símbolos y permisos en función de la necesidad que tengamos.

Basado en octal usando números

El comando chmod también es compatible con otra nomenclatura que os vamos a enseñar y que está basada en octal.

Imaginad que los permisos del propietario (r w x) están identificados por 0 y 1. Es decir, si por ejemplo queremos dar permisos de lectura y escritura solamente (y no permisos de ejecución) sería: 110. Si queremos solo el permiso de lectura sería: 100.

Por lo tanto, teniendo en cuenta todas las posibilidades existentes obtenemos los siguientes valores:

  • 0 0 0: 0
  • 0 0 1: 1
  • 0 1 0: 2
  • 0 1 1: 3
  • 1 0 0: 4
  • 1 0 1: 5
  • 1 1 0: 6
  • 1 1 1: 7

Es decir, esto es algo extrapolable tanto al usuario, grupo como a otros.

El formato del comando sería el siguiente:

chmod xxx archivoDePrueba

Donde las x se cambiarán por un número en función de los permisos que se asigne.

Por ejemplo, si queremos dar permisos totales al propietario y dejar sin ningún permiso a los otros dos roles (grupo y otros), el comando sería:

chmod 700 archivoDePrueba

Si queremos dar permisos de lectura y escritura a todos los roles entonces será:

chmod 666 archivoDePrueba

Con estas dos formas tan sencillas podremos fijar los permisos de archivos y carpetas en nuestro equipo Linux. Además, tendremos al alcance de nuestra mano el comando ls -l para obtener la información en tiempo real de los ficheros y carpetas del sistema. Os recomendamos visitar el manual oficial de chmod para Linux, para ello, ejecutaremos en consola lo siguiente:

man chmod

También os recomendamos investigar sobre los comandos getfacl y setfacl para configurar listas de control de acceso más avanzadas en Linux, y no utilizar solamente los usuarios, grupos y otros, esto nos permitirá una mayor granularidad, aunque es claramente mucho más avanzado que el popular chmod. En general, si realizas una buena organización de usuarios y grupos, no deberías necesitar el uso de estas listas de control de acceso.

¡Sé el primero en comentar!