88 votes

Nginx sert un fichier statique et obtient 403 forbidden.

Je veux juste aider quelqu'un. Oui, vous voulez juste servir un fichier statique en utilisant nginx, et vous avez tout ce qu'il faut dans nginx.conf :

location /static {
       autoindex on;
       #root /root/downloads/boxes/;
       alias /root/downloads/boxes/;
      }

Mais, à la fin, vous avez échoué. Vous avez obtenu "403 forbidden" du navigateur...

---------------------------------------- La réponse ci-dessous : ----------------------------------------

La solution est très simple :


Méthode 1 : Exécuter nginx en tant qu'utilisateur propriétaire de '/Root/downloads/boxes/'.

Sur nginx.conf :

user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;

OUI, dans la première ligne " utilisateur noboy ; " il suffit de supprimer " # " et changer " personne " à votre propre nom d'utilisateur sous Linux/OS X, c'est-à-dire changer en " Racine " pour le test. Le redémarrage de nginx.

Attention Tu ferais mieux de ne pas courir. nginx comme Racine ! Ici juste pour tester, c'est dangereux pour le Hacker.

Pour plus de références, voir nginx (moteur X) - Quelle douleur dans le BUM ! [13 : Permission refusée]


Voie 2 : Changez le propriétaire de '/Root/downloads/boxes/' en 'www-data' ou 'nobody'.

Sur Terminal :

ps aux | grep nginx

Obtenez le nom d'utilisateur de nginx en cours d'exécution. Il doit être www-data ou "personne déterminée par la version de nginx. Ensuite, tapez dans le Terminal(utilisez www-data par exemple) :

chown -R www-data:www-data /root/downloads/boxes/

------------------------------ Une chose plus importante est : ------------------------------

Ces répertoires parents "/" , "/Root" , "/Root/downloads" doit donner à l'execute(x) la permission de www-data ou "personne . c'est-à-dire

ls -al /root
chmod o+x /root
chmod o+x /root/downloads

Pour plus de références, voir Résolution de l'erreur "403 Forbidden" (interdit) y Nginx 403 interdit pour tous les fichiers

80voto

rednaw Points 3856

Vous devez donner à nginx les autorisations de lire le fichier. Cela signifie que vous devez donner à l'utilisateur qui exécute le processus nginx les droits de lecture du fichier.

Cet utilisateur qui exécute le processus nginx est configurable avec l'option user dans la configuration de nginx, généralement située quelque part en haut de la page nginx.conf :

user www-data

http://wiki.nginx.org/CoreModule#user

Le deuxième argument que vous donnez à user est le groupe, mais si vous ne le spécifiez pas, il utilise le même que l'utilisateur, donc dans mon exemple l'utilisateur et le groupe sont tous deux www-data .

Maintenant, les fichiers que vous voulez servir avec nginx doivent avoir les permissions correctes. Nginx doit avoir les permissions de lire les fichiers. Vous pouvez donner au groupe www-data les droits de lecture sur un fichier comme celui-ci :

chown :www-data my-file.html

http://linux.die.net/man/1/chown

avec chown vous pouvez changer l'utilisateur et le groupe propriétaire d'un fichier. Dans cette commande je ne change que le groupe, si vous voulez changer l'utilisateur aussi vous devez spécifier le nom d'utilisateur AVANT les deux points, comme suit chown www-data:www-data my-file.html . Mais le fait de définir correctement les permissions de groupe devrait suffire pour que nginx puisse lire le fichier.

27voto

sandes Points 135

Puisque Nginx manipule directement les fichiers statiques, il doit avoir accès aux aux répertoires appropriés. Nous devons lui donner les droits d'exécution pour notre répertoire personnel.

La façon la plus sûre de le faire est d'ajouter l'utilisateur Nginx à notre propre groupe d'utilisateurs. Nous pouvons ensuite ajouter l'autorisation d'exécution au groupe de propriétaires de notre répertoire personnel, ce qui donne juste assez d'accès pour que Nginx puisse servir les fichiers :

CentOS / Fedora

  sudo usermod -a -G your_user nginx

  chmod 710 /home/your_user 

Définir SELinux en mode global permissif, exécutez :

sudo setenforce 0

pour plus d'informations, veuillez https://www.nginx.com/blog/using-nginx-plus-with-selinux/

Ubuntu / Debian

  sudo usermod -a -G your_user www-data

  sudo chown -R :www-data /path/to/your/static/folder

10voto

masternone Points 96

Pour une réponse acceptée

sudo chown -R :www-data static_folder

pour changer le groupe propriétaire de tous les fichiers de ce dossier

8voto

Alexis Pokrovski Points 121

Après avoir trouvé des réponses très utiles, j'ai décidé de rassembler tout ce qui concerne les permissions sous forme de recette. Plus précisément, la solution la plus simple avec une sécurité maximale (=permissions minimales).

  1. Supposons que nous déployons le site en tant qu'utilisateur admin c'est-à-dire qu'elle possède le site et tout ce qu'il contient. Nous faisons no voulez exécuter nginx en tant que cet utilisateur (trop de permissions). C'est acceptable pour les tests, mais pas pour la production.

  2. Par défaut, Nginx exécute les travailleurs sous un utilisateur nginx c'est-à-dire que la configuration contient la ligne user nginx

  3. Par défaut, l'utilisateur nginx est dans le groupe du même nom : nginx .

  4. Nous voulons donner des permissions minimales à l'utilisateur nginx sans changer la propriété du fichier. Cela semble être la plus sûre des options naïves.

  5. Afin de servir des fichiers statiques, les permissions minimales requises dans la hiérarchie des dossiers (voir les permissions de groupe) devraient être les suivantes (utilisez la commande namei -l /home/admin/WebProject/site/static/hmenu.css ) :

    dr-xr-xr-x Root Root /
    drwxr-xr-x Root Root home
    drwxr-x--- admin nginx admin
    drwx--x--- admin nginx WebProject
    drwx--x--- admin site nginx
    drwx--x--- admin nginx static
    -rwxr----- admin nginx hmenu.css

  6. Ensuite, comment obtenir cette belle photo ? Pour changer la propriété de groupe pour les répertoires, nous appliquons d'abord sudo chown :nginx /home/admin/WebProject/site/static et ensuite répétez la commande en enlevant les répertoires de droite un par un.

  7. Pour changer les permissions pour les répertoires, nous appliquons la procédure suivante sudo chmod g+x /home/admin/WebProject/site/static et à nouveau dépouiller les répertoires.

  8. Changement de groupe pour les fichiers dans le répertoire /static : sudo chown -R :nginx /home/admin/WebProject/site/static

  9. Enfin, changez les permissions pour les fichiers dans le répertoire /static : sudo chmod g+r /home/admin/WebProject/site/static/*

(Bien sûr, on peut créer un groupe dédié et changer le nom de l'utilisateur, mais cela obscurcirait la narration avec des détails sans importance).

8voto

Joe Points 58

Pour moi, c'était SElinux, j'ai dû exécuter ce qui suit : (

sudo setsebool -P httpd_can_network_connect on 
chcon -Rt httpd_sys_content_t /var/www/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X