Problèmes liés aux autorisations: comment Apache peut-il accéder aux fichiers de mon répertoire personnel?

29

Je sais que les permissions de fichiers ont déjà été abordées ici, mais je me démène pour comprendre le concept de mon scénario.

  • J'ai créé les fichiers sur une ancienne installation ubuntu.
  • J'ai copié les fichiers dans ma nouvelle installation ubuntu et les ai placés dans mon site Web.
  • Lorsque j'essaie d'exécuter les fichiers (ils sont des fichiers PHP), je reçois une erreur concernant les autorisations

pour tenter de résoudre ce problème, j'ai supposé qu'ils devaient toujours appartenir au précédent propriétaire, donc j'ai exécuté chown -R sur le répertoire, avec mon nom d'utilisateur en argument, afin de prendre possession de tous les fichiers dans le répertoire Il convient de noter que les noms d'utilisateur entre les nouvelles et les anciennes installations d'ubuntu étaient les mêmes.

Lorsque j'essaie de relancer les fichiers, même problème: erreur 500 due à des problèmes de permissions. Quelqu'un peut-il me dire quelles autres mesures je devrais prendre?

La racine Web de mon installation apache se trouve dans mon dossier personnel. Si je crée de nouveaux fichiers dans mon site Web, ils fonctionnent également comme prévu, seuls les anciens fichiers à l'origine du problème.

    
posée richzilla 17.02.2011 - 19:15
la source

4 réponses

14

Le répertoire d’exécution des répertoires situés au-dessus de votre racine Web doit permettre à Apache de pénétrer dans les répertoires.

Si votre webroot est situé à /home/user/htdocs , le bit d’exécution doit être défini pour / , /home , /home/user et /home/user/htdocs .

La solution ci-dessus "fonctionne", mais ce n’est pas idéal. Si vous avez créé un dossier, Apache ne peut pas y écrire. L'inverse se produit aussi.

Cela peut être "corrigé" en définissant umask 0007 et en vous ajoutant au groupe Apache (www-data si je ne me trompe pas), afin que les fichiers et dossiers nouvellement créés soient accessibles en écriture par le groupe.

Vous pouvez également installer un autre MPM Apache: Apache2 MPM ITK (info sur la configuration ) et ajustez la configuration pour qu'Apache s'exécute sous votre utilisateur.

    
réponse donnée Lekensteyn 17.02.2011 - 19:35
la source
37

Si vos documents de serveur se trouvent dans le répertoire /home/$USER/public_html , vous devez exécuter

sudo chown -R www-data:www-data /home/$USER/public_html

attribuer la propriété du dossier DocumentRoot à l'utilisateur www-data et au groupe www-data .

Ensuite, vous pouvez vous ajouter au groupe www-data

sudo adduser $USER www-data

Enfin, vous devez rendre le dossier DocumentRoot accessible en écriture par le propriétaire (utilisateur de données www) et vous-même (dans le cadre du groupe www-data ):

sudo chmod -R 775 /home/$USER/public_html

Pour plus de commodité, vous pouvez créer un script nommé public_html_fix.sh avec le contenu:

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

Enregistrez-le dans /home/$USER/bin et rendez-le exécutable à l'aide de:

sudo chmod +x /home/$USER/bin/public_html_fix.sh

Ensuite, vous l’appelez chaque fois que vous en avez besoin, où que vous vous trouviez sur le système de fichiers:

public_html_fix.sh
    
réponse donnée Marko 09.10.2011 - 02:28
la source
1

En dehors des fichiers chmodés et de l'édition des fichiers apache .conf, je tiens à dire que rien n'a fonctionné pour moi car mes fichiers se trouvaient sur une partition que j'avais montée automatiquement via nautilus. Cela limite la partition pour votre utilisateur uniquement.

Pour vérifier si vos fichiers sont visibles par www-root ou quel que soit l'utilisateur qui exécute apache (exécutez ps -aux | grep apache2 pour vérifier), exécutez la commande suivante:

sudo su -l www-data -s /bin/bash

et essayez de lire un fichier depuis la racine de votre document.

Si le fichier n'est pas lisible, vérifiez que:

1) vous avez défini toutes les autres autorisations de fichier

2) vous avez utilisé FollowSymlinks dans vos fichiers .conf si nécessaire

3) vous avez configuré DocumentRoot

3) montez votre partition pour tous les utilisateurs. J'ai dû éditer /etc/fstab et spécifier ma partition via son UUID:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

Démontez ensuite votre partition via nautilus et faites un sudo mount -a . Si tout se passe bien, vos fichiers sont maintenant sous /mnt . Mettez à jour vos liens symboliques et vous êtes prêt à partir.

    
réponse donnée alexg 29.04.2015 - 20:02
la source
1

La meilleure façon de le configurer est la façon dont VirtualMin le fait.

créer un utilisateur et un groupe "myhome"

Faites de l’utilisateur apache un membre du groupe "myhome". Pas l'inverse, comme le décrivent certaines des explications ici

Maintenant, Apache a lu et exécuté l’accès à / home / myhome en plus de / home / myhome / www

"myhome" utilisateur a un accès en écriture

    
réponse donnée user458431 07.10.2015 - 03:47
la source

Lire d'autres questions sur les étiquettes