Apache lié à un répertoire personnel - Erreurs de permission

15

Im ayant quelques problèmes avec un lien symbolique /var/www/vers un nouveau Webrootrépertoire dans mon dossier d'accueil. Je pense que cela provient de mon manque de compréhension des autorisations Linux.

Pour autant que je sache, les liens symboliques devraient prendre la forme du répertoire que vous souhaitez lier et du répertoire auquel vous souhaitez être lié, donc dans mon cas, j'ai couru:

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

cela a en quelque sorte fonctionné, si je cours ls, /var/www/je peux voir tous les fichiers dans mon Webrootrépertoire.

Chaque fois que j'essaie d'exécuter un fichier qui se trouve dans mon Webrootdossier, j'obtiens une erreur d'autorisation 403, est-ce parce 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 afin de l'exécuter?

J'ai déjà exécuté une instance Apache locale en pointant la racine du répertoire de mon vhost par défaut vers le Webrootdossier, dans ce cas, je n'ai pas eu besoin de modifier les autorisations. Toute aide serait appréciée.

richzilla
la source
avez-vous vérifié pour vous assurer qu'apache n'est pas configuré pour ne pas suivre les liens symboliques .... j'ai eu ce problème une fois. un fil conducteur sur un autre forum pourrait être ici: linuxforums.org/forum/servers/…
RobotHumans

Réponses:

15

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

1). activez le module apache userdir.

sudo  a2enmod userdir

cela activera le module apache userdir. Maintenant, vous pouvez mettre le contenu du site Web ~/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émarrez l'apache

sudo /etc/init.d/apache2 restart

Vous pouvez maintenant accéder au site en naviguant sur votre navigateur vers http: // ip-address / ~ username . Vous pouvez également définir un hôte virtuel pour ce site.

Si vous cherchez à exécuter des fichiers php, vous devez faire une étape de plus

éditez /etc/apache2/mods-enabled/php5.confet commentez les lignes suivantes:

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

Redémarrez ensuite l'apache.

C'est ça. 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 à le poster ici.

aneeshep
la source
7

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

Si vous utilisez PHP, vous voudrez peut-être jeter un œil à suexec , suphp ou php-fpm et fastcgi .


Vous avez raison sur votre problème, il s'agit d'un problème d'autorisation dans le fait que vos Webrootfichiers appartiennent à un utilisateur différent de celui 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 exécuterez !!

Modifiez votre Webrootdossier et vos sous-dossiers et fichiers pour que la propriété du groupe soit définie www-dataet 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

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

Weboide
la source
2

J'ai fait presque la même chose avec Debian Lenny, mais je suis passé en mode non-hax, j'ai correctement configuré apache. Mais avec symlink:

$ 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 le permisson du ~ et du ~ / Webroot , je pense que votre dir (~) est protégé en lecture, je veux dire, vous devez exécuter ceci:

$ ls -la /home

Pour définir les bons 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. à / chez moi comme moi , car cela peut être un problème de sécurité.

"#" signifie permisson racine , ex. écrire sudo avant les commandes; "$" signifie permisson mono-utilisateur

antivirtel
la source
0

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

zVictor
la source
Pourquoi? S'agit-il d'une limitation Apache ou d'une limitation du système de fichiers?
Flimm
Pardon. Je n'ai pas vérifié les informations, elles sont juste basées sur une expérience personnelle.
zVictor
0

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

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

C'est Require all grantedune nouvelle fonctionnalité, je suppose; ayant une valeur par défaut de denied.

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

Peter
la source