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 15/04/2008, à 15:31

StraToN

[PHP?] Ecrire dans un fichier de config /etc/...

Bonjour à tous !

J'ai la difficile tâche de réaliser une application web permettant de modifier la configuration réseau d'un ordinateur. L'objectif au final est de développer une sorte d'interface web pour la configuration d'un routeur, un peu le même genre de choses qu'on trouve dans une LiveBox, FreeBox ou routeur adsl standard. Evidemment, dans un premier temps c'est un PC qui se charge d'agir comme un routeur.

Grosso modo, je dois simplement avoir une page web permettant de faire la même chose que Système/Administration/Réseau smile.

Je me pose la question : puis-je réaliser ce projet en PHP, ou dois-je utiliser d'autres technologies, je pense notamment à Perl ?

Mon souci est la modification des fichiers de configuration dans /etc, dans mon cas /etc/network/interfaces et quelques autres. Ces fichiers sont protégés, et il est donc impossible de les modifier depuis une page web, car c'est utilisateur apache (www-data) qui execute les opérations, et cet utilisateur n'a aucun droit sur /etc.

Je pourrais changer les droits sur le dossier /etc, mais bonjour la sécurité smile. Je peux aussi placer www-data dans le groupe d'administrateurs, mais là encore, porte ouverte (quoique, l'interface n'est accessible que par authentification).

Je sais que Webmin permet de faire ce que je souhaite, mais même après avoir regardé le code, c'est assez obscur. Si quelqu'un a une petite idée, je l'en remercie énormément !

Hors ligne

#2 Le 15/04/2008, à 20:56

Soulearth

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Je peux pas te donner de réponse malheureusement. Mais regarde déjà deux point:
- comment sont gerer les droits sur les fichiers avec un webmin
- quel langage utilise webmin, je crois que c'est php mais qui c'est ...

Une idée quand même, contrairement a windows, linux est sans concession sur les droit de groupe ou de fichier ( et c'est t'en mieu), si tu trouve un moyen de modifier un fichier sur lequel t'a pas les droits c'est la faille du siècle, donc pour moi il va falloir que tu mette ton fichier interface dans le groupe www-data avec un droit d'ecriture. Apres sur ton site php tu peux toujours tout securisé avec du htaccess c'est quand meme assez serieux comme sécurité.

Dernière modification par Soulearth (Le 15/04/2008, à 20:57)

Hors ligne

#3 Le 16/04/2008, à 00:14

StraToN

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Bonsoir !

Merci beaucoup pour ta réponse !

Je suis d'accord avec toi. Il est heureux que personne de non autorisé ne puisse écrire dans /etc. Et il est clair que si je parviens à trouver une solution valable, la sécurité doit être préservée au maximum.

Je ne sais pas ce qu'en penseront les spécialistes de la sécurité, en ce qui concerne le fait d'autoriser www-data à écrire dans /etc, mais je pense personnellement que si l'application ne peut pas être utilisée n'importe comme, ni par n'importe qui, alors c'est acceptable.

En ce qui concerne Webmin, j'ai passé l'après-midi passée à essayer de comprendre son mécanisme de droits et d'écriture, mais en dépit de sources (pas assez) documentées, je n'ai pas trouvé comment il fonctionne. De ce que j'ai compris, il crée un fichier temporaire (*****~), mais je ne sais pas s'il le crée effectivement au même endroit que le fichier original, ni ce qu'il en fait ensuite. Je poursuivrai mes recherches ce matin.

En tout cas, Webmin est intégralement développé en scripts CGI et Perl.

Hors ligne

#4 Le 16/04/2008, à 00:24

#hehedotcom\'isback

Re : [PHP?] Ecrire dans un fichier de config /etc/...

bonsoir

Webmin est super efficace pour gérer un système Unix à distance via http...
En revanche, ne pas le laisser tourner en permanence; des failles à venir sont toujours possibles.. le lancer via ssh avant et le couper ensuite.

Tu peux tout configurer à partir de lui...vraiment génial de mon point de vue.
Et la prise en main n'est pas forcement rédhibitoire, mais c'est vrai que la plupart des sources d'infos sont dans la langue de Shakespear...

Dernière modification par #hehedotcom\'isback (Le 16/04/2008, à 00:24)


../

Hors ligne

#5 Le 16/04/2008, à 09:32

StraToN

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Bonjour,

@#hehedotcom\'isback : est-ce que tu me suggères de modifier Webmin afin qu'il corresponde à mes besoins ? Ou bien d'utiliser certains scripts fournis dans Webmin ? La licence est BSD je crois, pas de problème donc.

L'inconvénient est que je ne connais pas beaucoup le Perl. J'ai eu l'occasion de m'y frotter un peu et j'ai pu constater que ce n'est pas très compliqué : quand on connait un langage, on en connait plein.

Tu parlais de ssh... J'ai fait très récemment un programme en PHP qui récupère via un formulaire, un mot à supprimer dans un fichier ainsi que le nom de ce fichier, puis qui se connecte en ssh sur deux machines distantes afin d'y exécuter un script bash présent sur ces deux machines. A votre avis, dois-je creuser par là ?

Dernière modification par StraToN (Le 16/04/2008, à 09:33)

Hors ligne

#6 Le 16/04/2008, à 13:30

#hehedotcom\'isback

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Bonjour

J'ai rebondi sur webmin concernant la configuration de divers éléments d'un poste sous système Gnu-linux. Car en plus des services classiques, tu peux également gérer les interfaces réseau et les routes à suivre, éditer les règles d'iptables...

Ton projet doit ressembler à ce que fait Ipcop, essaye de voir sur quoi c'est basé.


../

Hors ligne

#7 Le 16/04/2008, à 14:18

mutah

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Pour exécuter des actions à haut risques depuis une appli web sans que celle-ci soit root, je vois cette solution :

- l'appli web dépose une demande d'action (crée un petit fichier dans un répertoire)

- une application tournant en root, bien sécurisée, vérifie minutieusement les demandes et les traite (scrute le répertoire, supprime le fichier une fois la demande traitée)

mes 2 centimes ...


Ce n'est pas le chemin qui est difficile, c'est le difficile qui est chemin.

Hors ligne

#8 Le 16/04/2008, à 20:08

StraToN

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Bonsoir,

@#hehedotcom\'isback : J'ai découvert IPCop cet après midi au cours de mes recherches. C'est effectivement ce à quoi devrait ressembler le projet, en gros un MiniLinux dont l'objectif est de gérer un routeur. Je discuterai de cette solution avec mon chef de stage lundi (car il s'agit d'un stage).

J'ai regardé rapidement ce qu'il a dans le ventre, et à première vue ça ressemble pas mal à Webmin : des scripts CGI / Perl.

@mutah : ton idée n'est pas mauvaise. Éventuellement elle pourrait solutionner le problème dans le cas où il n'y a pas moyen de faire autrement ; je vais essayer de voir comment fonctionnent en détails les solutions existantes.

Je pense qu'il est possible de ne pas utiliser ta méthode, puisque IPCop, Webmin etc, possèdent tous leurs propres scripts de modification des fichiers. La question est de savoir quel utilisateur les exécute : je pense qu'il s'agit de root. Dans ce cas, la solution pourrait être de calquer l'authentification de l'outil, sur l'authentification de Linux. C'est possible avec PAM.

Je viens de trouver quelque chose qui pourrait me sauver. A vérifier si par hasard Webmin ne ferait pas ainsi : SUID root. http://forum.swisslinux.org/viewtopic.php?id=559

Quelqu'un peut il m'expliquer ce qu'est SUID exactement et comment l'utiliser ?

Merci encore smile

Hors ligne

#9 Le 16/04/2008, à 20:26

#hehedotcom\'isback

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Un gars qui a oublié les moteurs de recherches a écrit :

Quelqu'un peut il m'expliquer ce qu'est SUID exactement et comment l'utiliser ?

- Les bases
- plus détaillé


../

Hors ligne

#10 Le 17/04/2008, à 09:55

StraToN

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Oups, effectivement j'ai oublié l'ami Google, désolé :$. Le fait est que je ne savais pas si ce sujet avait une application particulière dans un contexte de développement.

Merci en tout cas pour ces deux liens smile

Je pense que cette solution pourrait être valable. D'après ce que j'ai compris, SUID permet à un utilisateur simple d'executer un script comme s'il était exécuté avec les droits root.

Question : est-ce qu'un résultat peut etre obtenu si www-data execute un script CGI appartenant à root:root (en supposant que les droits sont du genre 755 rwxrwxr-x), c'est à dire sans utiliser le SUID ?

Merci encore de vos réponses !

Dernière modification par StraToN (Le 17/04/2008, à 10:01)

Hors ligne

#11 Le 17/04/2008, à 18:55

Soulearth

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Tu as bien compris, mais attention a utiliser avec précaution sur si il y a des acces en ecriture dessus car si quelqu'un écrit dedans, l'exécution sera faite en temps que root.

Hors ligne

#12 Le 18/04/2008, à 09:15

StraToN

Re : [PHP?] Ecrire dans un fichier de config /etc/...

Merci beaucoup pour ces conseils wink

Je pense que je n'ai plus de questions pour le moment. J'attaque le développement, je crois que je vais devoir utiliser du code Perl provenant de Webmin.

Hors ligne

#13 Le 19/04/2008, à 22:44

mutah

Re : [PHP?] Ecrire dans un fichier de config /etc/...

oui, passer par le bit SUID est une solution, mais qui ouvre la porte à une escalade de droit à mon sens très critique :  adieu la sécurité quand une exécution dérivant d'un serveur web se trouve parachuté avec les droits root.

d'où ma proposition qui sépare clairement les droits nécessaires avec certes une implémentation un poil plus contraignante, mais loin d'être infaisable simplement ! si, si wink


Ce n'est pas le chemin qui est difficile, c'est le difficile qui est chemin.

Hors ligne

#14 Le 21/04/2008, à 09:14

StraToN

Re : [PHP?] Ecrire dans un fichier de config /etc/...

@mutah : en fait je ne sais pas encore bien quels sont les risques en termes de sécurité. Le projet en question consiste à coder une interface web pour configurer un routeur : un peu le même genre que l'interface d'une FreeBox, LiveBox ou d'un routeur standard. Il intègrera un firewall totalement restrictif sur les entrées (sauf autorisations).

Je ne suis très au courant des risques de sécurité dans ce genre de cas précis, si quelqu'un pouvait m'en dire plus ?

Merci beaucoup !

Hors ligne