|
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
Commentaires
Ajouter un commentaire |
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...
![]()
![]()
|
C'est ce que je cherche à faire, j'attends la suite avec impatience :)
01/07/2008