Saltar al contenido
softperu.pe

🔐 Permisos y Propietarios de Archivos (www-data)

En entornos GNU/Linux donde corre el servidor web (Apache / Nginx con PHP-FPM), los procesos del sistema se ejecutan bajo el usuario y grupo del sistema www-data.

Si los archivos o directorios pertenecen a otro usuario (como root o tu usuario de sesión SSH) sin permisos de grupo adecuados, el sistema lanzará errores de Permission denied al intentar escribir logs, generar archivos PDF, crear backups o actualizar la documentación.


📌 ¿Para qué sirven estos comandos?

1. Cambiar el grupo propietario a www-data (chgrp)

chgrp -R www-data /ruta/completa/git.buho.la/pro9/resources/docs/
  • chgrp (Change Group): Asigna el grupo propietario del directorio o archivo.
  • -R (Recursive): Aplica el cambio a todas las subcarpetas y archivos contenidos dentro.
  • www-data: Es el grupo bajo el cual corre el servidor web en distribuciones basadas en Debian/Ubuntu. Al pertenecer a este grupo, el servidor web tiene acceso a interactuar con los archivos.

2. Otorgar permisos de lectura y escritura (chmod)

⚠️ Por qué NO usar chmod -R 775 en todo el proyecto:

Si ejecutas chmod -R 775 de forma masiva sobre todos los archivos, le agregarás el bit de ejecución (+x) a archivos de texto plano y markdown (.md, .json, .php, .png), provocando que Git detecte un cambio de modo (mode change 100644 => 100755) en miles de archivos.

✅ Forma correcta (Diferenciar entre Carpetas y Archivos):

Para que el servidor web pueda entrar a los directorios y escribir en los archivos sin ensuciar el historial de Git, se deben separar los permisos:

  1. Para carpetas y directorios (775):

    find resources/docs/ -type d -exec chmod 775 {} +
    

    Permite al servidor web listar (r), crear/eliminar (w) y entrar/navegar (x) en los directorios.

  2. Para archivos (664):

    find resources/docs/ -type f -exec chmod 664 {} +
    

    Permite al servidor web leer (r) y modificar (w) el contenido sin marcarlos como ejecutables.


🚀 Comando completo recomendado

Para corregir los permisos de documentación o almacenamiento de una sola vez:

# Asignar grupo del servidor web
chgrp -R www-data resources/docs/

# Dar permisos 775 a directorios y 664 a archivos
find resources/docs/ -type d -exec chmod 775 {} +
find resources/docs/ -type f -exec chmod 664 {} +

Con esta configuración, tanto tu usuario de consola como el servidor web (www-data) pueden editar y sincronizar archivos sin bloqueos ni conflictos en Git.