Bonjour bonjour, voilà dans le cadre de mon projet je dois mettre en place un serveur interne d’hébergement multi-utilisateurs sous Linux.
J’ai donc pour cela installer les services principaux à savoir LAMP (Linux / Apache / MySQL / PHP / FTP), configurer le tout etc…
Je précise que je suis sous Ubuntu.
Donc j’ai fait une base de donnée contenant toutes les informations nécessaires à la création et la connexion des membres, j’ai créer les script de création/connexion de membre…enfin tout fonctionne pour l’instant !
Maintenant j’en suis à la parti coriace si je dois dire, c’est à dire que lorsque une personne va s’inscrire sur le site, un dossier personnel dans /home/~user sera fait celui-ci lui sera donc dédié et pourra être disponible via ftp.
Mon problème est que je ne sait pas par quoi commencer pour réaliser ce script.
Au niveau de l’algo, je pense qu’il faudrait faire :
récupérer les comptes utilisateurs valides de la base de donnée
créer un dossier personnel pour chaque utilisateur dans /home/ via php shell_exec ? ou en shell ?
Ah okay, c’est carrément ajouter des utilisateurs sur le système en lui même et non les confiner dans la BDD et leur attribué un dossier en complément.
Bon et bien merci de cette commande bien utile, mais est-ce que je dois faire le script dans une page php après la validation de l’inscription ou bien en bash…mais à ce moment là je ne sais pas interagir avec la BDD ?!
Hum après réflexion, ce n’est pas conseillé de créer un user unix pour chaque utilisateur de ton hébergement, j’ai mal réfléchi avec le dossier dans /home/~
Je vois un comportement comme suit:
Un user s’enregistre
Après vérification que le user n’existe pas dans la bdd, ajout du user dans la table.
Création d’un dossier personnel à nom unique dans un dossier autre que le /home (il ne faut pas mélanger les users de ton serveur et les users de ton appli)
Association du nom de ton dossier avec ton user dans une table dédiée à cela, elle te permettra de gérer les droits (tel user a accès à tel dossier)
Pour la technique, je ne maitrise pas le php, mais il existe surement une api qui permet de créer un dossier ?
Heu… Il y a une chose que je n’ai pas compris… Est ce que l’utilisateur inscrit doit avoir un compte complet sur la machine ou est-ce une inscription pour un accès à un serveur FTP ? Le premier cas ne me plaît pas du tout car cela signifie donner des droits administrateur à un outil qui peut être une passoire au niveau sécurité. Dans le second cas, il suffit juste de créer des utilisateurs virtuels sur ton outil FTP (c’est lequel ?). La différence fondamentale est que les droits des utilisateurs seront plus limités ainsi que le contrôle du paramétrage.
L’utilisateur doit avoir un dossier personnel et pouvoir s’y connecter avec un ftp, de façon à pouvoir y accèder à l’adresse @ip_server…
Pour le ftp j’ai pris pure-ftp apparement facile d’utilisation mais ça ne me gêne pas d’en changer, de toute façon je n’ai rien toucher à celui-ci à part l’installer.
Nickel, pure-ftpd est très bien et se prête bien aux configuration par scripts (PHP, Shell ou autre). Ben en fait tu va devoir un peu écumer la doc mais tu a le principe :
Ton application web permet à un utilisateur de s’inscrire. Cela signifie un ajout de son id et mot de passe en base.
Un utilisateur virtuel est créé avec les paramètres qui vont bien (espace sur disque, limites de transfert, etc, etc) en référent ledit utilisateur en base.
Okay donc je dois aiguiller mes recherches sur les virtualhosts by ftp, mais je dois quand même créer un utilisateur système ‘ftpusers’ et un groupe d’utilisateurs ‘ftpgroup’ en physique.
Sauf que j’ai l’impression que si tu passe par une authentification par base de données, toute la conf utilisateur est basée sur les tables. Donc tu doit créer pour pure-ftpd un fichier de configuration et lors là par contre, tu dois t’assurer de créer les répertoires par ton applicatif… Du coup, la création des utilisateurs ne se fait que par ajout en base.
Bin ouai l’authentification passe par la base de données, si l’utilisateur se connecte sur le site, je regarde dans la bdd sur celui-ci existe et est bien validé, alors là il a accès à son répertoire personnel.
Non, mais sans s’écarter du sujet, mon interrogation était plutôt en rapport avec ce que permet l’outil. J’ai donc bien l’impression que configuré pour une authentification DBB, pure-ftpd n’a besoin de rien d’autre. Donc tu n’a qu’à travailler ton formulaire d’inscription, vérifier coté back de quoi a besoin pure-ftpd et définir tes tables en fonction afin que tu paramètre tout ce qu’il y a besoin. A l’inscription de l’utilisateur, tu insère les bonnes données et crée le répertoire nécessaire. Normalement, c’est tout…
Ben comme je te l’ai dit, je ne maîtrise pas trop la partie sortie de la conf “classique”. Pure-ftpd permet la connexion des utilisateurs identifiés sur la machine (peu importe comment). Les utilisateurs virtuels servent en fait à ajouter des utilisateurs du service FTP sans avoir besoin de leur créer un compte sur la machine. Mais en fait, cela passe par un fichier d’identification propre à pure-ftpd. J’ai donc l’impression que l’identification par BDD permet de s’affranchir de la gestion par ligne de commande des VU. Je ne sais juste pas si tu dois créer le répertoire de l’utilisateur ou si pure-ftpd le fera…
A noter que j’ai lu que tu peux mixer authentification BDD et classique (pour les utilisateurs ayant un compte sur la machine).
Comme je te l’ai dit, c’était pour te mettre sur la voie (finalement j’en aurai appris autant ) et surtout éviter d’implanter un fonctionnel où tu dois effectuer une action root à partir d’un serveur web…
Bon voilà j’ai fait un semblant de script pour automatiser tout ça seulement ça bloque au niveau du mkdir pour la variable $pseudo…je ne sait pas comment faire :
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("maDB");
$cherche=mysql_query("SELECT * FROM MaTable Where COMPTE_ACTIVE='1' ");
while ($reponse=mysql_fetch_array($cherche))
{
echo $reponse['pseudo'];
$pseudo=$reponse['pseudo'];
echo(" | ");
$dir=mkdir("/home/FTPuser/$pseudo/public_html", 711);
if($dir!=false) {
echo "Creation repertoire personnel fait.";
}
else {
echo "Echec de la creation du repertoire.";
}
}
echo " : Utilisateurs valides.";
mysql_close();
?>
Bon, moi PHP, c’est pas ma tasse de thé, donc pour ça je passe la main.
Pour les droits d’accès, c’est un peu normal : /home est rwxr-xr-x root:root… Toi tu doit être www-data sous Ubuntu (ou Apache, peu importe, un utilisateur “web”). Là on sort du cadre programatique pour rentrer dans celui de l’admin système et de la gestion des droits. Alors
D’une je ne suis pas trop pour créer le répertoire FTP dans le /home car celui-ci est destiné à héberger les données des utilisateurs de la machine. Cette considération est personnelle
Pour gérer tes droits, tu va devoir associer à mon sens pure-ftpd et le serveur web au même utilisateur/groupe (au moins groupe). Tu dois ensuite choisir un répertoire où tu aura le droit d’écrire. Dans ton cas tu peux faire :
OKay bin j’avais pris le repertoire perso /home parce que j’avais configurer le module userDir d’Apache dans /home/*/public_html mais bon je peut le changer.
Tu peut m’expliquer le chown, même si dans la forme j’ai compris son but, je comprend pas la syntaxe (m’en suis jms servie) ?
Ca permet de modifier l’appartenance d’un fichier :
chown user:group fichier
autres possibilités :
chown user fichier
chown :group fichier
Mon exempel 1 modifie user et groupe, le 2 que le user, le 3 que le groupe. Je te laisse voir le --help pour les options (traitements récursifs dans les répertories, etc, etc).
Seule la première est nécessaire pour ça. Elle change en même temps propriétaire et groupe. Les deux autres te permettent soit de ne changer que le propriétaire, soit que le groupe