
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!





