Chapitre 3

03. SFTP (site web)

Dans ce chapitre, je vous explique comment utiliser le protocole SFTP.

Sous-sections de 03. SFTP (site web)

I. Avant propos

Pourquoi choisir le protocole SFTP plutôt que FTP ?

FTP est de base non sécurisé, ses commandes et données ne sont pas chiffrées, on peut donc intercepter le mot de passe de connexion ou le contenu des fichiers échangés.

Le chiffrement FTPS est possible mais exige une configuration plus lourde.

SFTP est plus simple à mettre en œuvre. Il est fourni avec le paquet openssh-server et permet de base le chiffrement des commandes et données transmises.

Il vérifie l’identité du client et chiffre les fichiers/répertoires échangés une fois la connexion sécurisée établie.

Il utilise les règles de chiffrement SSH (Secure SHell).

II. Installation

Comme dis précédemment, la commande sftp est inclus dans le paquet openssh-server.

Il faut donc installer ce paquet si cela n’est pas déjà fait, avec la commande :

apt install openssh-server

Les fichiers de configuration de ce paquet se trouvent dans le répertoire /etc/ssh.

III. Miroir (site web)

III.1 - Droits d’accès

Sous Debian l’utilisateur (et le goupe) par défaut utilisé par Apache ou Nginx est www-data. C’est cet utilisateur qui a été définit pour tous les fichiers et sous répertoires contenus dans le répertoire de votre site web.

Les écritures effectuées depuis un client SFTP ne doivent pas modifier ces droits.

Nous allons donc utiliser un site miroir du répertoire contenant votre site web.

III.2 - Création du répertoire miroir

L’outil bindfs liera le dossier /var/www/votre_site_web/ à un répertoire miroir dédié aux accès SFTP. Les écritures effectuées à l’intérieur de ce répertoire n’affecteront pas les droits d’accès et permissions du dossier de votre site web.

Le répertoire miroir appartiendra au groupe sftp et à l’utilisateur sftp.

Commencez par la création du répertoire miroir :

sudo mkdir /home/sftp/sites-web/votre_site_web

Création du groupe sftp :

sudo addgroup sftp

Création de l’utilisateur :

sudo useradd -d /home/sftp/sites-web/votre_site_web -g sftp sftp

Appliquez les permissions suivantes sur le répertoire miroir :

sudo chown sftp:sftp /home/sftp/sites-web/votre_site_web
sudo chmod 755 /home/sftp/sites-web/votre_site_web

Défnissez un mot de passe pour l’utilisateur sftp :

sudo passwd sftp

III.3 - Installation de bindfs

L’installation de bindfs de fait à l’aide de la commande :

sudo apt install bindfs

Le paquet fuse est ajouté comme dépendance.

Montage automatique de votre site web dans le répertoire mirroir :

sudo vi /etc/fstab

bindfs#/var/www/votre_site_web /home/sftp/sites-web/votre_site_web fuse force-user=sftp,force-group=sftp,create-for-user=www-data,create-for-group=www-data,create-with-perms=ud=rwx:god=rx:uf=rw:gof=r,chgrp-ignore,chown-ignore,chmod-ignore 0 0

III.4 - Montage de la partition bindfs

Exécutez la commande suivante pour monter la partition /home/sftp/sites-web/votre_site_web :

mount /home/sftp/sites-web/votre_site_web

IV. Journalisation

Afin de voir les connexions faites via le protocole SFTP, il faut :

IV.1 - Paramétrez le service ssh

Pour cela, dans le fichier /etc/ssh/sshd_config commentez la ligne :

#Subsystem  sftp    /usr/lib/openssh/sftp-serv

Et rajoutez les lignes suivantes :

# SFTP access
Subsystem     sftp     internal-sftp
#Port 384
PermitRootLogin no
Match User sftp
ChrootDirectory  /home/sftp/sites-web
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -u 022 -l INFO

Fixez les permissions sur les répertoires :

chown root /home/sftp
chown root /home/sftp/sites-web

Pour finir redémarrez le service ssh :

systemctl restart ssh

IV.2 - Créez une nouvelle règle rsyslog

Créez le fichier /etc/rsyslog.d/sftp.conf avec le contenu suivant :

# create additional sockets for the sftp chrooted users
module(load="imuxsock")
input(type="imuxsock" Socket="/home/sftp/sites-web/dev/log" CreatePath="on")

# log internal-sftp activity to sftp.log
if $programname == 'internal-sftp' then /var/log/sftp.log
& stop

Créez le répertoire :

mkdir -m2755 /home/sftp/sites-web/dev

Redémarrez le service rsyslog :

systemctl restart rsyslog

IV.3 - Activez la journalisation

Créez le fichier /etc/logrotate.d/sftp avec le contenu suivant :

/var/log/sftp.log
{
    notifempty
    compress
    delaycompress
    create 640 root adm
}