Question nginx 403 Forbidden Error hosting dans le répertoire de base de l'utilisateur


J'ai installé nginx 1.1.19 sur Ubuntu 12.04 sur mon ordinateur local et conservé 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
    }

}

Maintenant, évidemment, met tous mes fichiers dans la racine Web afin que je ne mettrais pas cela sur un vrai serveur, mais cela illustre mon propos. Si je crée une simple page Web à /home/index.html (pas dans mon dossier d’utilisateur Ubuntu), je peux accéder à la page à http://localhost/ 

Cela fonctionne très bien. Maintenant, je veux simplement mettre la racine Web INSIDE par dossier d’utilisateur. Ainsi, dans / etc / nginx / sites-available / test-site, je modifie la directive root en tant que `root / home / ubuntu ;. Je recrée le lien symbolique vers le site test, déplace /home/index.html vers /home/ubuntu/index.html et arrête le serveur nginx. Maintenant, je reçois l'erreur 403 Forbidden.

Mon premier soupçon était qu’il s’agissait d’un problème de permissisons. Cependant, quand je cours ls -al index.html je vois

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

qui me semble juste? Même en exécutant chmod 777 /home/ubuntu/index.html afin que les autorisations soient

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

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

Cela fait donc quelques heures que je suis dans ce domaine et je me demande maintenant ce qui rend mon répertoire utilisateur si particulier que je ne peux rien servir à l'intérieur. Ubuntu crypte les répertoires de base ces jours-ci? Est-ce que cela pourrait ê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 sont cryptés ici)


6
2017-08-12 21:58


origine




Réponses:


Autorisations du répertoire de base de l'utilisateur par défaut

Il semble donc que les autorisations par défaut sur les répertoires de base des utilisateurs dans Ubuntu 12.04 soient 700. Nginx doit disposer des autorisations de lecture sur les fichiers à servir ET disposer des autorisations d'exécution dans chacun des répertoires parent le long du chemin d'accès de la racine aux fichiers servis.

Vous pouvez donner ces autorisations à 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 de base de nombreux systèmes.

Les répertoires / fichiers de votre racine Web peuvent appartenir à l'utilisateur www-data ou à votre utilisateur personnel régulier tant que l'utilisateur / le groupe sous lequel nginx est exécuté (comme défini dans nginx.conf) dispose de l'autorisation READ sur tous les fichiers à servir et exécuter l'autorisation sur tous les répertoires racine Web.

Je viens de définir que tous les répertoires de ma racine Web appartiennent à mon compte d'utilisateur et disposent des autorisations 755 et que tous les fichiers à traiter à partir de la racine Web ont des autorisations 664, car il s'agissait des valeurs par défaut sur ma machine.

Remarque sur la conversion des numéros d’autorisation en représentant de chaîne.

Ex. drwxr-x--x becomes 751.

Ignore le premier caractère (d pour répertoire, - pour fichier, etc.). Les 9 caractères restants forment un triplet binaire où tout caractère autre qu'un 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'avais besoin d'un rappel sur ce sujet lorsque je m'occupais d'autorisations.


12
2017-08-12 21:58



Je ne pense pas que l'ajout d'une autorisation d'exécution sur le répertoire personnel pour tout le monde soit la meilleure solution. Vous ferez mieux d'utiliser acl. Si vous avez défini acl dans / etc / fstab pour une partition donnée, exécutez: setfacl -m 'u:nginx:--x' /home/given_user - Gee-Bee