Serveur de fichiers chiffré Debian avec Samba

Objectif

Cette procédure décrit la mise en place d'un serveur de fichiers sous Debian utilisant un disque dur externe chiffré avec LUKS, formaté en Btrfs, et exporté via Samba avec chiffrement SMB 3.1.1 obligatoire. Le but est d'obtenir un partage réseau correct, chiffré, et un peu plus solide que les bricolages habituels branchés à l'arrache sur une box.


Vue d'ensemble de la procédure

La mise en place se fait en plusieurs grandes étapes :

Les sections suivantes détaillent chaque étape avec les commandes à exécuter côté serveur Debian et les actions à effectuer sur un client (par exemple macOS) pour accéder au partage.


Préparation du système Debian

1) Installer Debian

Installez une Debian minimale sur la machine qui hébergera le disque dur externe. Mettez le système à jour, créez un utilisateur administrateur (ou utilisez root si vous aimez vivre dangereusement), puis assurez-vous d'avoir un accès SSH fonctionnel si vous administrez la machine à distance.

Une fois Debian en place, passez à la préparation du disque dur externe qui servira de stockage chiffré.


Préparation du disque chiffré et du système de fichiers

2) Ajouter le disque dur externe

Branchez le disque dur externe sur le serveur Debian. Il devrait apparaître comme un nouveau périphérique de type /dev/sdX ou similaire.

3) Localiser le disque

Identifiez le nom du disque avec lsblk. Dans la suite, nous supposons qu'il apparaît comme /dev/sdb. Vérifiez bien que vous ne visez pas le disque système, sinon c’est formatage express.

lsblk

4) Créer une partition sur le disque /dev/sdb

Créez une unique partition sur le disque /dev/sdb en utilisant sfdisk. Cette commande écrase la table de partition du disque, donc vérifiez bien deux fois le device avant de l’exécuter.

echo ',;' | sfdisk /dev/sdb

5) Chiffrer la partition avec LUKS

Installez l’outil de chiffrement cryptsetup, puis initialisez la partition /dev/sdb1 avec LUKS. Vous devrez confirmer avec YES en majuscules et saisir une passphrase solide (pas le prénom du chat…).

apt install cryptsetup -y
cryptsetup luksFormat /dev/sdb1
# écrire YES puis entrer la passphrase de chiffrement.

6) Ouvrir le volume LUKS

Ouvrez la partition LUKS sous le nom logique partage. Une fois ouverte, un device apparaîtra sous /dev/mapper/partage que l’on utilisera pour créer le système de fichiers.

cryptsetup luksOpen /dev/sdb1 partage
# Une fois ouvert, le volume sera accessible dans /dev/mapper/partage
ls /dev/mapper/

7) Formater le volume en Btrfs

Installez les outils Btrfs, puis formatez le volume chiffré. Btrfs est choisi ici car il offre des checksums de données, ce que n'apportent pas ext4 ou APFS.

apt install btrfs-progs -y
mkfs.btrfs /dev/mapper/partage

8) Monter le volume

Créez le point de montage et montez le système de fichiers. Un petit df -h permet de vérifier que tout est en place.

mkdir -p /mnt/partage
mount /dev/mapper/partage /mnt/partage
df -h /mnt/partage

Installation et configuration de Samba

Une fois le volume chiffré prêt et monté, il reste à installer Samba et à exposer le répertoire de partage via SMB3.1.1 avec chiffrement obligatoire, histoire de ne pas envoyer tout ça en clair sur le réseau.

9) Installer Samba

Installez le paquet Samba, puis sauvegardez le fichier de configuration d’origine avant de le remplacer.

apt install samba -y
cp /etc/samba/smb.conf /etc/samba/smb.conf.BAK

10) Créer le dossier à partager

Créez le répertoire qui sera partagé par Samba à l’intérieur du volume Btrfs monté.

mkdir /mnt/partage/share

11) Configurer Samba avec chiffrement SMB 3.1.1

Copiez/Collez tout le bloc suivant pour remplacer le contenu de /etc/samba/smb.conf par la configuration suivante, qui définit un serveur autonome, désactive totalement les invités, force SMB 3.1.1 et active le chiffrement obligatoire.

cat > /etc/samba/smb.conf << 'EOF'
[global]
 workgroup = WORKGROUP

 log file = /var/log/samba/log.%m
 max log size = 1000
 logging = file
 panic action = /usr/share/samba/panic-action %d

 server role = standalone server

 obey pam restrictions = yes
 unix password sync = yes
 passwd program = /usr/bin/passwd %u
 passwd chat = *Enter\\snew\\s*\\spassword:* %n\\n *Retype\\snew\\s*\\spassword:* %n\\n *password\\supdated\\ssuccessfully* .
 pam password change = yes

 # Désactiver totalement l'accès invité
 map to guest = never
 usershare allow guests = no

 # Forcer SMB 3.1.1 uniquement avec chiffrement obligatoire
 server min protocol = SMB3_11
 server max protocol = SMB3_11
 smb encrypt = required

[partage]
 path = /mnt/partage/share
 browseable = yes
 read only = no
 guest ok = no
 valid users = @sambashare
 create mask = 0770
 directory mask = 0770
EOF

# Tester la configuration :
testparm

(Si testparm remonte des erreurs de syntaxe, corrigez-les avant d'aller plus loin, sinon vous passerez votre vie à débugger un service qui ne démarre pas.)

12) Créer le groupe et l'utilisateur Samba

Créez un groupe dédié (sambashare) et un utilisateur système (smbuser) dont le shell est désactivé. Ajoutez ensuite cet utilisateur à la base de comptes Samba.

groupadd sambashare
useradd -M -G sambashare -s /usr/sbin/nologin smbuser
smbpasswd -a smbuser

13) Appliquer les permissions sur le dossier partagé

Le répertoire du partage doit appartenir au groupe sambashare, avec un bit setgid pour que les nouveaux fichiers héritent du groupe. Seuls root et les membres du groupe sambashare pourront lire/écrire.

chown root:sambashare /mnt/partage/share
chmod 2770 /mnt/partage/share

14) Redémarrer Samba

Redémarrez les services Samba pour prendre en compte la nouvelle configuration.

systemctl restart smbd nmbd

(Sur un système sans systemd, adaptez évidemment les commandes de gestion de service, sinon ça va râler.)


Accès au partage depuis un client

Une fois Samba opérationnel, vous pouvez accéder au partage depuis une machine distante. L'exemple ci-dessous utilise macOS, mais le principe reste le même sous Windows ou Linux.

Depuis macOS (menu Aller > Se connecter au serveur…), utilisez une URL de ce type :

smb://smbuser@IP-serveur-debian

Remplacez IP-serveur-debian par l’adresse IP ou le nom DNS de votre serveur. Utilisez l’identifiant smbuser et le mot de passe défini avec smbpasswd.


Bloc de commandes récapitulatif

Ci-dessous, un récapitulatif des principales commandes (à exécuter dans l’ordre logique présenté plus haut).

# 1) Installer Debian
# (installation standard, mise à jour, SSH, etc.)

# 2) Ajouter le disque dur externe
# 3) Le localiser
lsblk

# 4) Créer une partition sur /dev/sdb
echo ',;' | sfdisk /dev/sdb

# 5) Chiffrement LUKS
apt install cryptsetup -y
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 partage
ls /dev/mapper/

# 7) Btrfs
apt install btrfs-progs -y
mkfs.btrfs /dev/mapper/partage

# 8) Montage
mkdir -p /mnt/partage
mount /dev/mapper/partage /mnt/partage
df -h /mnt/partage

# 9) Samba
apt install samba -y
cp /etc/samba/smb.conf /etc/samba/smb.conf.BAK
mkdir /mnt/partage/share

# (voir plus haut pour le bloc smb.conf complet)

# 12) Groupe / utilisateur Samba
groupadd sambashare
useradd -M -G sambashare -s /usr/sbin/nologin smbuser
smbpasswd -a smbuser

# 13) Permissions dossier
chown root:sambashare /mnt/partage/share
chmod 2770 /mnt/partage/share

# 14) Redémarrer Samba
systemctl restart smbd nmbd

(Adaptez les noms de devices et les commandes de service si votre environnement n’est pas une Debian standard.)


Que faire en cas de redémarrage du serveur

À chaque redémarrage du serveur, le volume LUKS sera fermé et le système de fichiers Btrfs ne sera plus monté. Il faut donc manuellement déverrouiller et remonter le volume avant de relancer Samba, sous peine d’avoir un partage qui pointe sur du vide.

cryptsetup luksOpen /dev/sdb1 partage
mount /dev/mapper/partage /mnt/partage
systemctl restart smbd nmbd

Section avec Chemins de Fichiers

Quelques emplacements importants à garder en tête (ou dans un fichier README pour les futurs admins qui passeront derrière vous) :

Gardez ces chemins sous la main pour vérifier l’état du système, adapter les permissions ou ajuster la configuration en cas d’évolution (changement d’utilisateur, ajout d’un second partage, etc.).


Intégrité des données : scrubs Btrfs

Pour s’assurer de l’intégrité des données à long terme, il est nécessaire de lancer régulièrement des scrubs Btrfs. Cela permet de détecter et corriger les corruptions silencieuses, parce que le matériel n’est pas parfait et que les disques finissent toujours par faire n’importe quoi.

Lancez un premier scrub manuellement pour confirmer que tout fonctionne :

btrfs scrub start /mnt/partage && btrfs scrub status /mnt/partage

Pour automatiser un scrub chaque 1er du mois à 3h du matin, ajoutez la ligne suivante à /etc/crontab :

echo '0 3 1 * * root btrfs scrub start /mnt/partage' >> /etc/crontab
tail -1 /etc/crontab

(Adaptez l’horaire en fonction de vos périodes creuses, histoire de ne pas lancer un scrub en pleine journée quand tout le monde copie des fichiers.)


Conclusion

En suivant cette procédure, vous obtenez un serveur de fichiers basé sur Debian, avec un disque externe chiffré LUKS, un système de fichiers Btrfs avec checksums, et un partage Samba sécurisé en SMB 3.1.1 avec chiffrement obligatoire. Bref, quelque chose de nettement plus sérieux qu’un disque USB en FAT32 branché sur une box.

Pensez à surveiller régulièrement les journaux, l’état du disque et les rapports de btrfs scrub. Et surtout, gardez la passphrase LUKS dans un endroit sûr : sans elle, toutes ces données resteront définitivement inaccessibles, ce qui est à la fois le but et le risque de ce type de configuration.



↑ Haut de page