SFTP Dropbox sur Debian 12

Parfois, on a besoin d’un dossier un peu spécial : un endroit où chacun peut déposer ses fichiers, mais sans jamais pouvoir les modifier ni les supprimer ensuite. Pratique quand on veut collecter des documents en toute sécurité, sans risque de perte ou de mauvaise manipulation.

Imaginez un cours : chaque étudiant remet son devoir, mais personne ne peut aller fouiller dans ceux des autres. Ou encore une entreprise qui reçoit des factures ou des candidatures : les documents arrivent dans la boîte, mais restent intouchables. Même pour un projet collaboratif ou un événement, on peut récolter photos et vidéos de tous les participants sans craindre que quelqu’un mette le bazar.
Si vous venez du monde Windows, vous pouvez comparer ça à un dossier partagé en “écriture seule”. On y colle un fichier, mais on ne voit pas ce qu’il y a déjà dedans. Finalement, c’est comme une boîte aux lettres verrouillée : tout le monde peut y glisser une enveloppe, mais seul le propriétaire a la clé pour l’ouvrir.
Ce type de répertoire est traditionnellement appelé SFTP dropbox : un espace d’envoi où les utilisateurs peuvent déposer des fichiers sans jamais voir ni modifier ceux des autres.
Dans ce tutoriel, je vais vous montrer pas à pas comment créer ce répertoire. J’utiliserai Proxmox et un conteneur LXC Debian 12, mais si vous préférez un autre Linux, pas de problème, la logique reste la même.
👉 Pour commencer, il faut créer un conteneur (voir le guide : Les conteneurs LXC sur Proxmox).
Il faut aussi créer un utilisateur sudo, ou utiliser directement root. Dans ce guide, j’utiliserai l’utilisateur root.

Étape 1. Installer les paquets de base

Vérifier que SSH fonctionne :

systemctl status ssh --no-pager

Si SSH n’est pas installé, il faut l’installer :

apt update
apt install -y openssh-server

 

Étape 2. Préparer la structure chroot + dossier « incoming»

Le répertoire qui sert de racine au chroot doit appartenir à root et ne peut pas être modifié par d’autres utilisateurs.

2.1 Racine du chroot

mkdir -p /srv/sftp
chown root:root /srv/sftp
chmod 755 /srv/sftp

 

2.2 Dossier de dépôt (write-only, sans listing)

mkdir -p /srv/sftp/incoming
chown root:root /srv/sftp/incoming
chmod 1733 /srv/sftp/incoming

Petite explication:
1733 = 1 + 733.
7 pour le propriétaire (rwx)
3 pour le groupe (wx seulement)
3 pour les autres (wx seulement)
→ Tout le monde peut déposer un fichier, mais personne ne peut lister le contenu.
Le premier chiffre 1 active le sticky bit :
seul le propriétaire du fichier (ou root) peut le supprimer ou le renommer.
Cela empêche qu’un client efface ou modifie un fichier déposé par un autre.
En résumé : les clients peuvent déposer, mais ne voient pas le contenu, et ne peuvent rien supprimer sauf leurs propres fichiers — root reste le seul à avoir un accès complet.

 

Étape 3. Créer l’utilisateur dropbox

3.1 Utilisateur sans shell (pas de console SSH)

adduser --shell /usr/sbin/nologin --home /incoming dropbox

saisir un mot de passe

 

3.2 Changer le mot de passe plus tard au besoin

passwd dropbox

Étape 4. Configurer OpenSSH pour le chroot SFTP

Éditer :

nano /etc/ssh/sshd_config

Ajouter à la fin :

# --- SFTP dropbox (chroot) ---
Match User dropbox
ChrootDirectory /srv/sftp
ForceCommand internal-sftp -d /
PasswordAuthentication yes
X11Forwarding no
AllowTcpForwarding no

 

Redémarrer SSH :

systemctl restart ssh

(Si erreur « bad ownership or modes » → vérifier que /srv/sftp = root:root 755.)

 

Étape 5. Test de connexion client

Depuis une machine du réseau je me connecte avec la ligne de commande :

sftp [email protected]

Et bien sûr, je ne peux pas voir le contenu du dossier incoming.

Aussi je teste la connexion client avec FileZilla.

Je crée une nouvelle connexion SFTP :
Adresse : 10.10.0.251
Protocole : SFTP (port 22)
Login : dropbox
Mot de passe : celui que vous assignez pour dropbox
et cliquez sur Connect.

Je fais un glisser-déposer (drag & drop) du fichier Test.txt dans le dossier incoming.
Dans le log on peut voir que le fichier a été transféré avec succès.

 

Étape 6. Vérification / récupération côté root

J’ai créé une deuxième connexion root dans FileZilla :
Adresse : 10.10.0.251
Protocole : SFTP (port 22)
Login : root
Mot de passe : celui que vous assignez pour root
et se connecter en cliquant sur Connect.

Dans le dossier /srv/sftp/incoming

On peut voir le fichier Test.txt

 

Seul root peut tout voir ; les clients peuvent seulement déposer.

Option : blocage automatique après dépôt

Empêcher qu’un client puisse supprimer ou écraser son fichier après upload.

1. Installer inotify-tools

apt update
apt install -y inotify-tools

2. Créer le script /usr/local/bin/lock-dropbox.sh

#!/bin/bash
WATCH_DIR="/srv/sftp/incoming"

inotifywait -m -e close_write --format "%w%f" "$WATCH_DIR" | while read FILE
do
chown root:root "$FILE"
chmod 0644 "$FILE"
done

Donner les droits :

chmod +x /usr/local/bin/lock-dropbox.sh

3. Créer le service systemd

nano /etc/systemd/system/lock-dropbox.service

Contenu :

[Unit]
Description=Auto-lock uploaded files in SFTP dropbox
After=network.target ssh.service

[Service]
ExecStart=/usr/local/bin/lock-dropbox.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Activer le service :

systemctl daemon-reexec
systemctl enable --now lock-dropbox.service

4. Vérification

Client envoie Test.txt
Sur le serveur :

ls -l /srv/sftp/incoming

Résultat :

-rw-r--r-- 1 root root 12345 Sep 17 15:00 test.pdf

le fichier appartient à root, donc non supprimable/modifiable par le client.

Et voilà, vous avez une boîte aux lettres SFTP sécurisée : les clients déposent, seul root peut lire ou gérer les fichiers.

Bonne chance!