web-dev-qa-db-fra.com

Apache liée symboliquement au répertoire personnel - Erreurs de permission

j'ai quelques problèmes à relier mon /var/www/ à un nouveau répertoire Webrootdans mon dossier personnel. Je pense que ceux-ci proviennent de mon manque de compréhension des autorisations sous Linux.

Pour autant que je sache, les liens symboliques doivent prendre la forme du répertoire que vous souhaitez lier et du répertoire auquel vous souhaitez être lié. C'est pourquoi, dans mon cas, j'ai exécuté:

Sudo ln -s ~/Webroot/* /var/www/

cela a en quelque sorte fonctionné. Si je lance lssur /var/www/, je peux voir tous les fichiers de mon répertoire Webrootname__.

Chaque fois que j'essaie d'exécuter un fichier qui se trouve dans mon dossier Webrootname__, j'obtiens une erreur d'autorisation 403. Cela s'explique-t-il par le fait que les fichiers de mon répertoire Webroot sont créés par moi et que l'instance Apache est exécutée en tant que www-data?

si tel est le cas, cela signifie-t-il que je dois modifier les autorisations sur chaque fichier que je crée pour pouvoir l'exécuter?

J'ai déjà exécuté une instance locale d'Apache en pointant la racine du répertoire de mon hôte virtuel par défaut sur le dossier Webrootname__. Dans ce cas, je n'ai pas eu besoin de modifier les autorisations. Toute aide serait appréciée.

14
richzilla

Ce n'est pas une bonne pratique, je suis d'accord avec Weboide. Mais il existe un moyen simple d'atteindre cet objectif.

1). activer le module Apache userdir.

Sudo  a2enmod userdir

cela activera le module Apache userdir. Maintenant, vous pouvez mettre le contenu du site Web dans ~/Webroot/ ou quoi que ce soit dans votre répertoire personnel.

Remarque: le dossier par défaut est ~/public_html

2) Apportez les modifications nécessaires à /etc/Apache2/mods-enabled/userdir.conf.

3) Redémarrer Apache

Sudo /etc/init.d/Apache2 restart

Vous pouvez maintenant accéder au site en naviguant sur votre navigateur jusqu'à http: // adresse IP/~ nom d'utilisateur . Vous pouvez également définir un hôte virtuel pour ce site.

Si vous souhaitez exécuter des fichiers php, vous devez effectuer une étape supplémentaire.

éditez le /etc/Apache2/mods-enabled/php5.conf et commentez les lignes suivantes:

 <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>

Puis redémarrez Apache.

C'est tout. Vous avez terminé.

Réf.: Https: //wiki.ubuntu.com/UserDirectoryPHP

J'espère que cela t'aides. Si vous rencontrez des difficultés, n'hésitez pas à les poster ici.

14
aneeshep

Ce n'est pas une bonne pratique pour réaliser ce que vous voulez.

Si vous utilisez PHP, vous pouvez jeter un oeil à suexec, suphp ou php-fpm et fastcgi =.


Vous avez raison en ce qui concerne votre problème. Il s’agit d’un problème d’autorisation du fait que vos fichiers Webroot appartiennent à un utilisateur différent de www-data.

Voici une solution pas si mauvaise pour contourner votre problème. Notez que vous devrez probablement utiliser Sudo ou vous connecter en tant que root. Assurez-vous de bien comprendre toutes les commandes que vous allez exécuter!

Modifiez votre dossier Webroot ainsi que vos sous-dossiers et fichiers pour que la propriété du groupe soit définie sur www-data et définissez les autorisations appropriées:

# set the group ownership to be www-data
chgrp -R www-data /path/to/home/Webroot/
# make sure www-data has read & write permissions (change it to `g=r` if you want to only give read-only access)
chmod -vR g=rw /path/to/home/Webroot/
# make sure www-data can access the folders by adding the group execute bit field to directories
find /path/to/home/Webroot/ -type d -print0 | xargs -0p chmod -v g+x

Edit: Notez que vous devrez certainement réexécuter ces commandes si vous ajoutez des fichiers/dossiers à l'aide de votre compte d'utilisateur habituel.

6
Weboide

J'ai fait presque la même chose avec Lenny, mais j'ai changé en mode non-hax, j'ai correctement configuré Apache. Mais avec un lien symbolique:

$ ll /home
drwxr-xr-x  8 root   root   4,0K nov 14 14.59 .
drwxrwxrwx  7 root   root   4,0K nov 14 21.24 www -> /var/www

Je pense que vous devriez vérifier la permisson du ~ et du ~/Webroot, je pense que votre répertoire (~) est protégé en lecture, je veux dire , vous devez exécuter ceci:

$ ls -la /home

Pour définir les bonnes permissinons, utilisez:

# chmod 755 /home
# chmod 755 /home/<YOURNAME>
# chown <YOURNAME>:www-data -R /home/<YOURNAME>/Webroot
# chmod 775 -R /home/<YOURNAME>/Webroot

Je pense que cela devrait aider, mais donnez-moi plus d'informations à ce sujet. Je vous suggère, pour sortir le Webroot de votre dir, ex. à / home comme moi , car cela peut poser un problème de sécurité.

"#" signifie permisson racine, ex. write Sudo avant les commandes; "$" signifie un utilisateur unique

1
antivirtel

J'ai été confronté à ce problème. Mais je n’ai pas aimé l’idée de changer le groupe de mon répertoire personnel en www-data. Ce problème peut être simplement résolu en modifiant le fichier de configuration du virtualHost. Configurez simplement la balise Directory pour les inclure

<Directory "your directory here">
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

Le Require all granted est une nouvelle fonctionnalité, je suppose; ayant une valeur par défaut de deniedname__.

Voir cette page pour référence: http://httpd.Apache.org/docs/current/mod/core.html#directory

0
Peter

Vous devez vérifier les autorisations non seulement de votre destination, mais également de ses parents.

0
zVictor