03. SFTP (site web)
Dans ce chapitre, je vous explique comment utiliser le protocole SFTP.
Dans ce chapitre, je vous explique comment utiliser le protocole SFTP.
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).
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
.
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.
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
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
Exécutez la commande suivante pour monter la partition /home/sftp/sites-web/votre_site_web
:
mount /home/sftp/sites-web/votre_site_web
Afin de voir les connexions faites via le protocole SFTP, il faut :
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
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
Créez le fichier /etc/logrotate.d/sftp
avec le contenu suivant :
/var/log/sftp.log
{
notifempty
compress
delaycompress
create 640 root adm
}