ToolsOps

Guía de permisos chmod en Linux

Permisos chmod en Linux: cuándo usar 755 vs 777, qué hace 644, permisos rwx, notación octal y simbólica, y ejemplos seguros para archivos y scripts.

Qué es chmod

chmod es el comando estándar de Unix/Linux para cambiar los permisos de un archivo o directorio. Determina quién puede leerlo (r), modificarlo (w) o ejecutarlo (x), y aplica esos permisos a tres audiencias: el propietario, el grupo asociado y el resto de usuarios.

Owner, group y others

Cada archivo Linux tiene tres bloques de permisos, uno por audiencia:

  • Owner (usuario propietario): quien creó el archivo, salvo cambio con chown.
  • Group: usuarios pertenecientes al grupo asociado al archivo. Útil para compartir entre miembros de un equipo.
  • Others: cualquier otro usuario con acceso al sistema.

Bits r, w, x

Cada audiencia tiene tres bits: lectura, escritura y ejecución. En octal cada bit suma:

  • 4 = r (lectura)
  • 2 = w (escritura)
  • 1 = x (ejecución)

Sumando se obtiene el valor por audiencia:

OctalSimbólicoSignificado
7rwxLectura, escritura y ejecución
6rw-Lectura y escritura
5r-xLectura y ejecución
4r--Solo lectura
0---Sin permisos

Ejemplos seguros

Los valores siguientes cubren los casos más habituales sin caer en el extremo permisivo de chmod 777:

  • chmod 755 script.sh - script público ejecutable; propietario edita.
  • chmod 644 file.txt - archivo de configuración legible por todos, escribible solo por el propietario.
  • chmod 700 private-script.sh - solo el propietario lee, escribe y ejecuta. Grupo y otros sin acceso.
  • chmod 600 secret.txt - solo el propietario lee y escribe. Típico para llaves SSH privadas.
  • chmod 777 - concede rwx a todos. Evítalo: cualquier proceso o usuario del sistema puede modificar y ejecutar el archivo. Usa un valor más restrictivo (755 o 750 suele ser suficiente).

755 vs 777: cuándo elegir cada uno

Una de las dudas más habituales al ajustar permisos en Linux es si usar 755 o 777. La diferencia está en lo que conceden al grupo y a otros usuarios del sistema:

  • chmod 755 (rwxr-xr-x): el propietario lee, escribe y ejecuta; grupo y otros solo leen y ejecutan. Es el valor habitual para directorios y scripts ejecutables públicos.
  • chmod 777 (rwxrwxrwx): rwx para todos. Cualquier usuario o proceso del sistema puede modificar el archivo. Casi siempre indica un problema de propietario o grupo que se está enmascarando.

Si un script "solo funciona" con 777, suele ser un problema de ownership: prueba antes con chownal usuario correcto o ajusta el grupo compartido. El bit ejecutable (x) sobre archivos basta con 755; sobre directorios, x significa "poder entrar y atravesar", también con 755.

Octal frente a simbólico

La notación octal define permisos absolutos. La simbólica los modifica de forma incremental:

  • chmod u+x script.sh - añade ejecución al propietario sin tocar al resto.
  • chmod go-w file.txt - quita escritura a grupo y otros, deja al propietario intacto.
  • chmod a+r public.html - añade lectura a todos (all).

Las audiencias son u (user/owner), g (group), o (others) y a (all). Los operadores son + (añade), - (quita) y = (asigna exactamente).

Bits especiales (setuid, setgid, sticky)

Linux soporta tres bits adicionales que se anteponen al modo octal estándar:

  • setuid (4xxx): el ejecutable corre con la identidad del propietario en lugar del usuario que lo invoca. Ejemplo: /usr/bin/passwd.
  • setgid (2xxx): en ejecutables, corre con el grupo del archivo. En directorios, los archivos creados heredan el grupo del directorio.
  • sticky (1xxx): en directorios, solo el propietario de un archivo puede borrarlo, aunque otros tengan w. Típico en /tmp.

Errores frecuentes

  • Aplicar chmod 777 para "que funcione". Suele ocultar un problema de propietario, grupo o ruta.
  • Olvidar que para acceder a un archivo necesitas también permiso de lectura/ejecución en el directorio.
  • Cambiar permisos recursivos con chmod -R 777 . y dejar el sistema vulnerable.
  • No comprobar el propietario con ls -l antes de cambiar permisos.
  • Asumir que copiar un archivo conserva permisos: cp -p conserva, cp normal no.

Calcula los permisos

Si dudas qué valor octal usar, prueba con la calculadora:

Usa la calculadora chmod

Siguientes pasos

chmod corrige permisos sobre archivos que ya existen. Para fijar los permisos con los que el sistema crea archivos y directorios nuevos, su complemento es umask. Lee la guía de umask para entender la fórmula y los valores típicos (022, 027, 077), o pasa directo a la calculadora umask para confirmar qué modos quedarán en archivos y directorios nuevos.

Para tener ambas calculadoras a mano, el hub de permisos en Linux agrupa chmod y umask con cheat sheets y ejemplos.

Preguntas frecuentes

¿Qué significa chmod 755?
El propietario obtiene rwx (lectura, escritura y ejecución = 7), y grupo y otros obtienen r-x (lectura y ejecución = 5). Es el valor típico para directorios y scripts ejecutables que deben poder consultarse y lanzarse, pero solo el propietario puede modificarlos.
¿Por qué chmod 777 es peligroso?
Asigna rwx a propietario, grupo y otros. Cualquier usuario del sistema (incluido un proceso comprometido) puede leer, modificar y ejecutar el archivo. En servidores con varios usuarios o servicios expuestos a internet, es un riesgo de seguridad alto. Usa el mínimo permiso necesario.
¿Cuál es la diferencia entre permisos octales y simbólicos?
Los permisos octales (p. ej. 755) son un número que codifica los 3 bits rwx de cada audiencia. Los simbólicos (p. ej. u+x) modifican los permisos existentes de forma incremental. Octal es más expresivo cuando defines permisos absolutos; simbólico es útil para añadir o quitar puntualmente.
¿Qué permisos necesita un script para ejecutarse?
El bit de ejecución (x) para la audiencia que vaya a lanzarlo. Para un script personal basta `chmod u+x script.sh` o `chmod 700 script.sh`. Para uno público de solo lectura más ejecución, `chmod 755 script.sh`. El propietario sigue necesitando r para que el shell pueda leer el contenido.
¿Qué son setuid, setgid y sticky?
Bits especiales adicionales. setuid (4xxx) hace que el ejecutable corra como su propietario. setgid (2xxx) hace lo equivalente con el grupo, o fuerza herencia de grupo en directorios. El bit sticky (1xxx) en un directorio impide que un usuario borre archivos de otro (típico en /tmp).
¿Cuál es la diferencia entre chmod 755 y 777?
755 da rwx al propietario y r-x al grupo y a otros, mientras que 777 da rwx a todos. Con 755 solo el dueño puede modificar el archivo y el resto puede leerlo y ejecutarlo. Con 777 cualquier usuario o proceso del sistema puede modificarlo, lo que casi siempre representa un riesgo de seguridad. Para directorios o scripts ejecutables públicos, 755 es el valor habitual.
¿Qué significa chmod 644?
644 equivale a rw-r--r--: el propietario lee y escribe, y grupo y otros solo leen. Es el valor habitual para archivos estáticos legibles por todos pero modificables solo por el dueño: HTML, CSS, imágenes, archivos de configuración. No incluye permiso de ejecución, así que no sirve para scripts.
¿Qué significa chmod 750?
750 equivale a rwxr-x---: el dueño tiene rwx, el grupo r-x y otros sin acceso. Es útil cuando solo tu grupo de trabajo debe poder ejecutar un script o entrar a un directorio, dejando al resto del sistema fuera. Más restrictivo que 755 sin perder colaboración interna.