L'utilisation de sftp (ssh) au lieu du ftp permet d'avoir des connexions sécurisées. Toutefois, le principal inconvénient est que l'on peut se balader ensuite un peu partout contrairement au ftp.

Grâce à Mysecureshell, on peut limiter l'utilisateur à son seul répertoire...(et même bien plus... Je regrette de ne pas l'avoir utilisé plus tôt... C'est très facile et rapide à installer

Je me suis inspiré de ce tuto de Cyrille Borne

(MAJ 2016 :la page n'est plus visible, dommage..) mais d'autres pages existent, comme http://www.blogdugeek.fr/tag/sftp/

et bien sur du site de MySecureShell.

(MAJ 2016 : la doc est maintenant ici : http://mysecureshell.readthedocs.org/en/latest/index.html

Il y a même une version pour Docker ! http://mysecureshell.readthedocs.org/en/latest/quick_try_docker.html

et le site ici : https://github.com/mysecureshell/mysecureshell )

et aussi maintenant sur https://doc.ubuntu-fr.org/mysecureshell_sftp-server

NB : il existe aussi une autre technique de chroot, propre au ssh apparemment( ici ), mais elle a le gros inconvénient de ne pas pouvoir mettre ce qu'on veut comme groupe (comme www-data par exemple)

Installation

A partie de la 16.04, plus besoin de charger une liste (voir ci-dessous, partie Obolète), le paquet est directement dans les paquets officiels universe. Un apt install mysecureshell suffit...

Obsolète: (->14.10)

sous ubuntu (jusqu'à 14.10 inclus à priori), créer le fichier /etc/apt/sources.list.d/mysecureshell.list et y mettre :

deb http://mysecureshell.free.fr/repository/index.php/ubuntu/12.04 testing main
deb-src http://mysecureshell.free.fr/repository/index.php/ubuntu/12.04 testing main

Pour importer la signature GPG du repository, il faut exécuter les commandes suivantes:
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys E328F22B; gpg --export E328F22B | sudo apt-key add -
OU
wget -O - "http://pool.sks-keyservers.net:11371/pks/lookup?op=get&search=0x7601D76CE328F22B" | sudo apt-key add -

faire ensuite simplement un:
apt-get update && apt-get install mysecureshell


Paramétrage

On crée au besoin un utilisateur que l'on veut gérer avec mysecureshell. Il faut ensuite éditer le fichier /etc/passwd et remplacer pour l'utilisateur concerné à la fin de sa ligne le :

/bin/bash

par

/usr/bin/mysecureshell

(ATTENTION : pour des versions anciennes, c'est plutôt /bin/MysecureShell )

On peut aussi faire simplement d'un coup:

sudo adduser --home /home/toto --shell /usr/bin/mysecureshell toto

Il faut également au besoin éditer le fichier /etc/ssh/sftp_config .

Vérifier qu'il existe et qu'il contient bien au moins les lignes :

<Default>

</Default>

on peut ajouter les directives pour son utilisateur. Par exemple:

<User test>
        Home /home/test  #prime sur le home défini dans /etc/passwd
        ForceUser www-data
        ForceGroup test
        DefaultRights           0664 0774       #Set default rights for new file and new directory
        MinimumRights           0440 0770       #Set minimum rights for files and dirs

        DirFakeUser             false   #Hide real file/directory owner (just change displayed permissions)
        DirFakeGroup            false   #Hide real file/directory group (just change displayed permissions)

        StayAtHome              true    #limit client to his home
        VirtualChroot           true    #fake a chroot to the home account

</User>

(C'est pour forcer ici que les fichiers appartiendront à www-data et le groupe à l'utilisateur, ce qui est bien pratique pour des sites web, lorsque les fichiers sont accédés à la fois par www-data et par l'utilisateur...)

MAJ du 1er avril 2016

A partir de Ubuntu 15.04, mysecureshell est intégré dans ubuntu, donc il suffit de faire un simple apt-get install mysecureshell

Par contre, pour les ubuntu 14.04 LTS, il faut effectuer l'installation décrite ci-dessus.

Important : si erreur dans Filezilla du type : Connection closed by server with exitcode 10

alors revoir dans le fichier /etc/ssh/sftp_config et vérifier que l'on a bien la ligne commentée:

#       LimitConnectionByUser   1       #max connection for the account
(c'est parce que Filezilla peut engranger plusieurs connexions à la fois, et du coup, ca bloque si limité à une par User...).

C'est bête, mais j'ai perdu 2 heures avant de trouver d'où ca venait...

Maj du 24/10/2017

Si certaines choses ne fonctionnent pas tout à fait bien (comme par exemple le ForceUser), c'est sans doute un problème de droits sur /usr/bin/mysecureshell.

il suffit de faire un :

sudo sftp-verif

pour checker la config et la corriger...

cf. http://mysecureshell.readthedocs.io/en/latest/faq.html#some-features-seem-not-working-correctly