Créer un serveur web complet sous debian - #3 pureFTPd

Statut
N'est pas ouverte pour d'autres réponses.

Xavier Mustin

Administrator
Staff member
#1
Tutorial: Créer un serveur web complet sous debian - #3 pureFTPd

Voici un nouveau tutorial qui vous sera sans doute utile si vousvenez d'installer la distribution linux Debian (Ou Ubuntu) sur votreserveur.

Introduction

Objectif de ce tutorial


L'objectif du tutorial est d'obtenir un serveur linux debianpermettant d'héberger et de gérer vos sites web PHP / MySQL à distance,uniquement avec un accès SSH.

Pré requis


Pour réaliser ce tutorial, vous devrez au préalable avoir desconnaissances en ligne de commande linux (Au moins les commandesbasiques: cd, mkdir, mv ...).

Disposer d'un client SSH (Comme Putty), d'un client FTP (CommeFileZilla), et bien sûr de votre serveur avec une Debian fraichementinstallée.

Vous aurez aussi besoin d'au moins un nom de domaine pointant sur votre serveur.

 
Installation et configuration d'un serveur FTP: pureFTPd + MySQL




Passons à la mise en place d'un serveur FTP efficace et facilement gérable à distance.

Parmi les solutions de serveur FTP à notre disposition, nous avons:
  • proFTPd
  • proFTPd-mysql
  • pureFTPd
  • pureFTPd-mysql
  • VSFTPD

Toutes ces solutions ont leurs avantages et inconvénients. Mon choix, strictement personnel, se porte sur pureFTPd-mysql que j'utilise depuis plusieurs années sans avoir eu le moindre problème.

Il permet de gérer des comptes FTP virtuels aisement à partir de MySQL (Donc visuellement avec phpMyAdmin).

Un coup d'apt-get en SSH et le tour est joué:
Code:
[i]root [~] >[/i] apt-get install pure-ftpd-mysql
Les paquets suivants devraient être installés:
Code:
pure-ftpd-common pure-ftpd-mysql
Le plus simple est fait: l'installation est terminée. Maintenant, passons à la configuration, et là, ça se complique.
Configuration de PureFTPd

Configuration MySQL


Dans un premier temps, il faut créer un nouvel utilisateur MySQL avec tous les privilèges sur une table pureftpd.

Vous pouvez le faire par phpMyAdmin ou directement en SSH.


Nous allons maintenant modifier le fichier de configuration pureFTPd mysql.conf pour spécifier nos accès:
Code:
[i]root [~] >[/i] nano /etc/pure-ftpd/db/mysql.conf
 
Code:
[b]# Nom de l'utilisateur MySQL à utiliser[/b]MYSQLUser       pureftpd[b]# Password de cet utilisateur[/b]MYSQLPassword   [i]VOTRE_PASS_PUREFTPD_MYSQL[/i][b]# Nom de la base de données à utiliser[/b]MYSQLDatabase   pureftpd[b]# Important: Mode de cryptage des mots de passe, choisissez MD5 au lieu de cleartext ![/b]MYSQLCrypt      md5[b]# Requêtes MySQL[/b]MYSQLGetPWSELECT Password FROM users WHERE User="\L"MYSQLGetUIDSELECT Uid FROM users WHERE User="\L"MYSQLGetGIDSELECT Gid FROM users WHERE User="\L"MYSQLGetDirSELECT Dir FROM users WHERE User="\L"
Enregistrez et quittez.

Vous l'aurez compris, pureFTPd va se servir d'une table MySQL users où seront stockés tous les comptes FTP virtuels.

Il faut donc créer cette table dans votre BDD pureftpd:
Code:
CREATE TABLE users ( User varchar(16) NOT NULL default '', Password varchar(64) NOT NULL default '', Uid varchar(11) NOT NULL default '', Gid varchar(11) NOT NULL default '', Dir varchar(128) NOT NULL default '', PRIMARY KEY  (User));
D'autres options sont possibles avec pureFTPd MySQL comme la gestion de quotas. Dans notre cas, nous souhaitons héberger nos propres sites, donc une limitation en espace ou en transferts serait plus contraignante que bénéfique.

Si vous voulez plus d'infos, allez faire un tour sur la doc officielle.

 
Options de configuration


Pour que chaque utilisateur puisse uniquement accéder au dossier qui lui est attribué, nous allons le chrooter.
Code:
[i]root [~] >[/i] nano /etc/pure-ftpd/conf/ChrootEveryone
Et entrez simplement "yes", sauvegardez et quittez.

Dans le cas où le répertoire associé à l'utilisateur virtuel n'existe pas, au lieu de provoquer une erreur, nous allons demander à pure-ftpd de le créer:
Code:
[i]root [~] >[/i] nano /etc/pure-ftpd/conf/CreateHomeDir
Même chose, un simple "yes" dans le fichier suffit.

 
Configuration système


Il faut que nos utilisateurs virtuels utilisent un utilisateur système spécifique pour faciliter la sécurité.

Nous allons donc créer un groupe ftpgroup et un utilisateur système ftpuser:
Code:
[i]root [~] >[/i] groupadd -g 2001 ftpgroup[i]root [~] >[/i] useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
Ainsi nous spécifierons 2001 pour le GID et UID lors de la création d'utilisateurs virtuels.

Insérez un nouvel utilisateur virtuel dans la table users.
Code:
INSERT INTO `users` ( `User` , `Password` , `Uid` , `Gid` , `Dir` )VALUES ('web', MD5( 'PASS_FTP_USER' ) , '2001', '2001', '/var/www/');
 
Lancement du serveur et tests


Il ne nous reste plus qu'à démarrer notre serveur et tester:
Code:
[i]root [~] >[/i] /etc/init.d/pure-ftpd-mysql start
Vérifiez dans les processus si le serveur est bien lancé:
Code:
[i]root [~] >[/i] ps aux | grep pure-ftpd
si vous avez un ou plusieurs résultats, c'est que le serveur est lancé.

Dans le cas contraire, tentez un lancement de cette façon:
Code:
[i]root [~] >[/i] /usr/sbin/pure-ftpd-mysql -4 -A -B -c 50 -C 4 -D -E -H -I 15 -j -k 90 -f ftpuser -L 7500:8 -m 4 -s-u 500 -U 033:012 -z -l mysql:/etc/pure-ftpd/db/mysql.conf
Et normalement le serveur FTP devrait être opérationnel.

Pour tester très rapidement, tapez dans votre console SSH:
Code:
[b][i]root [~] >[/i] ftp VOTRE_IP_De_SERVEUR[/b]Connected to VOTRE_IP_De_SERVEUR.220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------220-You are user number 2 of 50 allowed.220-Local time is now 23:47. Server port: 21.220-This is a private system - No anonymous login220 You will be disconnected after 15 minutes of inactivity.[b]Name (VOTRE_IP_De_SERVEUR:root): web[/b]331 User web OK. Password required[b]Password:[/b]230-User web has group access to:ftpgroup230 OK. Current restricted directory is /Remote system type is UNIX.Using binary mode to transfer files.
Ca marche, nous sommes connectés ! Mais sommes nous bien dans le répertoire /var/www/ ?
Code:
[b]ftp> ls[/b]200 PORT command successful150 Connecting to port 49962drwxr-xr-x    4 0        0            4096 Jan  8 11:32 .drwxr-xr-x    4 0        0            4096 Jan  8 11:32 ..drwxr-xr-x    2 0        0            4096 Jan  7 09:42 apache2-defaultdrwxr-xr-x    2 0    0            4096 Jan  8 22:35 lafermeduweblrwxrwxrwx    1 0        0            21 Jan  8 11:32 phpmyadmin -> /usr/share/phpmyadmin226-Options: -a -l226 5 matches total[b]ftp> quit[/b]
Effectivement, on retrouve bien les fichiers de notre répertoire.

Vous pouvez ajouter autant d'utilisateurs virtuels que vous souhaitez directement dans MySQL et tester avec votre client FTP favori.

 

EDIT: Dans les nouvelles versions de Debian, le serveur FTP est associé automatiquement à inetd et n'est plus en mode standalone comme avant. Il faut donc modifier le fichier /etc/default/pure-ftpd-common ainsi:

 
Code:
# STANDALONE_OR_INETD# valid values are "standalone" and "inetd".# Any change here overrides the setting in debconf.STANDALONE_OR_INETD=standalone
Vous pourrez ensuite le lancer avec l'une des deux méthodes (Arrêtez inetd avec /etc/init.d/openbsd-inetd stop, lancez le serveur FPT puis relancez inetd /etc/init.d/openbsd-inetd start.)

 
Conclusion de cette partie 3


L'environnement web est complet, vous pouvez maintenant transférer vos fichiers vers votre répertoire web.

Dans la prochaine partie, nous installerons Postfix MySQL pour gérer nos adresses emails.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut