13 votes

nginx 403 Forbidden Error hébergeant le répertoire personnel de l'utilisateur

J'ai installé nginx 1.1.19 sur Ubuntu 12.04 sur ma machine locale et j'ai gardé les paramètres par défaut. /etc/nginx/nginx.conf sauf pour changer la directive utilisateur.

/etc/nginx/nginx.conf

user nginx www-data;
worker_processes 4;
pid /var/run/nginx.pid;
...

Je veux faire fonctionner un site statique simple avec la racine web dans mon répertoire utilisateur (disons que mon nom d'utilisateur est 'ubuntu'). Voici la configuration de mon site de test.

/etc/nginx/sites-available/test-site

server {
    #listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

    root /home;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    try_files $uri $uri/ /index.html;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
    }

}

Il est évident que tous mes fichiers se trouvent à la racine du site web et que je ne mettrais PAS cela sur un vrai serveur, mais cela illustre mon propos. Si je crée une page web simple dans /home/index.html (pas dans mon dossier utilisateur ubuntu), je peux accéder à cette page à l'adresse suivante http://localhost/

Cela fonctionne très bien. Maintenant, je veux simplement mettre la racine du site web à l'intérieur du dossier de l'utilisateur. Donc dans /etc/nginx/sites-available/test-site je change la directive root pour qu'elle soit `root /home/ubuntu ;. Je recrée le lien symbolique vers test-site, déplace /home/index.html vers /home/ubuntu/index.html et arrête et démarre le serveur nginx. Maintenant, je reçois l'erreur 403 Forbidden.

Mon premier soupçon était que c'était un problème de permissisons. Cependant, lorsque j'exécute ls -al index.html Je vois.

-rw-r--r--  1 nginx   www-data   183 Aug 12 13:13 index.html

laquelle me semble la bonne ? Même en exécutant chmod 777 /home/ubuntu/index.html pour que les permissions soient les suivantes

-rwxrwxrwx 1 nginx www-data 183 Aug 12 13:13 index.html

n'est pas utile. /etc/init.d/nginx configtest ne produit pas d'erreur non plus et je suis sûr que le lien symbolique en /etc/

J'y suis depuis quelques heures et je me demande maintenant ce qu'il y a de si spécial dans mon répertoire utilisateur pour que je ne puisse rien servir à l'intérieur ? Ubuntu crypte les répertoires personnels ces jours-ci ? Cela pourrait-il être le problème ? J'ai également ce problème sur une instance EC2 Ubuntu 12.04 (je ne sais pas si les répertoires d'utilisateurs y sont cryptés).

15voto

dgh Points 458

Permissions par défaut du répertoire d'accueil de l'utilisateur

Il semble donc que les permissions par défaut sur les répertoires personnels des utilisateurs dans Ubuntu 12.04 soient de 700. Nginx doit avoir le droit de lire les fichiers qui doivent être servis ET avoir le droit d'exécuter dans chacun des répertoires parents le long du chemin allant de la racine aux fichiers servis.

Vous pouvez donner ces permissions à votre répertoire utilisateur en exécutant

chmod 701 user_home

Vous pouvez également utiliser 755, qui est le paramètre d'autorisation par défaut du répertoire personnel sur de nombreux systèmes.

Les répertoires/fichiers de la racine de votre site Web peuvent appartenir à l'utilisateur www-data ou à votre utilisateur personnel habituel tant que l'utilisateur/groupe sous lequel nginx s'exécute (tel que défini dans nginx.conf) dispose de l'autorisation READ sur tous les fichiers à servir et de l'autorisation execute sur tous les répertoires de la racine du site Web.

J'ai simplement configuré tous les répertoires de ma racine web pour qu'ils appartiennent à mon compte utilisateur et qu'ils aient des permissions 755, et j'ai configuré tous les fichiers à servir à partir de la racine web pour qu'ils aient des permissions 664, car ce sont les valeurs par défaut sur ma machine.

Note sur la conversion des numéros de permission en String Rep.

Ex. drwxr-x--x becomes 751.

Ignorez le premier caractère (d pour répertoire, - pour fichier, etc.). Les 9 caractères restants forment un triplet binaire où tout caractère non tiret est un 1 et un tiret est un 0.

So drwxr-x--x becomes rwxr-x--x 
becomes 111 101 001 
which is converted to a decimal 751

J'ai eu besoin d'un rappel à ce sujet lorsque j'ai eu affaire à des autorisations.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X