===== Configurer un serveur SFTP (FTP sur SSH) ===== La configuration d'un serveur FTP public anonyme est assez facile. Celle d'un serveur FTP privé, dont les clients peuvent s'y connecter uniquement par identification, est un peu plus complexe. Ajoutons à cela une identification chiffrée (FTPS), tout devient bien compliqué. Je propose une solution facile à mettre en œuvre fonctionnant uniquement avec des comptes UNIX (petit inconvénient). Au lieu de mettre en place un serveur FTP chiffré dont la configuration sera difficile, nous pouvons utiliser le protocole [[http://fr.wikipedia.org/wiki/SSH_file_transfer_protocol|SFTP]] (SSH File Transfer Protocol), La plupart des distributions GNU/Linux installent et exécutent le service [[http://fr.wikipedia.org/wiki/OpenSSH|OpenSSH]], nous pouvons dès le démarrage de notre ordinateur nous y connecter depuis un autre par le protocole SSH, donc nous pouvons aussi faire des transferts de fichiers par celui-ci avec [[http://fr.wikipedia.org/wiki/FileZilla|Filezilla]] par exemple. Nous voyons à quel point la mise en place d'un serveur SFTP est facile dès le début. Mais il faut pouvoir sécuriser l'accès au maximum car par défaut : * nous avons accès à toute l'arborescence du serveur (pas de chroot), suivant les droits des dossiers et fichiers bien entendu, * nous avons accès à un shell. \\ ==== Configuration d'OpenSSH ==== Nous pouvons sécuriser ces paramètres en éditant le fichier ''/etc/ssh/sshd_config''. Ecrire : PermitRootLogin no //Simple question de bon sens mais pas obligatoire.// Ajouter : Subsystem sftp internal-sftp //Cette commande autorise le faux shell "internal-sftp". J'y reviendrai un peu plus tard.// Ajouter encore : Match group geeks X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp ChrootDirectory /sftp/geeks/%u Ainsi nous autorisons le groupe "geeks" à accéder uniquement au shell "internal-sftp". Et il ne pourra pas sortir de son home car il est chrooté. \\ Le %u est la variable désignant l'identifiant de l'utilisateur. Si bob se connecte au serveur, il sera chrooté dans "/sftp/geeks/bob". Maintenant que la configuration d'OpenSSH est faite, nous pouvons ajouter/configurer les comptes de nos clients. \\ ==== Configuration des comptes utilisateurs ==== Tout d'abord, si le groupe "geeks" n'existe pas, il faut le créer : groupadd geeks Maintenant, ajoutons l'utilisateur "bob" : useradd -g geeks -d /bob -s /usr/libexec/sftp-server bob bob : * fait partie du groupe "geeks", * son home est "/bob" donc "/sftp/geeks/bob" d'après ''/etc/sshd_config'' puisqu'il ne s'y connectera qu'en SSH, * et son shell est "/usr/libexec/sftp-server" (le chemin de ce shell peut être différent suivant les distributions). \\ Ce faux shell permet de donner accès **uniquement** au protocole SFTP, donc bob ne pourra pas avoir accès à la ligne de commande, car le faux shell /bin/false ne fonctionne pas dans ce cas. Nous lui donnons un mot de passe : passwd bob Bob peut maintenant se connecter à "sftp://bob@" Un petit inconvénient peut ennuyer : \\ Le chemin chrooté doit obligatoirement appartenir à "root:root" avec les droits "rwxr-xr-x" soit ''chmod 755''. \\ Dans ce cas, l'administrateur sera obligé de faire un répertoire dans chaque "home" avec des droits en lecture/écriture pour que chaque client puissent envoyer des fichiers. Une autre solution est possible, mais peut ennuyer également : \\ Il s'agit de remplacer dans ''/etc/ssh/sshd_config'' la ligne suivante : ChrootDirectory /sftp/geeks/%u par : ChrootDirectory /sftp/geeks Dans ce cas, les clients seront chrootés dans le répertoire "/sftp/geeks" uniquement mais pourront faire tout ce qu'ils veulent dans le /home qui leur appartient. ==== Conclusion ==== Même si la configuration d'un serveur SFTP est moins flexible qu'un serveur FTP classique, nous avons pu voir qu'elle est très facile à mettre en œuvre et convient pour un petit serveur perso.