GNU/Linux >> Tutoriales Linux >  >> Linux

Django [Errno 13] Permiso denegado:'/var/www/media/animals/user_uploads'

La resolución de este problema al tratar con el servidor de producción sería hacer uso de collectstatic como ya se mencionó que usó y resolvió o dio permisos a las carpetas. Sin embargo, si su solución está en un entorno local, la solución se puede adquirir configurando el MEDIA local directorio en el settings.py archivo que actúa en el servidor local.

Entonces, agregaría estas dos líneas en el archivo de configuración local como mencionó @Nic Scozzaro:

MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
STATIC_ROOT = os.path.join (BASE_DIR, 'static')

Después de la configuración, reinicie los servicios para aplicar las correcciones.


Cree un directorio 'MEDIA' en la raíz de su proyecto. Luego configure:

MEDIA_ROOT = os.path.join(BASE_DIR,'MEDIA')

Para saber con qué usuario está conectado:

$ whoami
ubuntu

Y agregando a su solución, si está utilizando una instancia de AWS, debe agregar su usuario al grupo para poder acceder a esa carpeta:

Crear un grupo para usuarios de servicios web (varwwwusers)

$ sudo groupadd varwwwusers

Cambia la carpeta www y haz que pertenezca a varwwwusers

$ sudo chgrp -R varwwwusers /var/www/

www-data es el servidor que realiza las solicitudes de django, añádelo al grupo

$ sudo adduser www-data varwwwusers

Cambiar política de carpetas

$ sudo chmod -R 770 /var/www/

Agregue ubuntu al grupo de varwwwusers

$ usermod -a -G varwwwusers ubuntu

¡Espero que esto ayude!


He resuelto esto yo mismo al final.

Cuando se ejecuta en las máquinas de desarrollo, de hecho, estoy ejecutando con los privilegios de mi usuario actual. Sin embargo, cuando se ejecuta en el servidor de implementación, de hecho estoy ejecutando a través de wsgi , lo que significa que se está ejecutando usando www-data privilegios de.

www-data no es el propietario ni está en el grupo de usuarios que poseen /var/www . Esto significa que www-data se trata como other y tiene los permisos establecidos para otros.

El MALO la solución a esto sería hacer:

sudo chmod -R 777 /var/www/

Esto daría a todos acceso completo a todo en /var/www/ , lo cual es una muy mala idea.

Otro MAL la solución sería hacer:

sudo chown -R www-data /var/www/

Esto cambiaría el propietario a www-data , que abre vulnerabilidades de seguridad.

El BUENO la solución sería:

sudo groupadd varwwwusers
sudo adduser www-data varwwwusers
sudo chgrp -R varwwwusers /var/www/
sudo chmod -R 760 /var/www/

Esto agrega www-data al varwwwusers grupo, que luego se establece como el grupo para /var/www/ y todas sus subcarpetas. chmod otorgará permisos de lectura, escritura y ejecución al propietario, pero el grupo no podrá ejecutar ningún script potencialmente cargado allí si, por ejemplo, el servidor web fuera pirateado.

Podrías establecerlo en 740 para hacerlo más seguro, pero entonces no podrá usar Django's collectstatic funcionalidad, así que apégate a 760 a menos que esté muy seguro de lo que está haciendo.


Linux
  1. ¿Permiso de Sudo denegado pero Su otorga permiso?

  2. UNIX/Linux:¿Cuál es el permiso correcto de los directorios /tmp y /var/tmp?

  3. permiso denegado para el compositor en /usr/local/bin/

  4. Use un repositorio git en /var/www/html/

  5. Django static_root en /var/www/... - sin permisos para recopilar estática

CentOS / RHEL:Cómo rotar el archivo /var/log/wtmp y /var/log/btmp usando logrotate

¿Cómo puedo otorgar acceso de escritura a una carpeta a todos los usuarios en Linux?

¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

¿Cómo administro /var/www?

¿Por qué los directorios /home, /usr, /var, etc. tienen todos el mismo número de inodo (2)?

Los registros del sistema están vacíos (/var/log/messages; /var/log/secure; etc.)