La respuesta corta: qué hace chmod y cómo conviene usarlo según tu caso
chmod cambia quién puede leer, escribir y ejecutar cada archivo y directorio en Linux. Si vienes de Windows o macOS y tocas una carpeta compartida por SSH, FTP o un NAS, chmod es lo que evita que otros lean tu clave privada o que tu web quede inaccesible.
Para la mayoría, usa modo octal porque es predecible y rápido: pon 644 en archivos normales y 755 en directorios y scripts ejecutables. Un archivo con 644 queda como rw-r–r–, tú puedes editarlo y el resto solo leerlo; un directorio con 755 queda como rwxr-xr-x, tú entras y navegas y el resto solo entra y lista. Esta pareja cubre webs, documentos y proyectos sin abrir agujeros.
Si necesitas cambios quirúrgicos sin reescribir todo, usa modo simbólico: añade o quita un permiso sin tocar los demás. Para hacer ejecutable un script solo para ti, chmod u+x script.sh; para quitar escritura al grupo sin tocar el resto, chmod g-w archivo; para fijar exactamente usuario y grupo, chmod u=rwx,g=rx,o=r archivo. Es el método que no rompe lo que ya funciona.
Si gestionas directorios compartidos entre varios usuarios del mismo grupo, combina 775 con setgid y, si no quieres que nadie borre lo ajeno, añade sticky bit: chmod 2775 compartido y chmod +t compartido. Así los archivos nuevos heredan el grupo y nadie borra el trabajo de otro. Datos comprobados en septiembre de 2026.
Qué necesitas antes de empezar: permisos, terminal y cómo leer rwxrwxrwx
Necesitas ser propietario del archivo o tener privilegios de administrador con sudo; si no, chmod responde con Operation not permitted y no hay truco que lo evite. Verifica con ls -l archivo y con id para saber tu usuario y grupo. En sistemas basados en Linux como Ubuntu — corre en Linux —, Debian — corre en Linux —, Linux Mint — corre en Linux —, Fedora Workstation — corre en Linux — y Zorin OS — corre en Linux —, todos gratuitos con límites descritos en la ficha, el comportamiento de chmod está definido por POSIX chmod y documentado en GNU coreutils chmod.
Abre la terminal y lista permisos con ls -l. Verás algo como -rw-r–r– 1 ana devs 2048 sep 10 10:00 informe.txt. El primer carácter indica tipo: – para archivo regular, d para directorio y l para enlace simbólico. Los nueve siguientes son tres bloques de rwx: usuario, grupo y otros. Si ves guion -, ese permiso no está concedido.
r es lectura, w es escritura y x es ejecución. En archivos, x permite ejecutar como programa o script. En directorios, x permite entrar y atravesar; sin x no entras aunque tengas r. Los atajos son u para usuario propietario, g para grupo, o para otros y a para todos.
Cómo se lee un permiso: usuario, grupo y otros, y diferencia archivo/directorio
Cada permiso tiene valor numérico: r vale 4, w vale 2 y x vale 1. Sumar da el dígito octal: 7 es rwx, 6 es rw-, 5 es r-x, 4 es r–. Por eso 644 significa usuario 6 (rw-), grupo 4 (r–) y otros 4 (r–), que en letras es rw-r–r–. 755 es 7-5-5, o sea rwxr-xr-x.
La diferencia clave está en x. En un archivo, x autoriza ejecución: sin x, ./script.sh falla con Permission denied aunque puedas leerlo. En un directorio, x autoriza a entrar con cd y a acceder a rutas que lo atraviesan; r sin x permite listar nombres con ls pero no abrir archivos dentro. Por eso un directorio con 644 rompe el acceso: sin x nadie atraviesa, y un archivo con 666 nunca es ejecutable.
El primer bloque rwx corresponde al propietario, el segundo al grupo asignado y el tercero al resto de usuarios del sistema. Cambiar grupo con chgrp no cambia permisos, solo a quién aplica el bloque del medio.
Métodos para cambiar permisos comparados
| Método | Sintaxis | Precisión | Facilidad | Cuándo usar | Riesgo de 777 |
|---|---|---|---|---|---|
| Octal | chmod 644 archivo | Sobrescribe los 9 bits a la vez | Alta, 3 dígitos memorizables | Estado final conocido para archivos y directorios | Alto si se aplica por rutina, deja rwx a todos |
| Simbólico | chmod u+x,g-w archivo | Quirúrgico, toca solo lo indicado | Media, requiere recordar u/g/o/a y + – = | Añadir o quitar un permiso sin tocar el resto | Bajo, no suele abrir todo de golpe |
| Referencia –reference | chmod –reference=origen destino | Copia exacta de origen | Alta, sin calcular números | Clonar permisos al desplegar o restaurar copia | Medio, clona también un 777 si el origen lo tenía |
La forma octal es determinista y auditable: ves 755 y sabes el resultado sin preguntar qué había antes. La simbólica respeta lo existente y evita regresiones cuando el archivo ya tiene permisos especiales. La referencia ahorra errores al replicar una plantilla correcta.
Evita chmod 777 salvo prueba puntual y reversible. Concede lectura, escritura y ejecución a cualquier usuario local y anula la separación entre usuario, grupo y otros. Para un servicio web, 777 permite que otro usuario del mismo servidor reescriba archivos; para claves SSH, el servidor las ignora si son accesibles por grupo u otros.
Octal para fijar un estado limpio, simbólico para retoques y –reference para clonar: tres herramientas, ninguna necesita 777 para funcionar.
Método 1: modo octal (números de 3-4 dígitos)
- Comprueba el estado actual con ls -l archivo. Anota el bloque rwxrwxrwx y el propietario y grupo. Si no eres propietario, antepón sudo y valida que tienes acceso administrativo.
- Decide el estado final deseado. Para archivo de datos que solo tú editas, elige 644 que es rw-r–r–; para script o directorio navegable, 755 que es rwxr-xr-x; para archivo privado como clave, 600 que es rw——-; para directorio privado, 700 que es rwx——.
- Aplica con chmod seguido del número y la ruta: chmod 644 informe.txt, chmod 755 mi_script.sh, chmod 600 ~/.ssh/id_rsa, chmod 700 ~/.ssh. Sin opción recursiva, solo afecta a la ruta indicada.
- Si necesitas permisos especiales, usa cuatro dígitos. El primero controla especiales: 4 para setuid, 2 para setgid y 1 para sticky bit. Ejemplos: chmod 4755 binario para setuid, chmod 2755 directorio_compartido para setgid, chmod 1777 /tmp para sticky bit.
- Verifica con ls -l y, si cambiaste directorio, comprueba que x quedó en directorios. Un chmod 644 aplicado por error a un directorio lo deja sin x y nadie entra; corrige con chmod 755 directorio.
- Para varios archivos del mismo tipo, filtra por tipo antes de aplicar en masa: find . -type f -exec chmod 644 {} \; y find . -type d -exec chmod 755 {} \;. Así no mezclas ejecutables con documentos. Ten en cuenta que octal sobrescribe todo el bloque ugo de golpe y borra combinaciones previas como g+w aislado; si solo querías añadir un permiso, el modo simbólico habría conservado el resto. La máscara umask del sistema no afecta a chmod, solo a archivos recién creados; chmod fija lo que pides sin restar nada.
Valores más usados y para qué sirve cada uno
| Octal | Resultado rwx | Uso típico |
|---|---|---|
| 644 | rw-r–r– | Archivo general, web estática, documentos que otros solo leen |
| 755 | rwxr-xr-x | Directorios y scripts que debe ejecutar cualquiera |
| 600 | rw——- | Claves privadas SSH, tokens, archivos con secretos |
| 700 | rwx—— | Directorio ~/.ssh o carpeta privada con ejecución solo tuya |
| 775 | rwxrwxr-x | Directorio compartido donde el grupo escribe y otros solo leen y entran |
| 750 | rwxr-x— | Directorio o binario donde otros no deben ni leer ni entrar |
Con 644 y 755 cubres el 90% de casos sin exponerte. 600 y 700 aíslan secretos: SSH exige 600 para id_rsa y 700 para ~/.ssh, y si ven grupo u otros con permiso, rechaza la clave. 775 y 750 ajustan colaboración: 775 deja que el grupo edite, 750 lo cierra a otros por completo.
Método 2: modo simbólico (u g o a con + – = y rwxXst)
- Identifica a quién afecta: u es usuario propietario, g es grupo, o es otros y a equivale a ugo. Puedes combinarlos sin espacios con comas: ug, go, uo.
- Elige operación: + añade, – quita y = fija exactamente. Con = borras lo previo de esa clase; con + y – respetas lo demás. Ejemplo: chmod g-w archivo quita escritura al grupo sin tocar usuario ni otros.
- Indica permiso: r lectura, w escritura, x ejecución, X ejecución solo si ya es directorio o ya tenía x en alguna clase, s para setuid o setgid y t para sticky bit. X evita hacer ejecutables archivos de texto por error al hacer recursivo.
- Aplica cambios simples: chmod u+x script.sh añade ejecución solo a ti; chmod o= archivo deja a otros sin nada; chmod a+r archivo da lectura a todos; chmod u=rwx,g=rx,o=r archivo fija rwxr-xr– sin calcular octal.
- Combina con comas para cambios atómicos: chmod u+x,g-w,o-rwx proyecto corrige tres clases en una sola llamada y evita estados intermedios. Equivale a tres órdenes separadas pero con menos riesgo de olvidar una.
- Usa X para arreglos recursivos: chmod -R a+X mi_proyecto añade x solo a directorios y a archivos ya ejecutables, sin convertir cada .txt en ejecutable. Con a+x a secas, harías ejecutable todo por igual.
- Ten presente la máscara umask. Cuando usas = o creas archivos, umask resta permisos por defecto del sistema, típicamente 022 que quita w a grupo y otros. chmod posterior con + ignora umask y añade lo pedido, pero si fijas con = sin especificar, lo no mencionado se borra para esa clase.
- Verifica con ls -l y prueba el acceso real: intenta ejecutar, entrar o escribir como el usuario afectado. Si necesitas exactitud total, repite con octal para dejar estado documentable.
La limitación del modo simbólico es que requiere más tecleo y es menos auditable a golpe de vista que un 755; para dejar un servidor en estado conocido, el octal es más claro.
Permisos especiales: setuid, setgid y sticky bit
setuid con s en la x del usuario (rws) hace que el ejecutable corra con los privilegios del propietario, no del que lo lanza. Solo tiene sentido en binarios, nunca en scripts de shell por riesgo alto. Se activa con chmod 4755 binario o chmod u+s binario y se ve como -rwsr-xr-x. Si el binario es vulnerable, cualquier usuario gana privilegios del dueño.
setgid con s en la x del grupo (rwxr-s) hace que el ejecutable herede el grupo del archivo o que los archivos nuevos en un directorio hereden el grupo del directorio. Es útil en carpetas colaborativas. Se activa con chmod 2755 directorio o chmod g+s directorio y se ve como drwxr-sr-x.
sticky bit con t en la x de otros (rwxrwxrwt) permite que en un directorio todos escriban pero solo el propietario de cada archivo pueda borrarlo o renombrarlo. Es el caso de /tmp. Se activa con chmod 1777 directorio o chmod +t directorio y se ve como drwxrwxrwt. Usar 777 sin t en carpetas compartidas deja que cualquiera borre lo ajeno.
Especiales solo cuando aportan algo: setuid para binarios muy concretos, setgid para heredar grupo y sticky bit para directorios donde todos escriben.
Qué hacer si chmod no funciona o no hace lo esperado
Si pusiste 777 por comodidad y ahora todo es accesible, revierte de inmediato según tipo: find . -type f -exec chmod 644 {} \; y find . -type d -exec chmod 755 {} \;, y ajusta secretos a 600 y 700. 777 deja rwxrwxrwx a cualquier usuario local y en hostings compartidos permite reescritura por terceros; además SSH ignora claves con permisos abiertos.
Si quitaste x a un directorio con chmod 644 directorio, nadie entra aunque veas archivos con ls. Corrige con chmod 755 directorio o chmod u+X directorio si usas simbólico. Recuerda que r sin x en directorios solo lista nombres, no abre contenido.
Si chmod no cambia nada en un enlace simbólico, es normal. chmod sobre enlace afecta al destino, no al enlace; ls -l muestra lrwxrwxrwx pero ese rwx del enlace no se usa. Para no seguir enlaces al hacer recursivo, usa -P que es el comportamiento por defecto y no atraviesa enlaces; usa -H para seguir solo los enlaces dados en la línea de comandos y -L para seguir todos los enlaces encontrados en el recorrido, con cuidado porque puede modificar fuera del árbol esperado.
Si aplicaste chmod -R donde no debías, revierte por tipo como arriba y evita -R sin find -type. Nunca lances chmod -R 777 / ni rutas absolutas amplias: deja el sistema inconsistente y puede bloquear el arranque.
Si ves Operation not permitted, no eres propietario ni root. Cambia propietario con chown si corresponde o antepón sudo. Verifica antes con ls -l y id para no escalar permisos sin necesidad.
### Preguntas frecuentes
1. ¿Qué hace el comando chmod 777 en Linux?
chmod 777 otorga permisos de lectura (4), escritura (2) y ejecución (1) al propietario, al grupo y a otros usuarios. Esto suma 7 para cada categoría, resultando en permisos de acceso total (rwxrwxrwx). Es una configuración de seguridad muy insegura y solo debe usarse para pruebas temporales, nunca en un servidor en producción.
2. ¿Cómo se hace un archivo ejecutable con chmod?
Usa el comando chmod +x seguido del nombre del archivo, por ejemplo, chmod +x script.sh. Esto añade el permiso de ejecución (el bit 1) al propietario, al grupo y a otros usuarios. Es el método estándar para convertir un script de shell o un binario en un programa que el sistema puede ejecutar directamente.
3. ¿Cuál es la sintaxis básica del comando chmod en Linux?
La sintaxis es chmod [modo] [archivo]. El modo puede ser simbólico (chmod u+x archivo) para añadir permisos, o numérico (chmod 755 archivo) para establecerlos de forma absoluta. Puedes cambiar permisos de varios archivos a la vez usando comodines, como chmod 644 *.txt.
4. ¿Qué significan los permisos 600 en chmod?
chmod 600 establece permisos de lectura y escritura (4+2=6) solo para el propietario del archivo. Grupo y otros usuarios no tienen ningún permiso (000). Es el nivel de seguridad recomendado para archivos sensibles como claves SSH, certificados privados o contraseñas en texto plano.
5. ¿Qué es un ejemplo típico de uso de chmod?
Un caso común es preparar un script de respaldo: primero créas el archivo backup.sh, luego ejecutas chmod 700 backup.sh. Esto permite que solo el propietario pueda leer, modificar y ejecutar el script. Si lo ejecutas como tarea programada (cron), el sistema lo correrá sin problemas y otros usuarios no podrán acceder a su contenido.
6. ¿Qué significa chmod 755 en un directorio?
chmod 755 da al propietario permisos completos (lectura, escritura y ejecución). Al grupo y a otros usuarios les permite leer y ejecutar, pero no modificar el contenido. Es el permiso estándar para directorios web y archivos ejecutables, ya que equilibra accesibilidad con un control básico de seguridad.
7. ¿Qué relación tiene chmod con el lenguaje de programación C?
chmod no es un comando de C, pero en programación C se usa la función chmod() de la biblioteca estándar para alterar permisos de archivos desde un programa. En un terminal, cambias permisos de un binario compilado con gcc con el comando chmod 755 programa.
Fuentes
- RedhatLinux file permissions explained – Red Hatconsultado el 23/09/2026
- MediumUnderstanding chmod in Linux: File Permissions Made Simpleconsultado el 23/09/2026
- GithubOn Linux, if the target of Root.Chmod is replaced with a… – GitHubconsultado el 23/09/2026
- BuChange Mode (chmod) Command : TechWeb – Boston Universityconsultado el 23/09/2026
- Geeksforgeekschmod Command in Linux – GeeksforGeeksconsultado el 23/09/2026
