J'essaie de pas accorder l'autorisation 777 dans mon dossier /var/www/html
, mais je souhaite modifier mes fichiers sans Sudo
. J'ai donc créé un lien symbolique vers un dossier de mon répertoire personnel dans /var/www/html
. Je l'ai créé à l'aide de Sudo ln -sT /home/andre/www/moodle/ moodle
et la sortie de ls -la
est la suivante:
andre@andre-270E5G:/var/www/html$ ls -la
total 8
drwxr-xr-x 2 root root 4096 Mai 4 10:20 .
drwxr-xr-x 4 root root 4096 Abr 29 14:29 ..
lrwxrwxrwx 1 root root 23 Mai 4 10:20 moodle -> /home/andre/www/moodle/
Donc, mon dossier moodle a des autorisations de lecture, d’écriture et d’exécution pour tout le monde, et ce n’est pas ce que je veux. J'ai utilisé la commande Sudo chmod -R 775 moodle/
pour essayer de la modifier, mais les autorisations de lecture, d'écriture et d'exécution sont restées inchangées. J'ai essayé la même chose avec le dossier moodle dans /home/andre/www/moodle
, mais il est resté le même. Le résultat de ls -la
dans /home/andre/www/
est:
andre@andre-270E5G:~/www$ ls -la
total 28
drwxrwxr-x 3 andre andre 4096 Mai 4 10:02 .
drwx------ 49 andre andre 20480 Mai 4 10:01 ..
drwxrwxr-x 41 andre andre 4096 Mai 4 10:02 moodle
Ainsi, le dossier moodle
dans /home/andre/www/
a les autorisations que je veux.
En tant que problème supplémentaire, lorsque j’accède à localhost/moodle
, j’obtiens une erreur 403 Forbidden.
Qu'est-ce que je fais mal ici?
Vous ne devriez jamais avoir à exécuter un site Web à partir de votre répertoire personnel . EVER. 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 de voir ce qui existe dans votre répertoire d'utilisateur), ainsi que tous les autres sous-dossiers qu'il contient. Un serveur Web mal configuré ou mal configuré ou non corrigé peut entraîner de cette façon une fuite massive de données, ou une perte d'informations d'identification risquant 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 si vous tentiez de donner à Apache le droit de lire /home/andre/www/moodle
- le serveur Web doit pouvoir parcourir votre répertoire personnel pour atteindre l’emplacement indiqué par le lien symbolique dans /var/www/html
, 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 dans /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 sur /var/www/html
pour votre site.
Ceci est en vigueur, en quatre étapes, après que vous ayez copié vos données dans /var/www/html
:
www-data
.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 {} +
Ceci définit récursivement le 'groupe' sur 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, utilisez Sudo chmod g+w /var/www/html/PATH
(où PATH
est le chemin du fichier ou du dossier dans la structure de répertoire où vous devez appliquer les autorisations d'écriture pour le serveur Web).
NOTICE: 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 avec les éléments suivants: Sudo chmod o-rwx /var/www/html/FILEPATH
(en remplaçant FILEPATH
par le chemin relatif au dossier /var/www/html
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 pour pouvoir continuer à accéder aux fichiers et aux dossiers créés. ou copié dans et ne pas obtenir le groupe www-data
défini correctement.
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 {} +
Remplacez USER
dans la première commande par 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ément +x
dans 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.
www-data
en tant qu'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
comme groupe, permettant ainsi l'accès au serveur Web.
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: Il ne sera pas nécessaire de réexécuter cette opération ultérieurement, ni de modifier les autorisations pour la catégorie "autre" d'autorisations ici. Si les 'autres' utilisateurs ne peuvent pas accéder à /var/www/html/
(ils ne disposent pas du bit +x
nécessaire sur /var/www/html
pour parcourir la structure de fichiers et la structure du répertoire, ni du bit +r
pour lire les listes de fichiers), les autorisations sur les éléments situés au-dessous de celle-ci répertoire pour les autres utilisateurs ou groupes ne va pas vraiment avoir beaucoup 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 avec www-data
, mais vous donne les droits de propriétaire 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 d’avoir un répertoire et tous les fichiers appartenant à www-data:www-data
ou root:www-data
mais vous en donnez également l’accès. Il utilise des listes de contrôle d'accès , qui permettent à plusieurs utilisateurs de disposer d'autorisations sans configurer de groupes individuels. Cela permet également aux utilisateurs du système root
ou www-data
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 devons procéder comme suit:
www-data
.Sudo chown -R www-data: www-data/var/www/html
www-data
et root
bien sûr) aucun accès aux fichiers.Recherchez Sudo/var/www/html -type f -exec setfacl -m u: YOURUSERNAME: rw -m autre :: --- {} \;
www-data
et root
) et définissez cette liste comme ACL "par défaut" pour les nouveaux fichiers des répertoires.Sudo trouver/var/www/html -type d -exec setfacl -d -m u: VOTRENOM: rwx -m o :: --- {} \;
setgid
pour tous les répertoires afin que, si vous créez un fichier, le serveur Web puisse toujours y accéder sous le nom www-data
via des 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 pas besoin de retirer l'accès à www-data
, ce qui aide le serveur Web à créer encore fichiers partout où il le faut (telles que les interfaces basées sur PHP ayant leurs propres répertoires de cache et qui doivent être créées et écrites pour fonctionner correctement).
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. Il s’agit d’un simple Sudo chown www-data:www-data filename
et les listes de contrôle d’accès doivent toujours vous laisser disposer 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 .
L’idée même 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". La création d'un lien symbolique de /var/www/html/moodle
à /home/andre/www/moodle/
ne contourne pas les autorisations pour /home/andre/www/moodle/
. Quiconque souhaite utiliser des éléments de /var/www/html/moodle
ne peut le faire que s’il dispose des autorisations nécessaires pour /home/andre/www/moodle/
.
Votre exécution de Sudo chmod -R 775 moodle/
en fait did a un effet, mais différemment de ce que vous pensiez ne pas changer les permissions du lien symbolique, mais du lien symbolique cible /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):
andre@fermat:/var/www/html$ ls -al moodle/
total 0
drwxr-x--- 2 andre www-data 60 mai 4 16:20 .
drwxr-xr-x 3 root root 80 mai 4 16:20 ..
-rw-r----- 1 andre www-data 0 mai 4 16:20 index.html
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 (dans le 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 groupe www-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.
Excellente réponse de Thomas Ward https://askubuntu.com/a/767534/71786
Vous pouvez effectuer toutes les étapes recommandées en seulement 3 commandes au lieu de 8:
3 commandes:
Sudo chown -R ubuntu:www-data /var/www
Sudo find /var/www -type d -exec chmod 2750 {} \+
Sudo find /var/www -type f -exec chmod 640 {} \+
fait le même travail que les 8 commandes suivantes:
Sudo chgrp -R www-data /var/www
Sudo find /var/www -type d -exec chmod g+rx {} +
Sudo find /var/www -type f -exec chmod g+r {} +
Sudo chown -R ubuntu /var/www/
Sudo find /var/www -type d -exec chmod u+rwx {} +
Sudo find /var/www -type f -exec chmod u+rw {} +
Sudo find /var/www -type d -exec chmod g+s {} +
Sudo chmod -R o-rwx /var/www/