Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/01/2011, à 02:28

peyo56

Apache : Acces a la racine systeme par un script php..

Bonjour, en ce moment, j'ai un leger probleme avec apache :
1) quand un script fait "http://localhost/Mod/list.php?folder=/", celui ci accede directement a la racine de mon systeme, il peut tres bien apres aller dans mon home ou autre part ...
2) quand je souhaite faire un include absolu avec php, je doit inclure "/var/www/rep/file.php" au lieu d'inclure "/rep/file.php" a cause de la meme chose je pense

Donc y a t'il moyen premierement de bloquer l'acces a ce qui est exterieur a l'espace "serveur", puis deuxiemement, que le chemin soit "décalé" de maniere a ce qu'il se croit a la racine

PS: Sur un hébergeur mutualisé, je peut inclure "/www/rep/file.php", et je ne peut pas acceder à / par un script ce qui est mieux pour la sécurité."


Installation simple : Windows Vista 1h48 - Ubuntu Maverick 0h27
Instalation complete: Windows Vista ... - Ubuntu Maverick 2h
Comme quoi, Il y en a qui choisissent trop vite mais pas pour le plus rapide ...
Actuelement : Ubuntu 12.04 (Unity)

Hors ligne

#2 Le 24/01/2011, à 11:10

J5012

Re : Apache : Acces a la racine systeme par un script php..

as-tu lu patiemment http://doc.ubuntu-fr.org/apache2 ?
surtout la section traitant des vhosts ? http://doc.ubuntu-fr.org/tutoriel/virtu … ec_apache2

plus facile, installer webmin, une interface de config par le web ... mais c'est un gros morceau aussi...

Hors ligne

#3 Le 24/01/2011, à 11:49

alex.jdgworld

Re : Apache : Acces a la racine systeme par un script php..

Bonjour

dans ton code list.php

tu peux faire un controle sur ta variable GET 'folder'

en testant si il y a le chemin voulu ...
il faut aussi tester les ../../../ comme ceci

define (MA_DIR_AUTORISEE, '/var/www/mon_site/rep/');

if preg_match('!'.MA_DIR_AUTORISEE.'!',$folder)  &&  !preg_match('!../!',$folder)   tu affiches.

Alex

Dernière modification par alex.jdgworld (Le 24/01/2011, à 11:50)

Hors ligne

#4 Le 24/01/2011, à 12:17

chopinhauer

Re : Apache : Acces a la racine systeme par un script php..

peyo56 a écrit :

1) quand un script fait "http://localhost/Mod/list.php?folder=/", celui ci accede directement a la racine de mon systeme, il peut tres bien apres aller dans mon home ou autre part ...

Regarde open_basedir dans la configuration PHP.

peyo56 a écrit :

2) quand je souhaite faire un include absolu avec php, je doit inclure "/var/www/rep/file.php" au lieu d'inclure "/rep/file.php" a cause de la meme chose je pense

Il y a la directive de configuration doc_root, cependant ce genre de comportement est souvent obtenu en utilisant des chroot.

PS : D'habitude on utilise plutôt des chemins relatifs ou composés à partir de la variable __FILE__.

Dernière modification par chopinhauer (Le 24/01/2011, à 15:20)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#5 Le 24/01/2011, à 14:43

Ubutux

Re : Apache : Acces a la racine systeme par un script php..

Pourrais tu nous montrer ton virtualhost stp ?


Cordialement Ubutux,
========================
Mon petit blog friendly froggy, mon site de cours de droit et mon agence web

Hors ligne

#6 Le 24/01/2011, à 15:06

Bousky

Re : Apache : Acces a la racine systeme par un script php..

peyo56 a écrit :

2) quand je souhaite faire un include absolu avec php, je doit inclure "/var/www/rep/file.php" au lieu d'inclure "/rep/file.php"

C'est normal : « /rep/file.php » est un chemin absolu. Inclus tout simplement « rep/file.php » si le script dans lequel tu inclus est à la racine du site web, « file.php » s'il est dans rep/ : les chemins sont relatif à l'emplacement de ton script (tout du moins par défaut).

Dernière modification par Bousky (Le 24/01/2011, à 15:07)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#7 Le 24/01/2011, à 21:07

peyo56

Re : Apache : Acces a la racine systeme par un script php..

Merci chopinhauer, c'est déjà un début et c'est pas mal comme cela, Maintenant au moins les scripts php ne peuvent pas aller n'importe ou, juste la ou il faut.

Avant si je tapait http://localhost/../ par exemple, bien sur il me met la racine de mon site, mais les script eux-mêmes pouvait accéder a la racine du fait je pense qu'apache ne vérifie pas ce que php fait.

Pour donner la raison de tout ça, c'est que j'ai des pages qui doivent inclure certains fichier contenant des fonctions, c'est pourquoi il est plus pratique de faire des includes avec des chemins absolus, quelque soit le chemin courant, bien que le second point ne soit pas résolu, pour l'instant j'utilise ça, qui peut suffire dans mes scripts ( je l'utilisait déjà avant ):

define('ROOT',"/var/www/");
include_once(ROOT."Rep/File.php");

Voici le fichier du vhost de mon site

NameVirtualHost *:80
<VirtualHost *:80>
 ServerName www.cms.ds
 ServerAlias cms.ds *.cms.ds
 ServerAdmin admin@cms.ds
 DocumentRoot /var/www
 <Directory />
  Order Deny,Allow
  Deny from all
  Options None
  AllowOverride None
 </Directory>
 <Directory /var/www>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
 </Directory>
 ErrorLog /var/log/apache2/error.cms.ds.log
 CustomLog /var/log/apache2/access.cms.ds.log combined
</VirtualHost>

Dernière modification par peyo56 (Le 24/01/2011, à 21:10)


Installation simple : Windows Vista 1h48 - Ubuntu Maverick 0h27
Instalation complete: Windows Vista ... - Ubuntu Maverick 2h
Comme quoi, Il y en a qui choisissent trop vite mais pas pour le plus rapide ...
Actuelement : Ubuntu 12.04 (Unity)

Hors ligne

#8 Le 24/01/2011, à 21:25

chopinhauer

Re : Apache : Acces a la racine systeme par un script php..

peyo56 a écrit :

Avant si je tapait http://localhost/../ par exemple, bien sur il me met la racine de mon site, mais les script eux-mêmes pouvait accéder a la racine du fait je pense qu'apache ne vérifie pas ce que php fait.

Les scripts PHP se comportent exactement comme les autres applications sur le serveur. Apache se charge juste de les lancer et demande un résultat sur la sortie standard. Après, le différents modes d'utilisation de PHP dans Apache diffère sur la manière comme l'interpréteur PHP est lancé : une seule fois pour toutes avec les droits de l'utilisateur Apache (mod_php5, le défaut), à chaque fois qu'un script est appelé (mod_cgi) ou un mélange des deux (mod_fcgi, une fois toutes les n exécutions d'un script).

Tu peux sécuriser mieux les deux derniers modes, vu que les scripts pourront être exécutés avec un utilisateur différent pour chaque hôte virtuel (mod_suexec) et un système de fichiers réduit (mod_chroot). C'est des solution plus complexes, mais elles sont documentées sur plusieurs sites.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#9 Le 26/01/2011, à 11:51

mazarini

Re : Apache : Acces a la racine systeme par un script php..

Bonjour,

Le fait d'ajouter le chemin de la racine du site avant de faire l'accès au répertoire n'est pas une solution très sécurisée. L'utilisateur peut très bien ajouter des ../../ dans le chemin qu'il fournit pour passer outre.

Je me rappelle d'un hébergeur chez qui je pouvais parcourir et lire tous les fichiers et répertoires sauf les sites et en particulier pas le mien.


S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)

Hors ligne

#10 Le 26/01/2011, à 12:03

Bousky

Re : Apache : Acces a la racine systeme par un script php..

Au pire on peut toujours refuser tous les chemins contenant « .. ».


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#11 Le 26/01/2011, à 13:55

alex.jdgworld

Re : Apache : Acces a la racine systeme par un script php..

Bonjour je reposte ma reponse qui va dans ce sens en limitant sur une directorie precise ou un tableau de directorie autorisé

dans ton code list.php

tu peux faire un controle sur ta variable GET 'folder'

en testant si il y a le chemin voulu ...
il faut aussi tester les ../../../ comme ceci

define (MA_DIR_AUTORISEE, '/var/www/mon_site/rep/');

if preg_match('!'.MA_DIR_AUTORISEE.'!',$folder)  &&  !preg_match('!..!',$folder)   tu affiches.


Alex

Dernière modification par alex.jdgworld (Le 26/01/2011, à 14:12)

Hors ligne

#12 Le 28/01/2011, à 09:50

peyo56

Re : Apache : Acces a la racine systeme par un script php..

En fait, actuellement mes script ne peuvent pas aller plus haut que /var/www/
J'utilise aussi parallèlement pour tester un script de WebFTP, je remarque que celui-ci n'est pas sécurisé au niveau du parcours de dossier, du coup je me dit que cela serait bien mieux de sécuriser d'abord mon serveur que mes script, même si ceux-ci sont aussi a sécuriser.
Je ne souhaite avoir qu'un seul site, donc ça ne me dérange pas ( il y en a plusieurs mais ils ont tous des resources partagées)

J'ai décidé de chrooter la racine du serveur, donc j'ai fait:

sudo a2enmod mod_chroot

Mit dans apache2.conf

# Fichier du PID: endroit où, à son démarrage, apache doit stocker
# son numéro d'identification de processus
PidFile /var/run/apache2.pid
ChrootDir /var/www

mon vhost correspond maintenant a ca :

# NameVirtualHost définit les IPs à utiliser par apache,
# * signifie qu'on utilise n'importe quel IP pour acceder au serveur
# 127.0.0.1 (boucle locale), 192.168.x.x (ip reseau local), ou une IP externe.
# Cette directive est en dehors du Vhost, on pourrait donc la déplacer dans apache2.conf.
# Dans tous les cas si elle est définie à * , elle ne doit pas être reprise dans les autres vhosts.
NameVirtualHost *:80
 
# Le vhost proprement dit : il est compris dans un bloc <VirtualHost>,
# Ces blocs définissent la "portée" de la validité des directives qui y sont définies.
# Le * derrière VirtualHost définit ici que le vhost est valable pour toutes les IPs sur lesquelles apache écoute.
<VirtualHost *:80>
 # ServerName définie le nom utilisé pour le vhost. Mettez le nom de l'hote du domaine
 ServerName www.cms.ds
 # ServerAlias définie les autres sous domaines pour lesquels le serveur répondra.
 ServerAlias cms.ds *.cms.ds
 # ServerAdmin vous permet de spécifier un email à utiliser en cas de problème, sur une page d'erreur 404 par exemple.
 ServerAdmin admin@cms.ds
 # DocumentRoot définit le dossier racine dans lequel seront stockés les fichiers du site.
 DocumentRoot /
 # Directory définit les options par défaut du répertoire
 <Directory />
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
 </Directory>
 ErrorLog /var/log/apache2/error.cms.ds.log
 CustomLog /var/log/apache2/access.cms.ds.log combined
</VirtualHost>

Toutefois il me dit serveur introuvable dans un navigateur, apache lui ne me donne pas d'erreur au démarrage.
Qu'ai je oublié ?


Installation simple : Windows Vista 1h48 - Ubuntu Maverick 0h27
Instalation complete: Windows Vista ... - Ubuntu Maverick 2h
Comme quoi, Il y en a qui choisissent trop vite mais pas pour le plus rapide ...
Actuelement : Ubuntu 12.04 (Unity)

Hors ligne

#13 Le 28/01/2011, à 22:16

chopinhauer

Re : Apache : Acces a la racine systeme par un script php..

Il dit quoi exactement ? Firefox ne peut trouver le serveur à l'adresse … est une erreur DNS. En tout cas vaut mieux vérifier que Apache est bien lancé et à l'écoute :

sudo netstat -tlnp | grep apache

Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#14 Le 30/01/2011, à 21:45

peyo56

Re : Apache : Acces a la racine systeme par un script php..

Je savait a l'avance que apache fonctionait, mais je donne quand meme la reponse a la commande

tcp6       0      0 :::80                   :::*                    LISTEN      1492/apache2    

J'ai repris l'ancienne configuration temporairement, mais j'aimerait vraiment mettre mod_chroot en fonctionnement, j'utilise mon site des fois qu'en local et d'autres sur un réseau lan dans le lycée, des éléves de ma classe ( avec mon autorisation ) peuvent visiter et contribuer au "site", et je n'aimerait surtout pas que quelqu'un tombe sur un script que je n'ai même pas concu et vérifié, et l'utilise a mes dépents ...


Installation simple : Windows Vista 1h48 - Ubuntu Maverick 0h27
Instalation complete: Windows Vista ... - Ubuntu Maverick 2h
Comme quoi, Il y en a qui choisissent trop vite mais pas pour le plus rapide ...
Actuelement : Ubuntu 12.04 (Unity)

Hors ligne

#15 Le 30/01/2011, à 22:38

chopinhauer

Re : Apache : Acces a la racine systeme par un script php..

Votre configuration semble correcte, l'unique chose à vérifier est que le répertoire /var/www/var/run existe, ou en alternative le créer. Cr. notes sur mod_chroot et Apache 2.0.

Remarque : les élèves ne vont pas pouvoir exécuter des scripts en dehors de la racine du site, car Apache va l'empêcher. C'est juste les scripts qui vont pouvoir accéder à tous les fichiers.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#16 Le 01/02/2011, à 19:22

peyo56

Re : Apache : Acces a la racine systeme par un script php..

Oui c'est vrai, le dossier /var/www/var/run n'existait pas, par contre il me met l'erreur suivante :

# /etc/init.d/apache2 restart
 * Starting web server apache2
Warning: DocumentRoot [/cms.ds] does not exist
[Tue Feb 01 18:39:38 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
                                                                         [ OK ]

Pour ce qui est des éléves, quand je parle d'un script que je n'ai pas conçu, je parlait de cms ou de scripts de ce genre.

Petite question pour verifier que je comprend bien, apache, va se chrooter tout seul, donc il isolera en quelque sorte les demandes, mais chrootera t'il les programmes qu'il appele, ici php ? et donc php se croira t'il isolé ?

Dernière modification par peyo56 (Le 01/02/2011, à 19:40)


Installation simple : Windows Vista 1h48 - Ubuntu Maverick 0h27
Instalation complete: Windows Vista ... - Ubuntu Maverick 2h
Comme quoi, Il y en a qui choisissent trop vite mais pas pour le plus rapide ...
Actuelement : Ubuntu 12.04 (Unity)

Hors ligne

#17 Le 01/02/2011, à 19:41

chopinhauer

Re : Apache : Acces a la racine systeme par un script php..

Il y a probablement un Apache déjà lancé, lors que vous essayer d'en lancer un autre. Vu que le pidfile n'a pas été enregistré, faudra fermer les autres Apache à la main :

sudo killall apache2

Sinon vérifiés les adresses que vous utilisez pour les hôtes virtuels (tous à *:80 d'habitude) et l'existence de la racine de vos documents. Pour les hôtes virtuels vous pouvez vérifier leur configuration avec :

export APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data
apache2 -S

Cela va vous donner la liste des adresses utilisés par chaque hôte virtuel.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#18 Le 01/02/2011, à 20:29

peyo56

Re : Apache : Acces a la racine systeme par un script php..

Pour l'erreur du serveur ne pouvant pas initialiser son service, c'etait déja résolu, mais reste ce problème
Je met a jour, J'utilise actuelement ce fichier la pour mon vhost :

NameVirtualHost *:80
<VirtualHost *:80>
 ServerName www.cms.ds
 ServerAlias cms.ds *.cms.ds
 ServerAdmin admin@cms.ds
 <IfModule mod_chroot.c>
  DocumentRoot /cms.ds
 </IfModule>
 <IfModule !mod_chroot.c>
  DocumentRoot /var/www/cms.ds
 </IfModule>
 <IfModule mod_chroot.c>
  <Directory /cms.ds >
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
   Order allow,deny
   allow from all
  </Directory>
 </IfModule>
 <IfModule !mod_chroot.c>
  <Directory /var/www/cms.ds >
   Options Indexes FollowSymLinks MultiViews
   AllowOverride All
   Order allow,deny
   allow from all
  </Directory>
 </IfModule>
 ErrorLog /var/log/apache2/error.cms.ds.log
 CustomLog /var/log/apache2/access.cms.ds.log combined
</VirtualHost>

J'ai juste rajouté des IfModule pour pouvoir permuter rapidement entre mod_chroot activé et non activé.
Pour le apache2 -S : Avec mod_chroot :

Warning: DocumentRoot [/cms.ds] does not exist
Warning: DocumentRoot [/test.ds] does not exist
[Tue Feb 01 19:23:57 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
[Tue Feb 01 19:23:57 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
[Tue Feb 01 19:23:57 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server localhost (/etc/apache2/sites-enabled/000-default:11)
         port 80 namevhost localhost (/etc/apache2/sites-enabled/000-default:11)
         port 80 namevhost www.cms.ds (/etc/apache2/sites-enabled/cms:11)
         port 80 namevhost www.test.ds (/etc/apache2/sites-enabled/test:11)
Syntax OK

Sans mod_chroot :

[Tue Feb 01 19:25:05 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
[Tue Feb 01 19:25:05 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
[Tue Feb 01 19:25:05 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server localhost (/etc/apache2/sites-enabled/000-default:11)
         port 80 namevhost localhost (/etc/apache2/sites-enabled/000-default:11)
         port 80 namevhost www.cms.ds (/etc/apache2/sites-enabled/cms:11)
         port 80 namevhost www.test.ds (/etc/apache2/sites-enabled/test:11)
Syntax OK

On voit bien qu'il ressort l'erreur a chaque fois quand mod_chroot est en marche, en plus les trois me disent Not Found venant d'apache, au lieu d'une réponse de firefox ...

Edit : Je ne sait pas pourquoi, mais apache ne s'est même pas chrooté puisque j'ai essayé de remplacé dans mon vhost les /cms.ds par /var/www/cms.ds et ca fonctionnait ... comme si rien n'avait été fait. mod_chroot est pourtant bien installé.

Dernière modification par peyo56 (Le 01/02/2011, à 20:55)


Installation simple : Windows Vista 1h48 - Ubuntu Maverick 0h27
Instalation complete: Windows Vista ... - Ubuntu Maverick 2h
Comme quoi, Il y en a qui choisissent trop vite mais pas pour le plus rapide ...
Actuelement : Ubuntu 12.04 (Unity)

Hors ligne

#19 Le 02/02/2011, à 02:40

chopinhauer

Re : Apache : Acces a la racine systeme par un script php..

Les trois premiers avertissement viennent des directives NameVirtualHost *:80 que vous avez mis en plusieurs copies dans vos fichiers de configuration (j'imagine une fois devant la configuration de chaque hôte virtuel). Cela fait 4 avec la directive présente dans ports.conf. Enlevez les autres 3 (même si elle ne dérangent pas, vu que apache2 -S montre bien que les hôtes virtuels sont bien pris en compte).

Les sites ne sont pas chargés car pour une raison qui m'échappe Apache ne trouve pas la racine /cms.ds (qui avec le chroot devrait donner /var/www/cms.ds). Vous pouvez utiliser une approche alternative qui consiste à mettre /var/www/cms.ds comme racine dans les deux cas et créer un lien symbolique de /var/www/var/www vers .. :

sudo ln -s .. /var/www/var/www

Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne