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 est déjà inclus dans le serveur SSH car SFTP est une surcouche de SSH. il ne vous reste donc qu'as le configurer.
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
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
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
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