On peut utiliser différentes méthodes,
scp
ou rsync
On va créer un utilisateur dédié filez
ainsi qu'une zone dédiée aux échanges sur le serveur (idéalement sur une partition à part pour ne pas laisser la possibilité aux utilisateurs de saturer une partition importante pour le serveur!)
adduser filez
chown -R root:root /home/filez chmod go-rwx /home/filez
mkdir -p /sftp/filez/incoming chown filez:filez /sftp/filez/incoming
Et bride cet accès depuis le fichier de configuration du service SSH, /etc/ssh/sshd_config
:
# override default of no subsystems #Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp Match User filez PasswordAuthentication yes X11Forwarding no AllowTcpForwarding no AllowAgentForwarding no ChrootDirectory /sftp/%u ForceCommand internal-sftp
Notez ci-dessus
filez
, afin de faciliter la vie des utilisateurs.internal-sftp
est spécifié (à la place de la valeur par défaut de subsystem)chroot
afin de verrouiller l'utilisateur dans son dossier /sftp/filez/
Ensuite, on peut utiliser la commande sftp
(qui se repose sur son $HOME/.ssh/config
) ou bien un client interactif comme FileZilla plus accessible pour la plupart des utilisateurs. Pensez à bien sélectionner le protocole "SFTP" via l'icone de gauche dans la barre des icones, afin de configurer la connexion:
Il y a plusieurs façons de limiter la taille d'un dossier avec des quotas, mais la plus simple reste d'avoir une partition dédiée, physique ou virtuelle.
On crée un fichier /sftp/volume.img
de 5GO que l'on va utiliser comme une partition virtuelle:
mkdir /sftp
dd if=/dev/zero of=/sftp/volume.img bs=1G count=5 mkfs -t ext4 /sftp/volume.img
On va le monter en tant que "loop device":
mount -t auto -o loop /sftp/volume.img /sftp
Désormais /sftp
montre le système de fichier à l'intérieur du fichier /sftp/volume.img
.
Le fichier image semble avoir disparu car on l'a monté sur le dossier qui le contient lui-même !
# Il faut (donc) recréer le dossier vu précédemment: mkdir -p /sftp/filez/incoming chown filez:filez /sftp/filez/incoming
On peut voir l'occupation disque associée:
df -hl /sftp # Filesystem Size Used Avail Use% Mounted on # /dev/loop1 4.9G 32K 4.6G 1% /sftp
On peut ajouter cette ligne à /etc/fstab
pour que le montage soit fait au reboot:
/sftp/volume.img /sftp ext4 loop 0 0
Pour retirer le montage et détruire le volume (ex. après usage):
umount /sftp rm /sftp/volume.img
Si vous avez partitionné votre disque dur avec LVM, vous pourrez aisément modifier la taille de la partition (apt install lvm2
):
# Créer un espace virtuel de 10GO nommé "sftpdata" dans le groupe de volumes "vg0" lvcreate -L 10G -n sftpdata vg0 # On le formatte en ext3 mke2fs -j /dev/vg0/sftpdata # On le monte (en général vous voudrez l'indiquer dans /etc/fstab pour que ce soit rémanent) mount /dev/vg0/sftpdata /sftp
Ensuite on peut facilement étendre la taille du système de fichier virtuel associé:
# Ajouter 2GO d'espace au volume: lvextend -L +2g /dev/vg0/sftpdata # Puis on retaille le système de fichier: resize2fs /dev/vg0/sftpdata