blog actif depuis 639 jours.

retours d'expériences, codes sources, réflexions, humeurs... d'un webmaster

 

Fri

20

Jun

 
J'ai eu besoin récemment de développer une petite interface PHP pour gérer des comptes FTP. Plusieurs méthodes sont possibles, mais entre les problèmes de sécurité et les différentes contraintes techniques rencontrées, j'ai finalement opté pour une solution qui me semble la plus sécurisée possible.

Cahier des charges

L'application doit permettre de gérer des comptes FTP non anonymes. Les comptes se connectent via un client FTP sur le même répertoire. Il faut également pouvoir désactiver un compte.
Le fonctionnement de l'interface serait la suivante
1 affichage de la liste des comptes avec des liens « modifier », « supprimer », «  désactiver »
2 gestion des comptes par un formulaire dans lequel on saisit les infos du propriétaire du compte :
- Nom de l'utilisateur
- login FTP (pas modifiable)
- date d'expiration du compte (pour désactiver un compte)
- option re-générer le mot de passe (seulement en modification de compte, le mot de passe FTP est créé automatiquement).

Environnement

Tout d'abord, il faut bien connaître l'environnement sur lequel on travail. : serveur LAMP avec proFTP.
L'accès FTP non anonyme nécessite de créer des utilisateurs Linux. Ensuite il faut configurer proFTP de telle manière que les connexions arrivent dans le même dossier.
Sous linux, les différents programmes s'exécutent sous un utilisateur donné. Tous les utilisateurs ne peuvent pas utiliser toutes les fonctions. Les fonctions d'administration par exemple (dont les fonctions de gestion des utilisateurs) sont réservées à l'utilisateur root par défaut.

Solution

La première solution qui vient naturellement  à l'esprit est de tout gérer en PHP, en exécutant directement les commandes linux par les fonctions exec() ou passthru(). Le problème est que apache s'exécute avec l'utilisateur « apache » (ou « anonyme », ou ce que vous avez placé dans le httpd.conf) et n'a donc pas accès aux fonctions d'administration.
On pourrait modifier l'utilisateur apache pour qu'il s'exécute sous « root », ce qui veut dire que apache aurait le contrôle total sur le serveur. C'est ce qu'on appelle une faille de sécurité (que dis-je… un trou, un gouffre…) et la durée de vie de votre serveur s'en trouve réduite à quelques minutes.
Autre solution : autoriser l'utilisateur apache à exécuter quelques fonctions d'administration. (on configure le fichier linux sudoers et on exécute la commande sudo)  Ca ne change rien puisque les fonctions qui nous intéressent sont l'administration des utilisateurs. Donc avec apache, on pourrait créer des utilisateurs root… on revient au point de départ.

Bref, la solution gestion des utilisateurs par PHP n'est pas envisageable pour des problèmes évidents de sécurité. De plus je suis partisan pour dire chacun fait ce qu'il a à faire : PHP s'occupe de l'interface et Linux gère ses utilisateurs.

Donc la solution que j'ai adoptée est de créer les comptes à partir d'un script shell lancé par le cron.
L'interface PHP enregistre  les infos sur les utilisateurs  dans une base MySQL, produit un fichier XML contenant les infos relatives au compte à créer ou à modifier.
Le script shell va vérifier la présence du fichier et, s'il existe, créer l'utilisateur, tester la réussite de l'opération, et supprimer le fichier XML si tout est ok.
Le cron exécute le script à la fréquence de votre choix (pour ma part, toutes les minutes).



Suite : Gestion d'utilisateur LINUX via une interface web en PHP - partie 2

Bookmark and Share

 

Commentaires

C'est ce que je cherche à faire, j'attends la suite avec impatience :)

01/07/2008

 

Ajouter un commentaire

nom / pseudo :
e-mail :

(Votre e-mail ne sera ni exploité, ni divulgué.)

site (facultatif)
 

Webmaster depuis maintenant presque 10 ans, j'ai créé ce blog pour publier mes retours d'expérience et parler du Web et du développement Web en général, mais aussi de plein d'autres choses...

<Mars 2010 
LunMarMerJeuVenSamDim
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31     

 

 

 

Referencement annuaire gratuit Annuaire carte postale blog,,personnel communiquer gratuit Paperblog : Les meilleurs actualités issues des blogs Classement de sites - Inscrivez le vôtre! Inscrivez-vous maintenant sur Viadeo Web Developement Blogs - BlogCatalog Blog Directory web counter