Les visiteurs de mon site Web et des fichiers php sont-ils toujours dans la classe permission autre?

0

J'essaie de comprendre comment configurer les autorisations de fichiers sur mon serveur. J'ai lu le guide génial https://serverfault.com/questions/357108/what-permissions-should-my-website-files-folders-have-on-a-linux-webserver .

1. visiteurs de mon site web

Le guide indique

Les utilisateurs anonymes sont les visiteurs de votre site Web. Bien qu'ils ne disposent pas des autorisations nécessaires pour accéder directement aux fichiers, ils peuvent demander une page Web et le serveur Web agit en leur nom. Vous pouvez limiter l'accès des utilisateurs anonymes en faisant attention aux autorisations dont dispose le processus du serveur Web. Sur de nombreuses distributions Linux, Apache s'exécute en tant qu'utilisateur www-data, mais cela peut être différent. Utilisez ps aux | grep httpd ou ps aux | grep apache pour voir quel utilisateur Apache utilise sur votre système.

J'utilise XAMPP sur mon ordinateur portable. Si j'entre ps aux | grep httpdje reçois

adam      6635  0.0  0.0  21292   960 pts/1    S+   15:51   0:00 grep --color=auto apache

Donc, Apache s'exécute en tant que adam. De plus, j'ai un fichier appelé test2.phpavec l'autorisation suivante:

-r-------- 1 adam adam 24 Dez 31 15:20 test2.php

Donc, seul le propriétaire du fichier peut le lire. Mais comme Apache est le propriétaire, je pensais que si je demandais le fichier dans mon navigateur, je devrais pouvoir le lire.

Cependant, j'obtiens l'erreur suivante

Avertissement: Inconnu: échec de l'ouverture du flux: autorisation refusée dans Inconnu à la ligne 0.

Erreur fatale: Inconnu: Échec d'ouverture requise '/home/adam/www/site/test2.php' (include_path = '.: / Opt / lampp / lib / php') dans Unknown on line 0

Mais la citation ci-dessus ne suggère-t-elle pas que je devrais pouvoir y accéder à cause de

ils peuvent demander une page Web et le serveur Web agit en leur nom.

2. Fichiers PHP

Considérons un fichier php constitué de

<?php

 $string = fopen("stuff.txt","r");

le fichier php ne peut-il être ouvert stuff.txtque si etiff stuff.txtest lisible par la classe permission other? Ou serait-il également lisible si Apache est le propriétaire du fichier et a l'autorisation de lecture mais que la classe d'autorisation othern'a pas d'autorisation de lecture?

Adam
la source
Tout dépend de la configuration de votre système d'exploitation. Certaines distributions protègent les répertoires de base afin que les autres utilisateurs ne puissent pas y accéder. De plus, le chemin complet menant au nom de fichier doit avoir des executeautorisations pour le processus du serveur Web.
Tero Kilkanen
@TeroKilkanen donc, selon mon système d'exploitation, il est généralement possible que les visiteurs puissent accéder aux fichiers du navigateur sans autorisation de lecture pour la classe other? J'utilise XAMPP sur mon ordinateur portable sous OS Ubuntu 16.04 - Où puis-je trouver / modifier ces paramètres spécifiques du système d'exploitation?
Adam
1
Notez que la ligne qui vous fait penser qu'Apache s'exécute en tant qu'utilisateur "adam" montre simplement que le grepprocessus s'exécute en tant que "adam", il ne montre pas un processus Apache. Cela est dû au fait que ce grep se trouvera toujours dans la liste des processus.
Sven

Réponses:

0

PHP peut fonctionner dans un mode de fonctionnement différent, si PHP est compilé en tant que module d’Apache (ce qui est le cas de XAMPP), tout ce qu’Apache peut voir sera disponible pour PHP et, comme PHP est un langage interprète, il peut exécuter ce qu’il peut voir ( dans le cas où il contient <?php ... ?>quel que soit le type de fichier). Si vous voulez utiliser PHP en tant que service d'écoute autonome (en utilisant php-fpm), vous pouvez alors séparer Apache de PHP. Apache dans ce cas ne fera que transmettre le proxy à PHP. De cette façon, vous pouvez exécuter Apache et PHP sous différents comptes utilisateur.

N'oubliez pas que même si vous installez XAMPP sous root / administrateur, les autorisations privilégiées seront supprimées après la liaison du port d'écoute au compte d'utilisateur spécifié dans la configuration d'Apache.

Pour pouvoir exécuter un serveur Web sur le port 80 (port privilégié), Apache a besoin d'autorisations root / administrateur pour démarrer, mais une fois démarré, il sera exécuté en tant qu'utilisateur standard (de préférence restreint).

XAMPP / LAMPP n'est généralement pas utilisé en production car il possède par défaut des paramètres très permissifs et est principalement utilisé en phase de développement.

Si vous souhaitez un modèle de sécurité de production, séparez tous les rôles de chaque service et exécutez chaque service (Apache, PHP, MySQL) sous un compte différent, restreint (non administratif).

Un bon modèle de sécurité consiste à autoriser tout ce qui est exposé à Internet sauvage (accessible à Apache) en lecture seule, à l'exception des fichiers ou des répertoires qui doivent réellement être inscriptibles, mais dans ce cas, vous devez restreindre ces ressources dans Apache, accéder ou tourner le moteur PHP dans de tels répertoires en fonction du cas d'utilisation.

Retour à vos questions: Vous avez écrit que vous utilisiez XAMPP, ce qui signifie que vous l’exécutiez sous Windows. Faites un clic droit sur la barre des tâches et exécutez le gestionnaire de tâches pour repérer le nom du processus apache et le compte utilisateur en cours d'exécution pour déterminer les autorisations dont PHP disposerait.

Mais je suppose que vous utilisez LAMPP, pas XAMPP car votre répertoire Web ressemble à un environnement basé sur Unix "/home/adam/www/site/test2.php". C'est très différent des fenêtres. Selon le système d'exploitation que vous utilisez, le service Apache peut s'exécuter sous un nom différent au lieu de httpd. Il peut s'agir d'un apache2 (sur debian). Par conséquent, lorsque vous essayez de repérer un processus en cours, utilisez le nom correct grep. (Pour simplifier votre vie, installez- htople sur un système basé sur Unix pour repérer l'activité du processus)

Si j'ai raison de dire que vous utilisez LAMPP, vérifiez les autorisations des répertoires Web et ses sous-répertoires qui appartiennent au même utilisateur que l'utilisateur apache en cours d'exécution. Si vous avez besoin de la protection de base de fichiers de certains fichiers, retirez la propriété d'un utilisateur différent de l'utilisateur attribué au service Web.

Alex
la source
XAMPP est également disponible pour Linux.
Tero Kilkanen
Oui, mais si vous l'installez sous Linux, vous l'exécuterez en tant que sudo /opt/lampp/lampp start, c'est pourquoi j'ai référencé XAMPP sous Linux en tant que LAMPP
Alex