Mettre en place un serveur FTP / SFTP sur votre serveur

Si vous disposez d'un serveur, il est très utile d'avoir outil vous permettant de transférer vos fichiers depuis votre ordinateur ( client ) vers votre serveur et vice vers ça.

il existe différents protocole qui vous permettent de réaliser cette opération, et nous allons voir ici deux d'entre eux : le FTP ( File Transfer Protocol ) et le SFTP (File Transfer Protocol over SSL ).


Si vous disposez d'un serveur VPS ou Dédié, alors vous connaissez sûrement déjà le protocole SSH qui vous permet en gros d’établir un connexion avec votre serveur en émulant un terminal, ça vous permet de taper des commandes sur votre machine et de les exécuter sur le serveur

Le SFTP est un protocole de transfert de fichiers entre un client et un serveur . Il a été développé en réponse aux faiblesses du protocole FTP standard.

SFTP fait partie de l'application Secure Shell (SSH) , qui a été initialement développé comme une application et un protocole d'émulation de terminal .

SFTP diffère de FTP dans un certain nombre de points.

Il transfère les fichiers sous forme de données binaires , et non pas sous forme de texte .

Le transfert en mode binaire rend le fichier difficile à lire alors qu'il est en transit , la totalité du transfert a lieu dans une session SSH , ce qui signifie qu'il est protégé par les procédures de chiffrement SSH.

pour pouvoir établir une connexion SFTP avec un serveur, il faudra disposer de l’adresse IP out bien du hôte du serveur, un identifiant et un mot de passe fournis par l’administrateur système du serveur, et un client SFTP tel que FileZilla[ref]

Dans cette partie nous allons voir comment mettre en place sur votre serveur, un serveur SFTP et FTP

Le serveur SFTP

Le serveur SFTP est déjà inclus dans le serveur SSH car SFTP est une surcouche de SSH. il ne vous reste donc qu'as le configurer.

Le serveur FTP

Sous Ubuntu le serveur FTP est vsftpd, pour l'installer tapez

sudo apt-get update
sudo apt-get install vsftpd

une fois le serveur installé vous devez le configurer

Configuration du serveur FTP

changez les paramètres suivant dans le fichier /etc/vsftpd.conf

local_enable=YES
write_enable=YES
chroot_local_user=YES

une fois fait redémarrez le serveur FTP en tapant

sudo service vsftpd restart

Configuration de SSHD

par défaut, les utilisateurs du serveur peuvent accéder a tous les fichiers depuis la racine. or si vous voulez les restreindra a un répertoire particulier, comme pas exemple dans les hébergeurs web, vous ne pouvez accédez qu'au répertoire /var/www//public_html/

et donc votre racine devient /public_html/

pour cela modifiez les paramètres dans le fichier /etc/ssh/sshd_config

Subsystem sftp /usr/lib/openssh/sftp-server

puis rajoutez a la fin :

Match Group sftpusers
ChrootDirectory /home/clients/%u/
ForceCommand internal-sftp
AllowTcpForwarding no

Attention : /home/clients/%u/ représente le répertoire racine du client FTP/SFTP exemple si mon nom d'utilisateur est neptune alors la racine est /home/clients/neptune/

vous remarquez on a configurer SSHD pour faire un match avec les utilisateur du groupe sftpusers c'est a dire que cette règle ne s'applique qu'aux utilisateurs de ce groupe

Configuration des utilisateurs et groupe

pour l'instant aucun utilisateur ne fait partie du groupe sftpusers car il n'existe pas, donc on le crée

sudo groupadd sftpusers

a présent que le groupe est créer redémarrez le service ssh

sudo /etc/init.d/ssh restart

Création des utilisateurs ftp et sftp sans autre accès

voici un script très utile pour ça

#/bin/bash
USER_NAME=$1
ROOT_DIR=/home/clients/
SFTP_GROUP_NAME=sftpusers
if [ "x$USER_NAME" == "x" ]; then
echo "you have to provide a user name"
exit;
fi
getent group $SFTP_GROUP_NAME > /dev/null 2&>1
if [ $? -ne 0 ]; then
echo "group $SFTP_GROUP_NAME does not exist.";
exit;
fi
getent passwd $USER_NAME > /dev/null 2&>1
if [ $? -eq 0 ]; then
echo "user already exists";
exit;
fi
useradd $USER_NAME --gid $SFTP_GROUP_NAME --groups $SFTP_GROUP_NAME -d $(ROOT_DIR)$USER_NAME -m --shell /usr/sbin/nologin
echo "user created";
# base directory given to root only
chown root  $(ROOT_DIR)$USER_NAME
chmod go-w  $(ROOT_DIR)$USER_NAME
# create a writable directory
mkdir  $(ROOT_DIR)$USER_NAME/writeable
chown $USER_NAME:$SFTP_GROUP_NAME  $(ROOT_DIR)$USER_NAME/writeable
chmod ug+rwx  $(ROOT_DIR)$USER_NAME/writeable
echo "access right ok";
echo "change password";
passwd $USER_NAME
/etc/init.d/ssh restart

pensez a remplacer ce que j'ai mis en rouge par la racine des utilisateurs que vous voulez

Usage :

root@machine:/# ./create-sftp-clients.sh username

22174

Article précédent Article suivant