Al crear un sitio web, ¿qué permisos y estructura de directorio debe tener la ruta?

También publiqué esta pregunta en StackExchange y recibí una respuesta realmente completa que otros podrían encontrar útil. Del usuario Lekensteyn:

“Se pueden otorgar permisos al propietario, grupo y otros.
Primero, decida qué permisos son necesarios y qué usuarios están involucrados:

  • Nginx ejecutándose como www-data (grupo www-data): solo lectura
  • php-fpm ejecutándose como www-data (grupo www-data): lectura y escritura
    (si desea permitir operaciones como chmod, debe ejecutar php-fpm como usuario de SFTP. Cuidado: si alguien puede ejecutar comandos en su servidor desde PHP, él / ella también podrá modificar sus archivos, por ejemplo). bashrc!)
  • sftp / SSH: permisos completos
  • Otros usuarios: sin permisos de lectura y escritura

Solo el propietario de un archivo / directorio puede cambiar los permisos y se prefiere otorgar al usuario SSH esta propiedad. ¿Por qué? Porque es idiota que no puedas modificar tus propios archivos en el webroot y hacer todo como root es una mala idea.
Los usuarios normales no pueden cambiar el grupo de un archivo / directorio, solo el root puede hacerlo. Un bit SETGID especial hace que cada archivo y directorio de un directorio herede el grupo. Con los permisos correctos establecidos, tanto php-fpm como el usuario SSH pueden modificar archivos.

  • Propietario: su usuario SSH
  • Grupo: www-data
  • Permisos para archivos: rw-rw—- (0660)
  • Permisos para directorios: rwxrwx— (2770) El bit de ejecución (2) es necesario para descender a un directorio. Ejecute ‘permisos de archivo’ de información de coreutils para obtener más información sobre este bit
  • umask 007 para que el propietario y el grupo puedan escribir en archivos / directorios y otros usuarios no obtengan permisos.

Suponiendo que su raíz web se encuentra en / var / www / website1, cambie el propietario / grupo y los permisos ejecutando:
sudo chown -R your_ssh_user_here: www-data / var / www / website1
sudo find / var / www / website1 -type f -exec chmod 660 {} \;
sudo find / var / www / website1 -type d -exec chmod 2770 {} \;

Añádete al grupo www-data:
sudo usermod -a -G www-data your_ssh_user_here

Debe volver a iniciar sesión para convertirse en miembro del grupo. Se necesita una configuración adicional para garantizar que los sitios web no puedan acceder a otros archivos si php-fpm se ejecuta como el mismo usuario “.

Creo que el usuario y grupo nginx predeterminado (www-data) hará el trabajo para toda la raíz web. En cuanto a los permisos, generalmente utilizo 644 y luego ciertas carpetas (cargas, registros … etc.) obtienen 755 tratamientos si lo necesitan.