J'ai donc réinstallé mon serveur ce weekend, pour y mettre une Xubuntu toute neuve. J'ai installé proftpd, et je n'ai pas encore touché à la config (j'utilise en fait rssh et un certain paquet de comptes «réels», le tout pour faire du SFTP, ce qui est selon moi beaucoup plus sécurisé. J'y reviendrai, un jour...).

Le problème

Et là, je remarque avec horreur que tous les comptes utilisateurs créés peuvent se logguer en FTP et surtout se balader autant qu'ils veulent dans l'arborescence. Je n'avais jamais fait gaffe à ça. C'est très mauvais, en particulier parce que tout le contenu des connexions, depuis les mots de passe à la liste de tous les dossiers lus et le contenu des fichiers téléchargés, passent «en clair», non chiffrés.

La solution

Le problème vient de la directive AuthOrder, qui par défaut contient mod_auth_unix.c, ce qui signifie que la liste des utilisateurs est donnée par /etc/passwd (qui contient la liste des utilisateurs du système), les mots de passe étant stockés (chiffrés) dans /etc/shadow. Il faut donc rajouter dans /etc/proftpd/proftpd.conf (à éditer avec les droits root, par exemple avec sudo gedit /etc/proftpd/proftpd.conf ; personnellement j'utilise jed) :

AuthOrder mod_auth_file.c
AuthUserFile /etc/proftpd/proftpd.users

Cela dit à proftpd de ne pas utiliser /etc/passwd, mais uniquement le fichier spécifié dans la deuxième ligne.

Création des utilisateurs

C'est relativement simple, il y a un programme fait pour ça. Je vous laisse lire le résultat en console de man ftpasswd (j'espère que vous n'avez pas de problème avec l'anglais :) ). Au final, vous n'avez plus qu'à taper, tout simplement :

sudo ftpasswd --passwd --file=/etc/proftpd/proftpd.users --shell=/bin/false --uid=10000 --name=le_login --home=/le_repertoire_racine_de_l_utilisateur

en remplaçant bien sûr ce qui va bien... Mais ça ne suffirait pas, comme vous le dit la commande que vous venez de taper. Vous devez insérer dans /etc/proftpd/proftpd.conf juste en-dessous des lignes précédentes

RequireValidShell off

Relancez maintenant le serveur :

sudo /etc/init.d/proftpd restart

Il y a un dernier problème. En effet, connectez-vous en FTP avec l'utilisateur que vous venez de créer (ce lien doit fonctionner si vous faites ça en local), et remontez dans l'arborescence : tout est encore visible. Facile, il suffit de rajouter, toujours dans /etc/proftpd/proftpd.conf,

DefaultRoot ~

Cadeau bonus

Il y a encore quelques problèmes de sécurité. En fait, au moins deux choses à faire. D'abord, rendre le fichier /etc/proftpd/proftpd.users illisible aux autres utilisateurs que root, histoire que personne n'accède aux logins FTP, ni au mots de passe, même chiffrés :

sudo chmod 600 /etc/proftpd/proftpd.users

Ensuite, il faut juste avoir conscience que la directive DefaultRoot fait utiliser à proftpd le programme de «chrootage» chroot (pour «change root»), dont des failles de sécurité sont connues. Il vaut peut-être mieux en fait utiliser directement la configuration de proftpd, en enlevant DefautRoot et en ajoutant «à la place» :

<Anonymous /le_repertoire_racine_de_l_utilisateur>
  User le_login
  RequireValidShell off
  AnonRequirePassword on
  <Directory *>
    <Limit WRITE>
      DenyAll
    </Limit>
  </Directory>
</Anonymous>

C'est une configuration de base qui peut être largement améliorée, mais ceci est une autre histoire...