Calculadora chmod

Marca quién puede leer, escribir y ejecutar un archivo, o escribe un número como 755. Obtienes las formas octal y simbólica y el comando que ejecutar, con para qué sirven los valores habituales.

Quién puede hacer qué
LecturaEscrituraEjecución
Propietario 7
Grupo 5
Otros 5
Bits especiales
Número de chmod 755 rwxr-xr-x
Letras
rwxr-xr-x
ls -l, archivo
-rwxr-xr-x
ls -l, carpeta
drwxr-xr-x
Con el número
chmod 755 file
Con letras
chmod u=rwx,g=rx,o=rx file

En un VPS fijas los permisos tú mismo: tienes acceso root y puedes dar a cada sitio su propio usuario de Linux. Desde 3,02 € al mes hoy, entre 2226 servidores.

Permisos habituales

ModoLetrasUso
rwxr-xr-xCarpetas, scripts y programas: el propietario los cambia, todos pueden leerlos y ejecutarlos.
rw-r--r--Archivos normales de un sitio web: el propietario escribe, todos leen.
rwxr-x---Como 755, pero los usuarios ajenos al grupo no obtienen nada.
rw-r-----Archivos de configuración que el grupo del servidor web debe leer, como wp-config.php.
rwx------Carpetas y scripts privados, como ~/.ssh.
rw-------Secretos que solo el propietario lee y escribe: claves privadas SSH, archivos .env.
r--------Solo lectura para el propietario, como una clave que nunca debe cambiar.
rwxrwxrwxTodos pueden leer, escribir y ejecutar. Evítalo: cualquier usuario o script pirateado del servidor puede cambiar el archivo.

Permisos para un sitio web

Carpetas 755 y archivos 644 sirven para la mayoría de los sitios: el usuario que despliega escribe y el servidor web lee. Ejecuta esto en la carpeta del sitio y pon después los secretos, como wp-config.php o .env, en 640 o 600.

bash
find /var/www/example.com -type d -exec chmod 755 {} +
find /var/www/example.com -type f -exec chmod 644 {} +
chmod 640 /var/www/example.com/wp-config.php

Funciona en tu navegador: nada de lo que escribes se envía a ningún sitio.

Cómo se calcula

Cada archivo tiene tres conjuntos de permisos: para su propietario, para su grupo y para todos los demás. Cada conjunto tiene tres bits, lectura (4), escritura (2) y ejecución (1), y un dígito octal es su suma.

dígito = lectura 4 + escritura 2 + ejecución 1
modo = propietario, grupo, otros
755 = rwx (4+2+1) r-x (4+1) r-x (4+1)
644 = rw- (4+2) r-- (4) r-- (4)

Un cuarto dígito delante contiene los bits especiales: setuid 4, setgid 2 y sticky 1. ls los muestra en los lugares de la ejecución, s para setuid o setgid y t para sticky, en mayúscula cuando el bit de ejecución de debajo está desactivado. En una carpeta, ejecutar es el derecho a entrar en ella, así que las carpetas necesitan x donde los archivos normales no.

Ejemplo

chmod 640 wp-config.php: el propietario lee y escribe (6 = 4 + 2), el grupo lee (4) y los otros no obtienen nada (0). ls -l muestra entonces -rw-r-----, y el servidor web solo puede leer el archivo si está en el grupo del archivo.

Preguntas

¿Qué significa chmod 755?

El propietario puede leer, escribir y ejecutar (7), y el grupo y todos los demás pueden leer y ejecutar (5 cada uno). ls -l lo muestra como rwxr-xr-x. Es el modo habitual para carpetas y para scripts y programas que otros deben ejecutar.

¿Cuál es la diferencia entre 644 y 755?

Solo el bit de ejecución. 644 (rw-r--r--) deja escribir al propietario y leer a todos; 755 deja además ejecutar a todos. Los archivos normales, como HTML, imágenes y archivos PHP, necesitan 644; las carpetas y los scripts que se ejecutan solos necesitan 755.

¿Por qué no debo usar chmod 777?

777 permite que cualquier usuario y proceso del servidor cambie el archivo. Si un sitio o un plugin es pirateado, el atacante puede reescribir todo lo que tenga 777. Un error de permisos se arregla mejor dando el archivo al usuario correcto con chown, o añadiendo el servidor web al grupo del archivo.

¿Cómo cambio los permisos de todos los archivos de una carpeta?

chmod -R 755 folder cambia todo lo que hay dentro, archivos incluidos, lo que vuelve ejecutable cada archivo. Para distinguir carpetas y archivos, usa find: find folder -type d -exec chmod 755 {} + para las carpetas y find folder -type f -exec chmod 644 {} + para los archivos.