GNU/Linux >> Tutoriels Linux >  >> Linux

Django [Errno 13] Autorisation refusée :'/var/www/media/animals/user_uploads'

La résolution de ce problème lorsqu'il s'agit du serveur de production serait d'utiliser collectstatic comme déjà mentionné qu'il a utilisé et résolu ou de donner des autorisations aux dossiers. Cependant si votre solution est dans un environnement local, la solution peut être acquise en configurant le MEDIA local répertoire dans le settings.py fichier qui agit sur le serveur local.

Donc, ajouterait ces deux lignes dans le fichier de configuration local comme @Nic Scozzaro l'a mentionné :

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

Après la configuration, redémarrez les services pour appliquer les correctifs.


Créez un répertoire 'MEDIA' à la racine de votre projet.Puis définissez :

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

Pour savoir à quel utilisateur vous êtes connecté :

$ whoami
ubuntu

Et en plus de votre solution, si vous utilisez une instance AWS, vous devez ajouter votre utilisateur au groupe pour pouvoir accéder à ce dossier :

Création d'un groupe pour les utilisateurs des services Web (varwwwusers)

$ sudo groupadd varwwwusers

Modifier le dossier www et le faire appartenir à varwwwusers

$ sudo chgrp -R varwwwusers /var/www/

www-data est le serveur qui effectue les requêtes Django, ajoutez-le au groupe

$ sudo adduser www-data varwwwusers

Modifier la politique de dossier

$ sudo chmod -R 770 /var/www/

Ajouter ubuntu au groupe de varwwwusers

$ usermod -a -G varwwwusers ubuntu

J'espère que cela vous aidera !


J'ai résolu cela moi-même à la fin.

Lors de l'exécution sur les machines de développement, j'utilise en fait les privilèges de mon utilisateur actuel. Cependant, lors de l'exécution sur le serveur de déploiement, j'exécute en fait wsgi , ce qui signifie qu'il s'exécute en utilisant www-data les privilèges de.

www-data n'est ni le propriétaire ni dans le groupe d'utilisateurs qui possèdent /var/www . Cela signifie que www-data est traité comme other et a les autorisations définies sur d'autres.

Le MAUVAIS la solution serait de faire :

sudo chmod -R 777 /var/www/

Cela donnerait à chacun un accès complet à tout en /var/www/ , ce qui est une très mauvaise idée.

Un autre MAUVAIS la solution serait de faire :

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

Cela changerait le propriétaire en www-data , ce qui ouvre des failles de sécurité.

Le BIEN la solution serait :

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

Cela ajoute www-data au varwwwusers groupe, qui est ensuite défini comme groupe pour /var/www/ et tous ses sous-dossiers. chmod donnera des autorisations de lecture, d'écriture et d'exécution au propriétaire, mais le groupe ne pourra exécuter aucun script potentiellement téléchargé si, par exemple, le serveur Web a été piraté.

Vous pouvez le définir sur 740 pour le rendre plus sûr, mais vous ne pourrez pas utiliser Django's collectstatic fonctionnalité donc respectez 760 sauf si vous êtes très sûr de ce que vous faites.


Linux
  1. Autorisation Sudo refusée mais Su accorde l'autorisation ?

  2. Différence entre /var/log/messages, /var/log/syslog et /var/log/kern.log ?

  3. CentOS / RHEL :Comment faire pivoter les fichiers /var/log/wtmp et /var/log/btmp à l'aide de logrotate

  4. autorisation refusée pour composer dans /usr/local/bin/

  5. Utilisez un dépôt git sur /var/www/html/

Comment puis-je donner l'accès en écriture d'un dossier à tous les utilisateurs sous Linux ?

Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

Comment administrer /var/www ?

unix:///var/run/supervisor.sock aucun fichier de ce type

Pourquoi les répertoires /home, /usr, /var, etc. ont-ils tous le même numéro d'inode (2) ?

Autorisation refusée de redimensionner le système de fichiers