Entendiendo los Permisos de Archivo de Linux

Actualizado 

8 min de lectura

Permisos de Archivos en Linux

En Linux, los permisos, atributos y propiedad de los archivos controlan el nivel de acceso que los procesos del sistema y los usuarios tienen a los archivos. Esto asegura que sólo los usuarios y procesos autorizados puedan acceder a archivos y directorios específicos.

Permisos de archivos en Linux

El modelo básico de permisos de Linux funciona asignando a cada archivo del sistema un propietario y un grupo y asignando derechos de acceso para tres clases diferentes de usuarios:

  • El propietario del archivo.
  • Los miembros del grupo.
  • Otros (todos los demás).

La propiedad de los archivos puede cambiarse mediante los comandos chown y chgrp. Hay tres tipos de permisos de archivo que se aplican a cada clase de usuarios:

  • El permiso de lectura.
  • El permiso de escritura.
  • El permiso de ejecución.

Este concepto permite controlar qué usuarios pueden leer el archivo, escribir en él o ejecutarlo.

Para ver los permisos del archivo, utiliza el comando ls:

ls -l file_name
-rw-r--r-- 12 lordlinux users Tue Aug 16 18:03:41 2022 file_name
|[-][-][-]-   [-------] [---]
| |  |  | |      |        |
| |  |  | |      |        +----------> 7. Grupo
| |  |  | |      +-------------------> 6. Propietario
| |  |  | +--------------------------> 5. Método de acceso alternativo
| |  |  +----------------------------> 4. Otros Permisos
| |  +-------------------------------> 3. Permisos de grupo
| +----------------------------------> 2. Permisos del propietario
+------------------------------------> 1. Tipo de archivo

El primer carácter indica el tipo de archivo. Puede ser un archivo normal (-), un directorio (d), un enlace simbólico (l) u otros tipos especiales de archivos. Los siguientes nueve caracteres representan los permisos del archivo, tres tríos de tres caracteres cada uno. La primera de ellas muestra los permisos del propietario, la segunda los del grupo y la última los de todos los demás. En el ejemplo anterior (rw-r--r--) significa que el propietario del archivo tiene permisos de lectura y escritura (rw-), el grupo y los demás sólo tienen permisos de lectura (r--).

Los permisos de archivo tienen un significado diferente dependiendo del tipo de archivo.

Cada una de las tres tripletas de permisos puede construirse con los siguientes caracteres y tienen diferentes efectos, dependiendo de si se establecen para un archivo o para un directorio:

Permisos en los archivos

  • Lectura:
    • -: El archivo no es legible. No puede ver el contenido del archivo.
    • r: El archivo es legible.
  • Escritura:
    • -: El archivo no puede ser cambiado o modificado.
    • w: El archivo puede ser cambiado o modificado.
  • Ejecución:
    • -: El archivo no puede ser ejecutado.
    • x: El archivo puede ser ejecutado.
    • s: Si se encuentra en la parte de usuarios, establece el bit setuid. Si se encuentra en la patre de grupo, establece el bit setgid. También significa que la bandera x está activada. Cuando las banderas setuid o setgid se establecen en un archivo ejecutable, el archivo se ejecuta con los privilegios del propietario y/o del grupo del archivo.
    • S: Igual que s, pero no se establece la bandera x. Esta bandera se utiliza raramente en los archivos.
    • t: Si se encuentra en la parte de otros, establece el bit sticky. También significa que la bandera x está activada. Esta bandera es inútil en los archivos.
    • T: Igual que, t pero la bandera x no está activada. Esta bandera es inútil en los archivos.

Permisos en los directorios (carpetas)

Los directorios son tipos especiales de archivos que pueden contener otros archivos y directorios.

  • Lectura:
    • -: No se puede mostrar el contenido del directorio.
    • r: Se puede mostrar el contenido del directorio. (Por ejemplo, puede listar los archivos dentro del directorio con ls .).
  • Escritura:
    • -: El contenido del directorio no puede ser alterado.
    • r: El contenido del directorio puede ser alterado. (Por ejemplo, se pueden crear nuevos archivos, eliminar archivos, etc.)
  • Ejecución:
    • -: No se puede cambiar de directorio.
    • x: Se puede navegar por el directorio con cd.
    • s: Si se encuentra en la parte de usuarios, establece el bit setuid. Si se encuentra en la parte de grupo, establece el bit setgid. También significa que la bandera x está activada. Cuando la bandera setgid se establece en un directorio, los nuevos archivos creados dentro de él heredan el ID del grupo del directorio (GID) en lugar del ID del grupo primario del usuario que creó el archivo. setuid no tiene efecto en los directorios.
    • S: Igual que s, pero no se establece la bandera x. Esta bandera es inútil en los directorios.
    • t: Si se encuentra en el parte de otros, establece el bit sticky. También significa que la bandera x está activada. Cuando el bit sticky está activado en un directorio, sólo el propietario del archivo, el propietario del directorio o el usuario administrativo pueden eliminar o renombrar los archivos dentro del directorio.
    • T: Igual que t, pero no se establece la bandera x. Esta bandera es inútil en los directorios.

Cambiar los permisos de los archivos

Los permisos de los archivos se pueden cambiar con el comando chmod. Sólo root, el propietario del archivo, o un usuario con privilegios sudo puede cambiar los permisos de un archivo. Tenga mucho cuidado cuando utilice chmod, especialmente cuando cambie los permisos de forma recursiva. El comando puede afectar uno o más archivos y/o directorios separados por espacios como argumentos.

Los permisos pueden especificarse utilizando un modo simbólico, un modo numérico o un archivo de referencia.

Método simbólico (texto)

La sintaxis del comando chmod cuando se utiliza el modo simbólico tiene el siguiente formato:

chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...

El primer conjunto de banderas ([ugoa...]), banderas de usuarios, define las clases de usuarios para las que se modifican los permisos del archivo.

  • u - The file owner.
  • g - The users who are members of the group.
  • o - All other users.
  • a - All users, identical to ugo.

Cuando se omite la bandera de los usuarios, se pone por defecto a.

El segundo conjunto de flags ([-+=]), los flags de operación, definen si los permisos deben ser eliminados, añadidos o establecidos:

  • - - Elimina los permisos especificados.
  • + - Añade los permisos especificados.
  • = - Cambia los permisos actuales por los permisos especificados. Si no se dan permisos después del símbolo =, se eliminan todos los permisos de la clase de usuario especificada.

Los permisos (perms…) se establecen explícitamente utilizando cero o una o más de las siguientes letras: r, w, x, X, s y t. Utilice una sola letra del conjunto u, g y o cuando copie los permisos de una clase de usuarios a otra.

Al establecer permisos para más de una clase de usuario ([,…]), utilice comas (sin espacios) para separar los modos simbólicos.

Here are some examples of how to use the chmod command in symbolic mode:

  • Dar a los miembros del grupo permiso para ejecutar el archivo, pero no para leer y escribir en él:
chmod g=x filename
  • Eliminar el permiso de escritura para todos los usuarios:
chmod a-w filename
  • Eliminar recursivamente el permiso de ejecución para otros usuarios:
chmod -R o-x dirname
  • Elimina los permisos de lectura, escritura y ejecución para todos los usuarios excepto el propietario del archivo:
chmod og-rwx filename

También se puede conseguir lo mismo utilizando el siguiente método:

chmod og= filename
  • Da permisos de lectura, escritura y ejecución al propietario del archivo, permisos de lectura al grupo del archivo y ningún permiso al resto de usuarios:
chmod u=rwx,g=r,o= filename

Método numérico

La sintaxis del comando chmod cuando se utiliza el modo tiene el siguiente formato:

chmod [OPTIONS] NUMBER FILE...

Cuando se utiliza el modo numérico, se pueden establecer los permisos para las tres clases de usuarios (propietario, grupo y todos los demás) al mismo tiempo.

El número de permiso puede ser de 3 o 4 dígitos. Cuando se utiliza un número de 3 dígitos, el primer dígito representa los permisos del propietario del archivo, el segundo el grupo del archivo y el último todos los demás usuarios.

Cada permiso de escritura, lectura y ejecución tiene el siguiente valor numérico:

  • r (lectura) = 4
  • w (escritura) = 2
  • x (ejecutar) = 1
  • sin permisos = 0

El número de permisos de una clase de usuario específica está representado por la suma de los valores de los permisos de ese grupo.

Para conocer los permisos del archivo en modo numérico, basta con calcular los totales de las clases de todos los usuarios. Por ejemplo, para dar permisos de lectura, escritura y ejecución al propietario del archivo, permisos de lectura y ejecución al grupo del archivo y sólo permisos de lectura a todos los demás usuarios, se haría lo siguiente:

  • Propietario: rwx=4+2+1=7
  • Grupo: r-x=4+0+1=5
  • Otros: r-x=4+0+0=4

Utilizando el método anterior, llegamos al número 754, que representa los permisos deseados.

Para configurar las banderas setuid, setgid y sticky bit, utilice un número de cuatro dígitos.

Cuando se utiliza el número de 4 dígitos, el primer dígito tiene el siguiente significado:

  • setuid=4
  • setgid=2
  • sticky=1
  • sin cambios = 0

Las tres cifras siguientes tienen el mismo significado que cuando se utiliza un número de 3 dígitos.

📝 Nota: Si el primer dígito es 0 puede omitirse, y el modo puede representarse con 3 dígitos. El modo numérico 0755 es el mismo que el 755.

Para calcular el modo numérico, también se puede utilizar otro método (método binario), pero es un poco más complicado. Saber calcular el modo numérico utilizando 4, 2 y 1 es suficiente para la mayoría de los usuarios.

Puede comprobar los permisos del archivo en notación numérica utilizando el comando stat:

stat -c "%a" file_name

A continuación se muestran algunos ejemplos de cómo utilizar el comando chmod en modo numérico:

  • Dar al propietario del archivo permisos de lectura y escritura y sólo permisos de lectura a los miembros del grupo y al resto de usuarios:
chmod 644 dirname
  • Dar al propietario del archivo permisos de lectura, escritura y ejecución, permisos de lectura y ejecución a los miembros del grupo y ningún permiso a los demás usuarios:
chmod 750 dirname
  • Dar permisos de lectura, escritura y ejecución, y un bit sticky a un directorio determinado:
chmod 1777 dirname
  • Establece recursivamente los permisos de lectura, escritura y ejecución para el propietario del archivo y ningún permiso para el resto de usuarios en un directorio determinado:
chmod -R 700 dirname

En Linux, el acceso a los archivos se restringe mediante los permisos, atributos y propiedad de los mismos. Para cambiar los permisos del archivo, utilice el comando chmod.