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 + 0 | 0 | Ningún permiso |
| 001 | --x | 0 + 0 + 1 | 1 | Solo ejecución |
| 010 | -w- | 0 + 2 + 0 | 2 | Solo escritura |
| 011 | -wx | 0 + 2 + 1 | 3 | Escritura y ejecución |
| 100 | r-- | 4 + 0 + 0 | 4 | Solo lectura |
| 101 | r-x | 4 + 0 + 1 | 5 | Lectura y ejecución |
| 110 | rw- | 4 + 2 + 0 | 6 | Lectura y escritura |
| 111 | rwx | 4 + 2 + 1 | 7 | Permisos 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,ddirectorio). - 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
777sin 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
chownchgrp
Comandos relacionados
lschownchgrpumasksudo
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
- Crea un archivo llamado
prueba.txty consulta sus permisos conls -l. - Modifica sus permisos para que solo el propietario pueda escribir.
- Crea un script sencillo y hazlo ejecutable utilizando
chmod +x. - Prueba la diferencia entre los permisos
644,755y777. - Utiliza
chmod -Rsobre 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.