GNU/Linux >> Linux Esercitazione >  >> Linux

Django [Errno 13] Autorizzazione negata:'/var/www/media/animals/user_uploads'

La soluzione per questo problema quando si ha a che fare con il server di produzione sarebbe quella di utilizzare collectstatic come già accennato che ha utilizzato e risolto o concedere autorizzazioni alle cartelle. Tuttavia, se la tua soluzione si trova in un ambiente locale, la soluzione può essere acquisita configurando il MEDIA locale directory in settings.py file che agisce sul server locale.

Quindi, aggiungerei queste due righe nel file di configurazione locale come menzionato da @Nic Scozzaro:

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

Dopo la configurazione riavviare i servizi per applicare le correzioni.


Crea una directory 'MEDIA' nella root del tuo progetto.Quindi imposta:

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

Per sapere con quale utente sei connesso:

$ whoami
ubuntu

E aggiungendo alla tua soluzione, se stai utilizzando un'istanza AWS, dovresti aggiungere il tuo utente al gruppo per poter accedere a quella cartella:

Creare un gruppo per gli utenti dei servizi web (varwwwusers)

$ sudo groupadd varwwwusers

Cambia la cartella www e falla appartenere a varwwwusers

$ sudo chgrp -R varwwwusers /var/www/

www-data è il server che effettua le richieste Django, aggiungilo al gruppo

$ sudo adduser www-data varwwwusers

Cambia criterio cartella

$ sudo chmod -R 770 /var/www/

Aggiungi Ubuntu al gruppo di varwwwusers

$ usermod -a -G varwwwusers ubuntu

Spero che questo aiuti!


Alla fine ho risolto da solo.

Durante l'esecuzione sulle macchine di sviluppo, in effetti sto utilizzando i privilegi del mio attuale utente. Tuttavia, durante l'esecuzione sul server di distribuzione, in realtà sto eseguendo wsgi , il che significa che è in esecuzione utilizzando www-data privilegi di.

www-data non è né il proprietario né il gruppo di utenti che possiede /var/www . Ciò significa che www-data viene trattato come other e ha i permessi impostati su altri.

Il Cattivo la soluzione a questo sarebbe fare:

sudo chmod -R 777 /var/www/

Questo darebbe a tutti pieno accesso a tutto in /var/www/ , che è una pessima idea.

Un altro BATTITO la soluzione sarebbe fare:

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

Questo cambierebbe il proprietario in www-data , che apre vulnerabilità di sicurezza.

Il BUONO la soluzione sarebbe:

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

Questo aggiunge www-data al varwwwusers group, che viene quindi impostato come gruppo per /var/www/ e tutte le sue sottocartelle. chmod darà i permessi di lettura, scrittura, esecuzione al proprietario ma il gruppo non sarà in grado di eseguire alcuno script potenzialmente caricato lì se, ad esempio, il server web è stato violato.

Potresti impostarlo su 740 per renderlo più sicuro, ma non sarai in grado di utilizzare Django's collectstatic funzionalità quindi attieniti a 760 a meno che tu non sia molto sicuro di quello che stai facendo.


Linux
  1. Autorizzazione Sudo negata ma Su concede l'autorizzazione?

  2. Differenza tra /var/log/messages, /var/log/syslog e /var/log/kern.log?

  3. CentOS / RHEL:come ruotare i file /var/log/wtmp e /var/log/btmp usando logrotate

  4. Django static_root in /var/www/... - nessuna autorizzazione a collectstatic

  5. Ubuntu create-react-app fallisce con autorizzazione negata

Debian – Spostare /var, /home in una partizione separata?

UNIX / Linux :Qual è il permesso corretto delle directory /tmp e /var/tmp

autorizzazione negata per il compositore in /usr/local/bin/

Usa un repository git su /var/www/html/

Perché le directory /home, /usr, /var, ecc. hanno tutte lo stesso numero di inode (2)?

I log di sistema sono vuoti (/var/log/messages; /var/log/secure; ecc.)