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.