Hebergement multi-utilisateurs

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 ?
  • donner les droits suffisants a ces dossiers

Salut,

Pour info sur la commande unix adduser:
linux.about.com…

Il est notamment spécifié que l’ajout d’un utilisateur créera automatiquement un home directory avec bien entendu les droits qui vont bien :slight_smile:

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 ?


[www.manuelphp.com...](http://www.manuelphp.com/php/function.mkdir.php)

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.

Par contre, mon aide va s’arréter là car je n’ai pas l’expérience d’une config par bdd, désolé. J’irai pas d’un “RTFM” car je ne l’ai pas lu non plus :smiley: mais ta réponse doit se trouver là : www.pureftpd.org…[/url] et plus préciseraient [url=http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL]download.pureftpd.org…

Remarque, je vais bouquiner ce truc :smiley:

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.

Merci bien, j’y travaillerai dès demain matin.

NON !!! Virtual Users !!!

:wink:

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.

Intéressant, faudra que j’explore… :smiley:

Ah ouais virtual user mais host normal.

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.

C’est ce que je pense de plus logique non ?

Comment feriez-vous ?

LDAP…

:smiley:

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… :slight_smile:

et je crée donc les repertoire de manière manuelle avec les commandes mkdir de php donnée plus haut.

Je ne m’intérrèsse pas aux virtual users ?

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 :smiley: ) et surtout éviter d’implanter un fonctionnel où tu dois effectuer une action root à partir d’un serveur web… :smiley:

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();
?>

Edité le 24/03/2009 à 10:34

Bon c’est bon j’ai trouvé en faite il faut spécifier :

Par contre je n’ai pas la permission pour creer des dossiers dans /home, si vous savez comment faire ?

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 :wink:

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 :


sudo mkdir /home/FTPuser
sudo chown www-data:www-data /home/FTPuser
sudo chmod 760 /home/FTPuser (optionnel)

là ton script PHP marchera (création dans un répertoire où Apache a des droits). sauf que quels sont les groupes/user de pure-Ftpd ? :wink:

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) ?

Lol

Heu…

chown --help

:smiley:

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).

Okay merci donc is j’ai bien compris, avec ces 3 commandes, j’ai donner les droits et changer le propriétaires du dossier /home/FTPuser à apache ?

Nooon ! :smiley:

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 :wink: