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-serverLes 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_webCréation du groupe sftp :
sudo addgroup sftpCréation de l’utilisateur :
sudo useradd -d /home/sftp/sites-web/votre_site_web -g sftp sftpAppliquez 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_webDéfnissez un mot de passe pour l’utilisateur sftp :
sudo passwd sftpL’installation de bindfs de fait à l’aide de la commande :
sudo apt install bindfsLe 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 0Exécutez la commande suivante pour monter la partition /home/sftp/sites-web/votre_site_web :
mount /home/sftp/sites-web/votre_site_webAfin de voir les connexions faites via le protocole SFTP, il faut :
sshPour cela, dans le fichier /etc/ssh/sshd_config commentez la ligne :
#Subsystem sftp /usr/lib/openssh/sftp-servEt 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 INFOFixez les permissions sur les répertoires :
chown root /home/sftp
chown root /home/sftp/sites-webPour finir redémarrez le service ssh :
systemctl restart sshCré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
& stopCréez le répertoire :
mkdir -m2755 /home/sftp/sites-web/devRedémarrez le service rsyslog :
systemctl restart rsyslogCréez le fichier /etc/logrotate.d/sftp avec le contenu suivant :
/var/log/sftp.log
{
notifempty
compress
delaycompress
create 640 root adm
}