-->

Comando chmod

chmod

El comando chmod permite modificar los permisos de acceso de archivos y directorios en sistemas Linux y Unix. Permite indicar quién puede leer, escribir o ejecutar un archivo mediante una representación numérica u otra basada en letras.

Categoría Administración de sistemas y seguridad
Disponible en Sistemas operativos tipo Unix (Linux, macOS, BSD)
Equivalente en Windows Propiedades de archivos / Pestaña Seguridad / Comando icacls o attrib
Sustituye a No sustituye a ningún comando anterior; es el estándar absoluto en POSIX para la gestión de permisos de lectura, escritura y ejecución.
¿Requiere permisos de administrador? Depende: un usuario normal puede modificar los permisos de sus propios archivos, pero requiere privilegios de superusuario (sudo) para cambiar los permisos de archivos de propiedad ajena o del sistema.

¿Qué significa su nombre?

El nombre chmod proviene del inglés change mode, que significa cambiar el modo. En Linux, el "modo" de un archivo hace referencia principalmente a sus permisos de acceso.

¿Para qué sirve?

Permite controlar qué usuarios pueden realizar determinadas acciones sobre un archivo o directorio:

  • Leer el contenido del archivo.
  • Modificar o escribir información.
  • Ejecutar un programa o script.

Es un comando fundamental en la administración de sistemas Linux, especialmente para configurar permisos de scripts, páginas web, servidores y archivos compartidos.

Sintaxis

chmod [opciones] permisos archivo

Permisos básicos

Permiso Letra Valor numérico Descripción
Lectura r 4 Permite consultar el contenido del archivo.
Escritura w 2 Permite modificar el contenido.
Ejecución x 1 Permite ejecutar el archivo.

Usuarios a los que se aplican los permisos

Identificador Significado
u Usuario propietario del archivo.
g Grupo propietario.
o Otros usuarios.
a Todos los usuarios.

Representación numérica

Los permisos también pueden indicarse mediante números. Cada permiso tiene un valor:

r = 4
w = 2
x = 1

Los valores se suman para cada grupo de usuarios:

7 = lectura + escritura + ejecución
6 = lectura + escritura
5 = lectura + ejecución
4 = lectura
0 = ningún permiso

En Linux, el sistema octal asigna permisos usando tres números del 0 al 7. Cada dígito representa la suma de los valores de lectura (4), escritura (2) y ejecución (1) para tres grupos: el propietario, el grupo y los otros usuarios, aplicándose mediante el comando chmod.

Valores de los permisos individuales

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

Estructura de los tres dígitos

Cada posición del número de tres cifras (por ejemplo, 755) define un grupo distinto:

  • Primer dígito: Permisos para el propietario (usuario dueño del archivo).
  • Segundo dígito: Permisos para el grupo asignado al archivo.
  • Tercer dígito: Permisos para otros (el resto de usuarios del sistema).

Ejemplos comunes de uso

  • 777: Lectura, escritura y ejecución para todos (4+2+1=7).
  • 755: El propietario tiene todos los permisos (7); el grupo y otros solo lectura y ejecución (4+1=5).
  • 644: El propietario tiene lectura y escritura (4+2=6); el grupo y otros solo lectura (4).
  • 600: El propietario tiene lectura y escritura (6); nadie más tiene ningún acceso (00).

Se aplica en la terminal escribiendo chmod seguido de la cifra de tres dígitos y el nombre del archivo o directorio:

chmod 644 archivo.txt

El sistema octal se aplica en Linux porque es la forma más directa de resumir código binario de tres dígitos (unos y ceros) en un solo dígito. En el sistema de archivos de Linux, cada archivo tiene una sección de metadatos de 9 bits dedicada a los permisos básicos. El sistema octal agrupa esos 9 bits en tres bloques de 3 bits, convirtiendo cada bloque en un número del 0 al 7.

1. La base binaria

Para el sistema operativo, un permiso está encendido (1) o apagado (0). Cada uno de los tres perfiles de usuario (Propietario, Grupo, Otros) tiene asignados exactamente 3 bits en este orden estricto: Lectura (r), Escritura (w) y Ejecución (x).

Si calculamos el valor posicional en base 2 (binario) para esos 3 bits, obtenemos sus equivalentes numéricos:

  • Bit de Lectura (r): Posición binaria 2² = 4
  • Bit de Escritura (w): Posición binaria 2¹ = 2
  • Bit de Ejecución (x): Posición binaria 2⁰ = 1

2. La conversión a Octal

Como cada bloque tiene 3 bits, la suma máxima posible de sus valores es 4 + 2 + 1 = 7. Esto encaja perfectamente con el sistema octal (base 8), que utiliza los dígitos del 0 al 7.

Al combinar los bits de un bloque, el sistema realiza una suma matemática simple:

Binario Permiso Operación Octal Dígito Octal Significado
000---0 + 0 + 00Ningún permiso
001--x0 + 0 + 11Solo ejecución
010-w-0 + 2 + 02Solo escritura
011-wx0 + 2 + 13Escritura y ejecución
100r--4 + 0 + 04Solo lectura
101r-x4 + 0 + 15Lectura y ejecución
110rw-4 + 2 + 06Lectura y escritura
111rwx4 + 2 + 17Permisos totales

3. La estructura de los 9 bits (El triplete)

Linux exige definir los accesos para tres entidades distintas (propietario, grupo y otros). Por lo tanto, junta tres dígitos octales en fila para formar una máscara completa de permisos:

    Propietario (User)       Grupo (Group)         Otros (Others)
     [ r ][ w ][ x ]        [ r ][ w ][ x ]       [ r ][ w ][ x ]
       4    2    1            4    2    1           4    2    1

Ejemplo real de traducción:

Si un archivo requiere que el Propietario lea y escriba (rw-), el Grupo solo lea (r--), y los Otros no hagan nada (---):

  • Propietario: rw- → 4 + 2 + 0 = 6
  • Grupo: r-- → 4 + 0 + 0 = 4
  • Otros: --- → 0 + 0 + 0 = 0

El resultado es el número octal 640. Cuando ejecutas chmod 640 archivo.txt, el núcleo de Linux traduce ese 640 de vuelta a la cadena de bits 110100000 para modificar el disco.

Opciones más utilizadas

Opción Descripción
-R Aplica los cambios de forma recursiva a todos los archivos y directorios.
-v Muestra información sobre los cambios realizados.

Consultas más habituales

Dar permiso de ejecución a un script

chmod +x script.sh

Asignar permisos completos al propietario y solo lectura al resto

chmod 744 archivo.txt

Permitir lectura y escritura al propietario y lectura al grupo

chmod 640 documento.txt

Modificar permisos de un directorio completo

chmod -R 755 carpeta/

Ejemplo de salida

$ ls -l script.sh

-rw-r--r-- 1 usuario usuarios 1200 jul 16 10:30 script.sh

Después de ejecutar:

chmod +x script.sh

Los permisos cambian:

-rwxr-xr-x 1 usuario usuarios 1200 jul 16 10:30 script.sh

¿Cómo interpretar los permisos?

  • El primer carácter indica el tipo de elemento (- archivo, d directorio).
  • Los tres siguientes caracteres corresponden al propietario.
  • Los tres siguientes corresponden al grupo.
  • Los tres últimos corresponden al resto de usuarios.

Ejemplo:

-rwxr-xr--
  • Propietario: lectura, escritura y ejecución.
  • Grupo: lectura y ejecución.
  • Otros usuarios: solo lectura.

Errores habituales

  • Asignar permisos demasiado amplios como 777 sin necesidad.
  • Modificar permisos de archivos del sistema sin conocer sus consecuencias.
  • Olvidar que los permisos de un directorio afectan también al acceso a su contenido.
  • Confundir permisos del archivo con permisos del usuario que ejecuta el comando.

Conceptos relacionados

  • Usuario propietario
  • Grupo Linux
  • ls -l
  • Permisos Unix
  • chown
  • chgrp

Comandos relacionados

  • ls
  • chown
  • chgrp
  • umask
  • sudo

Curiosidades

El sistema de permisos de Linux está basado en el modelo Unix original. La representación numérica de permisos, como 755 o 644, se ha convertido en una forma habitual de configurar servidores web, scripts y aplicaciones.

Prácticas propuestas

  1. Crea un archivo llamado prueba.txt y consulta sus permisos con ls -l.
  2. Modifica sus permisos para que solo el propietario pueda escribir.
  3. Crea un script sencillo y hazlo ejecutable utilizando chmod +x.
  4. Prueba la diferencia entre los permisos 644, 755 y 777.
  5. Utiliza chmod -R sobre un directorio de pruebas y observa el resultado.

Consejo: Antes de modificar permisos en un sistema real, comprueba siempre qué usuarios necesitan acceso y aplica únicamente los permisos necesarios.