Ecrire config d'Apache avec PHP

Petit nouveau ! | 2 Messages

27 juin 2009, 14:47

Bonjour à tout le monde !

Je voudrais avoir des informations sur comment configurer mon serveur concernant la configuration des services apache/bind depuis une espace web écrit en PHP.

Je travaille sous Debian Lenny avec Apache 2 Bind9 etc....

Des pages PHP permettent de modifier/créer la config d'Apache et je voudrais ne pas créer un trou de sécurité sur mes répertoires...

- Quel est selon vous la démarche à utiliser pour pouvoir écrire dans les confs des servies WWW/DNS ?
- Utiliser un utilisateur spécifique avec une appartenance au groupe Apache/Bind ?
- Chmod Chown sur le répertoire PHP ou sont stocké les pages de config des services ??

Merci par avance de vos réponses.

ViPHP
ViPHP | 5924 Messages

27 juin 2009, 16:49

Je vois plusieurs possibilités solides :
- Utiliser un vhost pour la configuration et exécuter ce vhost sous un utilisateur avec des droits d'accès à la configuration.
- Exécuter un second serveur sur un port différent avec des droits d'accès adéquats et rediriger les requêtes vers lui.
- Exécuter les scripts en CGI, donc avec leur propre utilisateur.
- Modifier la configuration avec un programme qui a le bit setuid à 1, de manière à ce qu'il puisse revendiquer des droits d'accès suffisants.

Petit nouveau ! | 2 Messages

28 juin 2009, 12:01

Salut :)

Pour le moment j'ai un vhost sur un port différent que le 80 spécialement pour ces fichiers là.

Ensuite comment fait tu la dernière solution :
Modifier la configuration avec un programme qui a le bit setuid à 1, de manière à ce qu'il puisse revendiquer des droits d'accès suffisants.
Si tu as des docs ou HowTo je suis prenneur.

Merci.

ViPHP
ViPHP | 5924 Messages

28 juin 2009, 12:59

Si tu as des docs ou HowTo je suis prenneur.
Euh, non… J'utilise le man personnellement.
Juste c'est ce que j'ai fait il y a quelques années pour faire le même genre de choses.

En fait il faut coder le programme dans un langage compilé déjà puisque par défaut sous linux, sinon il refuse de lui donner les droits.
Dans le programme tu fais un appel à setreuid pour obtenir les droits (confère le man), et enfin tu règles les droits du programme une fois compilé :
- L'owner doit être l'utilisateur possédant des droits de modification de la configuration.
- L'utilisateur de apache doit avoir les droits d'execution sur le programme.
- Tu fixes le bit setuid à 1 (confère man aussi).

En fait ce mécanisme permet au programme de revendiquer les privilèges du owner du binaire. Donc en fixant le owner à une valeur bien choisie, tu peux modifier la configuration même si celui qui exécute le programme n'en a pas le droit.

Tu peux chercher setuid sur google, je pense que cela t'en dira plus.