GNU/Linux >> Znalost Linux >  >> Linux

Django [Errno 13] Oprávnění odepřeno:'/var/www/media/animals/user_uploads'

Řešením tohoto problému při jednání s produkčním serverem by bylo použití collectstatic, jak již bylo zmíněno, že použil a vyřešil nebo udělil oprávnění složkám. Pokud je však vaše řešení v místním prostředí, lze jej získat konfigurací místního MEDIA adresář v settings.py soubor, který funguje na místním serveru.

Takže by se přidaly tyto dva řádky do místního konfiguračního souboru, jak zmínil @Nic Scozzaro:

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

Po konfiguraci restartujte služby pro použití oprav.


Vytvořte adresář 'MEDIA' v kořenovém adresáři svého projektu. Poté nastavte:

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

Chcete-li zjistit, ke kterému uživateli jste přihlášeni:

$ whoami
ubuntu

A přidáním vašeho řešení, pokud používáte instanci AWS, měli byste přidat svého uživatele do skupiny, abyste měli přístup k této složce:

Vytvoření skupiny pro uživatele webových služeb (varwwwusers)

$ sudo groupadd varwwwusers

Změňte složku www a přiřaďte ji varwwwusers

$ sudo chgrp -R varwwwusers /var/www/

www-data je server, který odesílá požadavky django, přidejte ho do skupiny

$ sudo adduser www-data varwwwusers

Změnit zásady složky

$ sudo chmod -R 770 /var/www/

Přidat ubuntu do skupiny varwwwusers

$ usermod -a -G varwwwusers ubuntu

Doufám, že to pomůže!


Sám jsem to nakonec vyřešil.

Když běžím na vývojových strojích, ve skutečnosti běžím s oprávněními mého aktuálního uživatele. Když však běžím na implementačním serveru, ve skutečnosti běžím přes wsgi , což znamená, že běží pomocí www-data privilegia uživatele.

www-data není vlastníkem ani ve skupině uživatelů, kteří vlastní /var/www . To znamená, že www-data je považováno za other a má oprávnění nastavena pro ostatní.

ŠPATNÉ řešením by bylo udělat:

sudo chmod -R 777 /var/www/

To by každému poskytlo úplný přístup ke všemu v /var/www/ , což je velmi špatný nápad.

Další ŠPATNÉ řešením by bylo udělat:

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

Tím by se vlastník změnil na www-data , který otevírá chyby zabezpečení.

DOBRÉ řešení by bylo:

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

Tím se přidá www-data na varwwwusers group, která je pak nastavena jako skupina pro /var/www/ a všechny jeho podsložky. chmod dá vlastníkovi oprávnění ke čtení, zápisu a spouštění, ale skupina nebude moci spustit žádný skript, který by tam byl potenciálně nahrán, pokud by byl například webový server napaden.

Můžete jej nastavit na 740 aby to bylo bezpečnější, ale pak nebudete moci používat Django's collectstatic funkčnost, takže se držte 760 pokud si nejste velmi jisti tím, co děláte.


Linux
  1. Povolení sudo odepřeno, ale Su uděluje povolení?

  2. Rozdíl mezi /var/log/messages, /var/log/syslog a /var/log/kern.log?

  3. CentOS / RHEL :Jak otočit soubory /var/log/wtmp a /var/log/btmp pomocí logrotate

  1. povolení odepřeno pro skladatele v /usr/local/bin/

  2. Použijte úložiště git na /var/www/html/

  3. Django static_root v /var/www/... - žádná oprávnění ke collectstatic

  1. Ubuntu create-react-app se nezdaří s odepřeným oprávněním

  2. Kdy mám použít /dev/shm/ a kdy /tmp/?

  3. unix:///var/run/supervisor.sock žádný takový soubor