11

ubuntu serveur FTP+MySql

Bonjour,
dans cet article nous allons voir l’installation et la configuration d’un serveur FTP sous Ubuntu avec Pure-FTP + MySql pour la gestion de la base de compte.

Pour la gestion des utilisateurs, nous allons créer une base de donnée sous MySql avec un formulaire PHP pour simplifier l’administration de la base de compte.
Je pars du principe que vous avez un serveur lamp opérationnel.

L’accès au serveur ne se fera que dans la partition /var/www/, chaque nouveau user aura son répertoire perso automatiquement créé dont il ne pourra pas sortir.

Allez c’est partie!

Installtion de Pure-ftpd-mysql:

$sudo apt-get install pure-ftpd-mysql
[sudo] password for fred: 
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés : 
  openbsd-inetd pure-ftpd-common
Paquets recommandés :
  pure-ftpd
Les NOUVEAUX paquets suivants seront installés :
  openbsd-inetd pure-ftpd-common pure-ftpd-mysql
0 mis à jour, 3 nouvellement installés, 0 à enlever et 59 non mis à jour.
Il est nécessaire de prendre 389ko dans les archives.
Après cette opération, 1 176ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?O

on répond O pour oui

Réception de : 1 http://fr.archive.ubuntu.com/ubuntu/ lucid/universe pure-ftpd-common 1.0.24-1 [178kB]
Réception de : 2 http://fr.archive.ubuntu.com/ubuntu/ lucid/main openbsd-inetd 0.20080125-4ubuntu2 [37,0kB]
Réception de : 3 http://fr.archive.ubuntu.com/ubuntu/ lucid/universe pure-ftpd-mysql 1.0.24-1 [174kB]
389ko réceptionnés en 3s (120ko/s)
Préconfiguration des paquets...
Sélection du paquet pure-ftpd-common précédemment désélectionné.
(Lecture de la base de données... 55028 fichiers et répertoires déjà installés.)
Dépaquetage de pure-ftpd-common (à partir de .../pure-ftpd-common_1.0.24-1_all.deb) ...
Sélection du paquet openbsd-inetd précédemment désélectionné.
Dépaquetage de openbsd-inetd (à partir de .../openbsd-inetd_0.20080125-4ubuntu2_i386.deb) ...
Sélection du paquet pure-ftpd-mysql précédemment désélectionné.
Dépaquetage de pure-ftpd-mysql (à partir de .../pure-ftpd-mysql_1.0.24-1_i386.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Traitement des actions différées (« triggers ») pour « ureadahead »...
Paramétrage de pure-ftpd-common (1.0.24-1) ...

Paramétrage de openbsd-inetd (0.20080125-4ubuntu2) ...
 * Stopping internet superserver inetd                                                                                                                                                                                                 [ OK ] 
 * Not starting internet superserver: no services enabled

Paramétrage de pure-ftpd-mysql (1.0.24-1) ...
Starting ftp server: Running: /usr/sbin/pure-ftpd-mysql -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -8 UTF-8 -E -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -B

notre serveur est installé, il nous reste à le configurer.

Nous allons commencer à créer notre base de donnée avec un utilisateur:
On se connect à notre base de donnée

$ mysql -u root -pMOTDEPASSE
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

on créé notre utilisateur qui gère la base

mysql>CREATE USER 'pureftpd' identified by 'pwd-ftp';
Query OK, 0 rows affected (0.00 sec)
mysql>

on créé notre base

mysql>CREATE DATABASE pureftpd;
Query OK, 1 row affected (0.00 sec)
mysql>

On associe le compte utilisateur pureftpd avec la base purftpd en lui attribuant les droits select, insert, update, delete

mysql> GRANT SELECT , INSERT , UPDATE , DELETE ON `pureftpd` . * TO 'pureftpd'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql>

on utilise notre base purftpd et on créé la table users

mysql> use pureftpd
Database changed
mysql> CREATE TABLE `users` (
    ->  `Id` int(11) NOT NULL auto_increment,
    ->  `User` varchar(32) NOT NULL default '',
    ->  `Password` varchar(64) NOT NULL default '',
    ->  `Uid` int(3) NOT NULL default '33',
    ->  `Gid` int(3) NOT NULL default '33',
    ->  `Dir` varchar(255) NOT NULL default '/var/www/',
    ->  `QuotaTaille` int(4) NOT NULL default '250',
    ->  `ULBandwidth` int(2) NOT NULL default '10',
    ->  `DLBandwidth` int(2) NOT NULL default '10',
    ->  PRIMARY KEY  (`ID`),
    ->  UNIQUE KEY `User` (`User`)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> 

Nous allons maintenant configurer le service PureFtpd

On commence par interdire les connexions anonyme et on vérifie la présence de yes dans /etc/pure-ftpd/conf/NoAnonymous

$sudo cat /etc/pure-ftpd/conf/NoAnonymous
yes

ensuite, vérifié le chemin de notre fichier de configuration relatif à notre base de donnée dans le fichier MySQLConfigFile

$sudo cat /etc/pure-ftpd/conf/MySQLConfigFile
/etc/pure-ftpd/db/mysql.conf

on créé un fichier CreateHomeDir, pour la création automatique du répertoire

$sudo nano /etc/pure-ftpd/conf/CreateHomeDir

dans ce fichier on y inscrit yes.

On va chrooter le répertoire du compte ftp

$sudo nano /etc/pure-ftpd/ChrootEveryone

dans ce fichier on y inscrit yes

On créer un utilisateur dans notre base:

mysql>INSERT INTO `pureftpd`.`users` (`Id`, `User`, `Password`, `Uid`, `Gid`, `Dir`, `QuotaTaille`, `ULBandePassante`, `DLBandePassante`) VALUES (NULL, 'fred', 'fred-fred', '33', '33', '/var/www', '250', '10', '10');

et nous allons renseigner le fichier /etc/pure-ftpd/db/mysql.conf

$sudo nano  /etc/pure-ftpd/db/mysql.conf
#Parametres de connexion a la base de donnee
MYSQLServer 127.0.0.1
MYSQLUser pureftpd
MYSQLPassword pwd-ftp
MYSQLDatabase pureftpd

#Parametres supplementaires
MYSQLPort 3306
MYSQLSocket /var/lib/mysql/mysql.sock

# Methode de cryptage du mot de passe
# Parametres possible : 'crypt', 'md5' ou 'cleartext' pour afficher le mot de passe en clair.
MYSQLCrypt cleartext

# Requetes SQL permettant a Pure-FTPd de trouver les donnees dans la base
MYSQLGetPW SELECT Password FROM users WHERE User="\L"
MYSQLGetUID SELECT Uid FROM users WHERE User="\L"
MYSQLGetGID SELECT Gid FROM users WHERE User="\L"
MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"
MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L"
MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L"
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"

# Optional : default UID - if set this overrides MYSQLGetUID
MYSQLDefaultUID 1000

# Optional : default GID - if set this overrides MYSQLGetGID
MYSQLDefaultGID 1000

Pour les 2 derniers paramêtres: default UID et default GID, cela correspond au numéro d’ID de départ pour les comptes ftp.
Pour vérifier l’ID d’un compte:

id fred

et on restart notre serveur ftp:

$sudo /etc/init.d/pure-ftpd-mysql restart

et on test la connexion à partir d’un autre serveur linux(imaginons que l’adresse IP du serveur ftp est 10.10.10.10)

filobedo@lxde$ftp 10.10.10.10
Connected to 10.10.10.10
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 13:44. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (10.10.10.10:filobedo): fred
331 User fred OK. Password required
Password:
230-User fred has group access to:  www-data  
230 OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

connexion réussite! :-)

si problème, indiquez moi le message d’erreur…

Alors notre formulaire php, qui se compose de 3 fichiers(je ne me suis pas occupé de la mise en forme, donc c’est très moche)

le premier fichier PHP va se nommé user.php, c’est grâce à ce fichier qu’on va pouvoir ajouter des users

<p>
Veuillez indiquer le nom et le mot de passe:
</p>
<form method="post" action="admin.php" >
<p>
    <input type="text"  name="nom" />
    <input type="password" name="password" />
    <input type="submit" value="valider" />
</p>
</form>

donc c’est tout bête, on renseigne le nom et le mot de passe du nouvel utilisateur
mainteant le fichier admin.php c’est celui qui va agir avec la base de donnée

<?php
//on se connect avec notre base de donnée
mysql_connect("localhost", "root", "toor")or die("impossible de se connecter");
//on sélectionne notre base de donnée
mysql_select_db("pureftpd")or die("impossible de selectionner pureftpd");
//on insert notre nouvel utilisateur
$sql = "INSERT INTO `pureftpd`.`users` (`Id`, `User`, `Password`,`Dir`) VALUES (NULL, '" . $_POST['nom'] . "', '" . $_POST['password'] . "','/var/www/" . $_POST['nom'] . "');";
mysql_query($sql);
//on indique que c'est fait
echo "utilisateur ajoute";
//on ferme notre base de donnée
mysql_close($connection);
?>

et notre fichier index.php(histoire d’avoir un index.php)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajout Utilisateur</title>
</head>
<body>
<?php
include ("user.php");
?>
</body>
</html>

Voilà c’est moche mais fonctionnel, libre à vous de le modifier pour lui ajouter des conditions ou autres…

Partager l'article :





fred

"Dire que l'on s'en fiche du droit à la vie privée sous prétexte qu'on a rien à cacher, c'est comme déclarer que l'on se fiche du droit à la liberté d'expression sous prétexte qu'on a rien à dire." Edward Snowden

11 commentaires

  1. Bonjour, j’ai suivi le tuto et tous c’est bien passé jusqu’au test de connexion, j’ai une erreur :

    Statut : Connexion à xx.xx.xx.xx:21…
    Statut : Connexion établie, attente du message d’accueil…
    Réponse : 220———- Welcome to Pure-FTPd [privsep] [TLS] ———-
    Réponse : 220-You are user number 1 of 50 allowed.
    Réponse : 220-Local time is now 16:47. Server port: 21.
    Réponse : 220-This is a private system – No anonymous login
    Réponse : 220-IPv6 connections are also welcome on this server.
    Réponse : 220 You will be disconnected after 15 minutes of inactivity.
    Commande : USER fred
    Réponse : 331 User fred OK. Password required
    Commande : PASS ********
    Réponse : 530 Login authentication failed
    Erreur : Erreur critique
    Erreur : Impossible d’établir une connexion au serveur

    si vous avez une idée d’ou cela peux venir, merci d’avance

  2. Bonjour Jonathan,

    comme ça à froid je dirais un problème de login/mdp.
    As-tu fais le test en local avec la commande:
    [code lang= »shell »]
    ftp localhost
    [/code]
    Regardes les logs voir s’ils sont plus parlant.

  3. Bonjour,

    dommage j’ai le même problème .
    sinon sympa le tuto mise à part cette erreur .

    Merci d’avance.

  4. Salut snooppy!

    je me suis replongé dans le tuto et effectivement à ce jour il faut ajouter dans le fichier de conf /etc/pure-ftpd/db/mysql.conf le default UID et le default GID.

    J’ai complété le tuto avec vérification dans une VM :-)

  5. Bonjour,
    Je n’ai pas trouvé le bon tuto pour utiliser grub-customizer car je voudrais éffacer les OSs listés a l’ouverture de ma machine …..
    J’ai plusieurs HDDs externes dans lesquels sont installés d’autres OSs
    qui , je ne sais pour quelles raisons, sont affichés également dans le HDD principal de ma tour a l’ouverture de la machine…. Je sais qu’il existe une manip a faire a partir de Grub-customizer pour que ne soit visible au start que les OSs installés sur ce HDD interne soit Ubuntu 12.04.3 en dual-boot séparé avec W$7
    comme je ne connais pas tres bien G.C. et que j’ai peur de faire une erreur , merci de me guider vers la soluce ou un lien de tuto de G.C. au plaisir 8-)

  6. Salut jibel,

    j’ai écris un petit article sur comment personnaliser le Grub avec Gub-Customizer, en espérent que celà répond à tes besoins.

  7. Bonjour,
    Merci pour ce tuto. Tout est OK mais un petit problème (de taille):
    Connexion avec filezilla, affichage du rép: /var/www et là, possibilité de remonter à la racine ou dans n’importe quel autre rép !

    Merci de votre réponse.

  8. Bonjour Bernard,
    à ce jour je suis passé à proftpd, mais demain je me replonge dans pure-ftpd-mysql, cela a pu évoluer depuis le rédaction de l’article….

  9. Bonjour,

    Cela fait trois fois que je tombe sur ce tutoriel sur la toile… sur trois sites différents… et trois fois, on peut lire :

    1. ULBandePassante et DLBandePassante dans la structure de la base

    mais

    2. ULBandwidth et DLBandwidth dans les requêtes du fichier de configuration.

    Deux gros malaises avec Internet :
    – la moindre erreur est copiée, recopiée et re-recopiée…
    – trop nombreux sont ceux qui s’attribuent des tutoriels, en fait recopiés, sans citer leurs sources.

  10. Bonjour Flo,

    outch pour l’erreur ! merci pour la correction de la coquille, cependant, tous les tutos je l’ai ai testés… Je ne comprends pas pourquoi une telle erreur est restée ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *