Après avoir installé et testé ProFTPd sur un serveur Debian, j’ai également besoin d’un serveur FTP sur le serveur Ubuntu que j’ai à la maison. On m’a conseillé sur la Mailing List du BxLUG de mettre Pure-FTPd ! « C’est mieux, c’est plus sécure, plus d’option, etc »…

Pure-FTPd is a free (BSD), secure, production-quality and standard-conformant FTP server

Oui, pourquoi pas… La meilleur façon de savoir est de faire l’installation et de comparer ;-)

Je vais faire cette installation sur un serveur Ubuntu, mais la presque totalité des commandes fonctionnent aussi sous Debian et même sur la plupart des distributions Linux. En général en Debian, on passe en « root » avec la commande  » su –  » et on n’utilise pas « sudo ». A part cela, c’est presque identique ;-)

J’ai trouvé plusieurs documentations assez claires sur le net :

L’explication la plus claire, et en français ce qui est toujours pratique même si l’anglais technique ne me pose aucun problème, est celle de Tony sur le site Coagul.

Commençons par installer le package Pure-FTPd, qui fait partie de la liste des paquets nativement disponibles, aussi bien dans Ubuntu que Debian. La commande est classique :

$ sudo aptitude install pure-ftpd
[sudo] password for didier:
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Construction de la base de données des étiquettes... Fait
Les NOUVEAUX paquets suivants vont être automatiquement installés :
pure-ftpd-common
Les NOUVEAUX paquets suivants vont être installés :
pure-ftpd pure-ftpd-common
0 paquets mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 321ko d'archives. Après dépaquetage, 901ko seront utilisés.
Voulez-vous continuer ? [Y/n/?] Y
...

On pourrait dire « ok, c’est bon. C’est fini ! »

En effet, comme souvent lors d’une installation, Pure-FTPd est démarré avec des paramètres par défaut, qui sont suffisants pour une utilisation de base.

Vérifions cela :

$ ps -A|grep ftp
10068 ?        00:00:00 pure-ftpd
$ ftp 127.0.0.1
Connected to 127.0.0.1.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 02:28. 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 (127.0.0.1:didier): didier
331 User didier OK. Password required
Password:
230-User didier has group access to:  didier   sambasha admin    lpadmin
230- scanner  plugdev  video    dip      audio    floppy   cdrom    dialout
230- adm
230 OK. Current directory is /home/didier
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
150 Connecting to port 36573
-rw-r--r--    1 root     root            2 Jun 27 08:31 atop.log
drwxr-xr-x    7 didier   didier       4096 Apr 16 02:41 download
drwxr-xr-x    3 didier   didier       4096 Apr 17  2008 images
-rw-------    1 didier   didier       1442 Dec 29  2007 mbox
...

C’est bien mon dossier « Home » sur ce serveur. ;-)

Donc par défaut Pure-FTPd accepte au logon les utilisateurs qui sont connus du système Linux.
C’est logique.

Je voudrais créer des utilisateurs virtuels, différents des utilisateurs Linux, ce qui me permettrait d’avoir des utilisateurs ayant accès FTP mais pas accès en console système !

Je continue le paragraphe de la documentation sur la création des utilisateurs virtuels.

La configuration de Pure-FTPd est un peu déroutante. Tout se trouve dans /etc/pure-ftpd, dans des sous-dossiers.
Mais Pure-FTPd ne lit pas directement ces fichiers. Il doit avoir ces paramètres passés en ligne de commande au moment du démarrage. il est nécessaire de taper une commande pour regénérer cette ligne de commande pour que des modifications soient prises en compte. De la même façon, l’ajout d’utilisateurs demande une commande spéciale.

Je commence par créer un groupe « ftpgroup » et un utilisateur système « ftpuser », qui sera utilisé par Pure-FTPd lors de l’accès d’un utilisateur. Attention, bien qu’utilisateur système, « ftpuser » n’aura PAS accès au système :

# sudo groupadd ftpgroup
# sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser

Je crée l’utilisateur FTP « uploadblog » qui n’existe pas en Linux, mais qui doit avoir un accès FTP sur le dossier de mon blog.

L’ajout d’un utilisateur virtuel dans Pure-FTPd doit se faire au moyen de la commande « pure-pw useradd … » :

# sudo pure-pw useradd uploadblog -u ftpuser -g ftpgroup -d /home/www/didier/blog  -N 10
Password:
Enter it again:

Le paramètre  » -d  » va forcer l’utilisateur à rester dans ce dossier (« chrooté »).
Pour un utilisateur « normal », on mettrait son dossier « /home/utilisateur ».

Le paramètre  » – N 10  » fixe son quota à 10 MB.

Il faut générer la base de données de Pure-FTPd, et le faire à chaque ajout ou suppression d’utilisateur !

$ sudo pure-pw mkdb

« pure-pw usermod … » permet aussi de modifier les paramètres d’un utilisateur.
Je vais augmenter le quota avec la commande :

# sudo pure-pw usermod uploadblog -N 100

Les utilisateurs sont sauvés dans le fichier « /etc/pure-ftpd/pureftpd.passwd ».
Relisons le fichier password de Pure-FTPd :

# sudo less /etc/pure-ftpd/pureftpd.passwd
uploadblog:$1$NuHzxvs0$3PwulPUV3tgVFZwbCIghy/:1005:1005::/home/www/didier/blog/./:::::::104857600:::::

Le quota est effectivement de 100 MB.

Si vous devez supprimer cet utilisateur, la commande est :

# sudo pure-pw userdel uploadblog -m

Le  » – m  » met à jour le fichier Password et valider la mise à jour de l’index dans ce fichier (je crois…).

La commande « pure-pw passwd » permet de modifier le mot de passe d’un utilisateur :

$ sudo pure-pw passwd uploadblog
Password:
Enter it again:

La commande « pure-pw list » liste les utilisateurs :

$ sudo pure-pw list
uploadblog            /home/www/didier/blog/./

Il est possible d’afficher les détails pour un utilisateur :

$ sudo pure-pw show uploadblog
Login              : uploadblog
Password           : $1$NuHzxvs0$3PwulPUV3bvVFZwbCIghy/
UID                : 1005 (ftpuser)
GID                : 1005 (ftpgroup)
Directory          : /home/www/didier/blog/./
Full name          :
Download bandwidth : 0 Kb (unlimited)
Upload   bandwidth : 0 Kb (unlimited)
Max files          : 0 (unlimited)
Max size           : 100 Mb (enabled)
Ratio              : 0:0 (unlimited:unlimited)
Allowed local  IPs :
Denied  local  IPs :
Allowed client IPs :
Denied  client IPs :
Time restrictions  : 0000-0000 (unlimited)
Max sim sessions   : 0 (unlimited)

N’oubliez pas de relancer la commande « pure-pw mkdb » après toute modification !

$ sudo pure-pw mkdb

Cela devrait être bon.

Arrêtons la version Pure-FTPd.
On peut démarrer Pure-FTPd comme test, avec la commande :

$ sudo /etc/init.d/pure-ftpd stop
Stopping ftp server: pure-ftpd.
$ sudo /usr/sbin/pure-ftpd -S 127.0.0.1,21 -c 30 -C 1 -l puredb:/etc/pure-ftpd/pureftpd.pdb -x -E -j -R

On remarque que dans cette commande, Pure-FTPd n’accepte des connexions que depuis LocalHost, càd 127.0.0.1.
Un commande « nmap 127.0.0.1″ en console sur le serveur, montre le service FTP sur le port 21. Par contre, à distance ce service n’est pas disponible.

Faites l’essais avec l’utilisateur virtuel que vous avez créé, cela devrait fonctionner.

Mais si vous démarrez normalement pure-ftpd (comme il le serait lors du boot de votre serveur), votre utilisateur virtuel n’est plus reconnu !

$ sudo /etc/init.d/pure-ftpd start
Starting ftp server: Running: /usr/sbin/pure-ftpd -l pam -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -E -B

La méthode d’authentification n’est pas correcte.

Vérifions :

$ cd /etc/pure-ftpd/auth/
$ ls -l
total 0
lrwxrwxrwx 1 root root 26 2009-09-07 02:05 65unix -> ../conf/UnixAuthentication
lrwxrwxrwx 1 root root 25 2009-09-07 02:05 70pam -> ../conf/PAMAuthentication

J’ai bien créé l’utilisateur et son mot de passe, mais il faut encore mettre un lien dans les dossiers de configuration de Pure-FTPd vers le fichier base de données utilisateurs. C’est une méthode qui me rappelle la config d’Exim4 ;-)

$ sudo ln -s ../conf/PureDB 50PureDB

$ ls -l
total 0
lrwxrwxrwx 1 root root 14 2009-09-07 04:13 50PureDB -> ../conf/PureDB
lrwxrwxrwx 1 root root 26 2009-09-07 02:05 65unix -> ../conf/UnixAuthentication
lrwxrwxrwx 1 root root 25 2009-09-07 02:05 70pam -> ../conf/PAMAuthentication

Et redémarrons Pure-FTPd :

$ sudo /etc/init.d/pure-ftpd start
Starting ftp server: Running: /usr/sbin/pure-ftpd -l puredb:/etc/pure-ftpd/pureftpd.pdb -l pam
   -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -E -B

La base de données utilisateurs est maintenant inclue dans la ligne de commande de démarrage.

Effectivement, on peut maintenant se connecter en FTP avec l’utilisateur virtuel « uploadblog ».

Mais, on voit aussi l’authentification PAM, càd que tous les utilisateurs définis en Linux pourront se connecter en FTP en même temps que les utilisateurs virtuels…

Ce n’est pas ce que je voulais. Je vais retirer les méthodes d’authentification non désirées, et ne garder que la base de données :

$ sudo rm 65unix 
$ sudo rm 70pam 
$ ls -l
total 0
lrwxrwxrwx 1 root root 14 2009-09-07 04:13 50PureDB -> ../conf/PureDB

$ sudo /etc/init.d/pure-ftpd restart
Restarting ftp server: Running: /usr/sbin/pure-ftpd -l puredb:/etc/pure-ftpd/pureftpd.pdb
   -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -E -B

Ok ! Il reste la base de données, mais plus PAM.

Je refais un essais. Je peux me logguer en FTP avec mon user virtuel « uploadblog », mais PAS avec mon user système « didier » !

Je peux donc définir des utilisateurs uniquement dans Pure-FTP. C’est exactement ce que je voulais !

Par contre, je n’arrive pas à faire mon upload pour mettre à jour mon site. Cela vient du dossier que j’ai inclu dans l’URL… WordPress n’aime pas ça.

Je corrige donc le dossier « chrooté » pour cet utilisateur avec la commande « pure-pw usermod » :

$ sudo pure-pw usermod uploadblog -d /home/www/didier/

Je ne dois changer que le dossier, donc le paramère  » -d … » suffit ;-)

Voilà pour PureFTPd avec des utilisateurs virtuels.

Il est possible d’aller plus loin, par exemple de définir les utilisateurs ayant accès FTP dans une base de données MySQL. Je ne ferai pas cette configuration car j’aurai probablement seulement 2 ou 3 userids devant accéder en FTP… Par contre si vous avez des dizaines ou centaines d’utilisateurs à gérer, ce serait intéressant ;-)


Réseaux sociaux :
  • Print
  • Identi.ca
  • Twitter
  • Facebook
  • email
  • PDF
  • RSS
  • Digg
  • Sphinn
  • del.icio.us
  • Mixx
  • Google Bookmarks
  • MySpace
  • Netvibes
  • Technorati
  • Wikio
  • Wikio FR
  • LinkedIn
  • Add to favorites
  • FriendFeed
  • viadeo FR
  • Yahoo! Buzz
  • MisterWong
Si vous appréciez cet article, laissez un commentaire ou abonner vous au flux RSS feed pour avoir les articles futures délivrés dans votre Reader.

Articles relatifs

Written on septembre 9th, 2009 & filed under Linux, Serveurs Tags: , , ,
LEAVE A COMMENT
Comment
 
COMMENTS

    [...] pour permettre des mises à jour « automatique », c’est le userid de Pure-FTP qui est propriétaire du dossier chez [...]

    18 septembre 2009 at 1:43