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
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