Vous ne devriez jamais avoir à exécuter un site Web à partir de votre répertoire personnel . DÉJÀ. Sinon, vous devrez donner au serveur Web la possibilité de parcourir/home/
pour voir la structure du répertoire, mais aussi dans/home/$USER/
(répertoire de base de votre utilisateur, où nous pouvons essayer et voir ce qui existe dans votre répertoire utilisateur), ainsi que dans tout autre sous-dossier. dedans là. Un serveur Web mal configuré ou mal configuré ou non corrigé peut provoquer de cette façon une fuite massive de données, ou une perte d'informations d'identification, susceptible de mettre en péril vos données personnelles et vos identifiants de connexion. L’approche symbolique que vous utilisez n’aide pas non plus pour la même raison que celle qui consiste à donner à Apache les autorisations de lecture./home/andre/www/moodle
- le serveur Web doit pouvoir parcourir votre répertoire de base pour accéder à l'emplacement indiqué par le lien symbolique /var/www/html
, ce qui pose toujours ce risque de sécurité.
Tout d'abord, utilisez sudo cp -r /home/andre/www/moodle/ /var/www/html/
. Cela va copier vos fichiers /var/www/html
et les garder loin de votre propre répertoire personnel. Nous rétablirons ensuite les autorisations pour que vous et le serveur Web puissiez accéder à tout ce qui se trouve dans ce répertoire, et donnerons à votre utilisateur une lecture / écriture complète de tous les fichiers et répertoires. Ensuite, vous ne devrez jamais travailler que /var/www/html
pour votre site.
Cette opération est en vigueur en quatre étapes après la copie de vos données dans /var/www/html
:
- Donnez à Apache l’accès aux dossiers et aux fichiers pour qu’il puisse desservir le site sans erreur 403.
- Donnez à votre utilisateur 'propriétaire' sur les fichiers et les dossiers, et donnez-vous la lecture / écriture sur tous les fichiers et tous les dossiers, ainsi que la possibilité de parcourir les répertoires.
- (Facultatif mais recommandé) Configurez-le de manière à ce que tous les fichiers ou dossiers créés à partir de là dans l'ensemble de la structure de répertoires aient le groupe défini
www-data
.
- (Facultatif) Nettoyage final de la sécurité, où nous définissons des autorisations pour que vous et le serveur Web puissiez voir les données du site, mais que les autres utilisateurs ne puissent pas accéder aux fichiers ni à la structure de répertoires du site.
(1) Autorisez Apache à accéder aux dossiers et aux fichiers.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
Cela définit de manière récursive le "groupe" comme étant www-data
pour les dossiers et les fichiers. Cela donne ensuite au serveur Web le droit de rediffuser et d'accéder à la structure de répertoires racine du document de site ( +x
pour les répertoires uniquement). Il s'assure ensuite que le serveur Web dispose des autorisations de lecture pour tous les fichiers, afin que les données du site puissent être reçues.
Dans certains cas, vous devrez peut-être donner au serveur Web le droit d'écrire sur un fichier ou un répertoire. Pour ce faire, vous devez le faire sudo chmod g+w /var/www/html/PATH
(où PATH
est le chemin du fichier ou du dossier dans la structure de répertoires où vous devez appliquer le écrire des autorisations pour le serveur Web).
AVIS : Dans de nombreux cas, cela peut exposer des informations "sécurisées" sur une configuration de site (telles que les informations d'identification d'accès à la base de données, etc.), et vous devez supprimer les "autres" autorisations d'accès à ces données sur ces fichiers ou répertoires individuels. ce qui suit: sudo chmod o-rwx /var/www/html/FILEPATH
(en remplaçant FILEPATH
par le chemin relatif au /var/www/html
dossier du fichier).
Notez également que vous devrez peut-être réexécuter ces commandes à l’avenir si les «nouveaux fichiers» rencontrent 403 problèmes, afin de donner les autorisations appropriées au serveur Web afin de pouvoir continuer à accéder aux fichiers et aux dossiers créés ou copiés dans. le www-data
groupe n'est pas correctement défini.
(2) Donnez à votre propriétaire des privilèges de lecture / écriture sur les dossiers et les fichiers, et autorisez l'accès aux dossiers pour parcourir la structure de répertoires.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
Remplacer USER
dans la première commande avec votre propre nom d'utilisateur!
Nous faisons trois choses ici. Premièrement, nous configurons votre utilisateur pour qu'il soit le "Propriétaire" de tous les fichiers et répertoires de /var/www/html
. Ensuite, nous définissons les autorisations de lecture et d’écriture sur les dossiers et nous vous permettons d’accéder aux dossiers pour y accéder (l’ +x
élément sur les éléments du répertoire). Nous définissons ensuite tous les fichiers sur des autorisations de lecture / écriture pour le propriétaire, ce que nous venons de définir.
(3) (Facultatif) Assurez-vous que chaque nouveau fichier créé est créé avec www-data
l'utilisateur 'accès'.
sudo find /var/www/html -type d -exec chmod g+s {} +
Ceci définit le bit "set gid" pour le groupe sur les répertoires. Les fichiers et les dossiers créés dans ces répertoires auront toujours www-data
le même groupe, permettant ainsi l'accès au serveur Web.
(4) (Facultatif) Nettoyage final de la sécurité, si vous ne voulez pas que les autres utilisateurs puissent voir les données
Nous avons besoin de votre utilisateur pour voir les répertoires et les fichiers. Nous avons également besoin du serveur Web. Nous ne voulons peut-être pas que les autres utilisateurs du système (sauf root) voient les données. Donc, ne leur donnons pas cet accès et faisons en sorte que seul votre utilisateur et le serveur Web puissent voir les données.
sudo chmod -R o-rwx /var/www/html/
REMARQUE: vous n'aurez pas à réexécuter cela plus tard, ni à modifier les autorisations pour la catégorie «autre» d'autorisations ici. Si les 'autres' utilisateurs ne peuvent pas accéder à /var/www/html/
(ils n'ont pas le +x
bit nécessaire /var/www/html
pour parcourir la structure de fichiers et le répertoire, ni le +r
bit pour lire les listes de fichiers), les autorisations sur les éléments situés sous ce répertoire pour d'autres utilisateurs ou les groupes n’auront pas vraiment d’importance.
Il existe également une solution légèrement moins invasive, même s’il n’est pas garanti que tous les nouveaux fichiers fonctionnent, ni sur tous les systèmes de fichiers , impliquant des listes de contrôle d’accès aux fichiers. Cela vous permet de laisser la propriété des fichiers www-data
, mais vous donne des droits de propriété effectifs, à toutes fins utiles, même si vous ne possédez pas personnellement les fichiers.
Cette solution est un peu moins invasive et vous permet de disposer d’un répertoire et de tous les fichiers qu’il possède www-data:www-data
ou qui root:www-data
vous donne également accès. Il utilise des listes de contrôle d'accès , qui permettent à plusieurs utilisateurs d'obtenir des autorisations sans configurer de groupes individuels. Cela permet également au root
ouwww-data
utilisateurs du système aux utilisateurs de posséder des fichiers, mais vous permet également d'ajouter des autorisations supplémentaires au cas par cas et d'ajuster les autorisations de certains utilisateurs afin qu'ils puissent lire des éléments sans les modifier, etc.
En supposant que nous travaillons toujours avec /var/www/html/
, et que nous ne voulons pas surveiller d'autres utilisateurs que nous et le système (et la racine bien sûr) pour voir nos données, nous devrons procéder comme suit:
- Redonner la propriété à l'utilisateur du système du serveur Web
www-data
.
sudo chown -R www-data: www-data / var / www / html
- Récursivement vous donner lecture / écriture sur les fichiers, tout en donnant aux autres utilisateurs (à l'exclusion
www-data
et root
bien sûr) pas d'accès aux fichiers.
sudo trouver / var / www / html -type f -exec setfacl -mu: YOURUSERNAME: rw -m autre :: --- {} \;
- Donnez-vous récursivement lecture / écriture / chemin sur les répertoires, supprimez l'accès aux dossiers des autres utilisateurs (à l'exception de
www-data
et root
) et définissez-le comme ACL 'par défaut' pour les nouveaux fichiers dans les répertoires.
sudo trouver / var / www / html -type d -exec setfacl -d -mu: YOURUSERNAME: rwx -mo :: --- {} \;
- Nous devons également définir le
setgid
bit pour tous les répertoires afin que, si vous créez un fichier, le serveur Web puisse toujours y accéder www-data
via les autorisations de groupe.
sudo find / var / www / html -type d -exec chmod g + x {} \;
Et maintenant, vous avez accès à tous les répertoires, et vous n’avez plus à vous en débarrasser, www-data
ce qui est très utile, car le serveur Web peut toujours créer des fichiers partout où il le souhaite (comme les interfaces basées sur PHP ayant leurs propres répertoires de cache et autres). besoin d’être créé et écrit pour un fonctionnement correct).
Seul inconvénient: si vous créez manuellement de nouveaux fichiers, vous devez les chowner en conséquence pour que le serveur Web devienne propriétaire. C’est simple sudo chown www-data:www-data filename
, et les listes de contrôle d’accès devraient toujours vous permettre d’obtenir des droits de propriété effectifs sur le fichier.
Il y a plusieurs cas où j'ai dû faire cela en tant qu'administrateur système pour un type d'accès non standard sans changer les propriétaires d'un fichier donné. Cela fonctionne, mais a ses propres problèmes, car tous les systèmes de fichiers ne prennent pas en charge les listes d'accès aux fichiers.
+x
vers des fichiers donnerait des permissions à un exécutable, et nous ne voulons pas que les fichiers PHP soient exécutés, nécessairement, via la ligne de commande PHP ou en tant qu'exécutable sur le serveur lui-même. Nous voulons qu'ils soient traités par l'analyseur PHP du serveur Web (et nous pas besoin des fichiers PHP à avoir+x
pour que l’analyseur PHP puisse les lire et les traiter). Les répertoires sont nécessaires+x
pour permettre la traversée des répertoires - c'est-à-dire que si un répertoire n'est pas+x
et que je ne suis pas root, je ne peux pas entrer dans ce répertoire. C'est le problème que vous aviez avec Apache ne fonctionnant pas avec vos liens symboliques et votre maison. annuaire.www-data
est un groupe système - ce n'est pas un groupe d'utilisateurs standard./home/USER/...
sur un serveur Web. Vous avez mal lu et mal compris le sens des mots que j'utilise./var/www/*
est un endroit relativement 'sûr' pour faire fonctionner des sites Web, car c'est un dossier / espace dédié. Cependant, ce/var/www/html
n’est PAS sûr, car cela est écrit par les serveurs Web lors de l’installation, etc., et conduit à une superposition de données importantes (utilisez/var/www/SUBDIRECTORY
donc plutôt des sous-répertoires de sites individuels)L’idée d’utiliser des liens symboliques pour résoudre un problème d’autorisation est imparfaite et ne peut pas fonctionner. Les autorisations affichées pour le lien symbolique lui-même sont généralement sans importance, elles ne peuvent pas être utilisées pour contourner les autorisations du répertoire "réel". Créer un lien symbolique de
/var/www/html/moodle
à/home/andre/www/moodle/
ne contourne pas les autorisations pour/home/andre/www/moodle/
. Quiconque veut faire des choses à l'intérieur ne/var/www/html/moodle
peut le faire que s'il dispose des autorisations nécessaires/home/andre/www/moodle/
.Votre exécution de
sudo chmod -R 775 moodle/
réellement fait avoir un effet, mais différemment de ce que vous pensiez qu'il n'a pas changé l'autorisation du lien symbolique, mais de la cible symlink/home/andre/www/moodle/
.L'erreur 403 que vous obtenez sur le serveur Web est probablement due au fait que votre serveur Web ne dispose pas des autorisations nécessaires pour entrer
/home/andre
. Ce n'est pas "un problème supplémentaire", mais dû au même problème d'autorisation.Ainsi, au lieu d'utiliser des liens symboliques, vous devez déterminer les autorisations vous permettant de modifier les fichiers et le serveur Web d'y accéder (ou même de les modifier, cela dépend de l'application). La nature exacte de ces autorisations dépend de votre cas d'utilisation (configuration de votre application et de votre serveur).
En général, je pense que c'est une bonne idée que vous possédiez les fichiers et disposiez des autorisations rw, le serveur Web ne dispose que d'un accès en lecture aux fichiers via les autorisations de groupe, et tous les autres utilisateurs n'ont aucun accès.
Un exemple d'autorisation (qui pourrait ne pas fonctionner pour votre cas d'utilisation en raison d'informations manquantes):
Vous pouvez constater que le répertoire a suffisamment d’accès pour que le propriétaire puisse l’entrer et en modifier le contenu, que le serveur Web (du groupe
www-data
) peut entrer et lire. Les fichiers eux-mêmes sont lisibles et inscriptibles pour vous (le propriétaire) et lisibles sur le serveur Web (dans le groupewww-data
). Tous les autres utilisateurs n'ont aucun accès.Encore une fois, prenez ceci comme exemple seulement. L’utilisateur / groupe exact de votre serveur Web dépend de votre configuration. Et votre application (moodle) peut nécessiter des autorisations différentes, vous devez consulter sa documentation.
la source
Excellente réponse de Thomas Ward https://askubuntu.com/a/767534/717860
Vous pouvez effectuer toutes les étapes recommandées en seulement 3 commandes au lieu de 8:
3 commandes:
faire le même travail que 8 commandes suivantes:
la source