Cet article fait partie d’une série :
- #1 − Introduction
- #2 − Configuration du système de fichier avec ZFS
- #3 − Partage de fichier avec Samba
- #4 − Relais mail
- #5 − Surveillance des disques
- #6 − Services avec Docker & Compose
Introduction
Le partage de fichier en réseau est sans aucun doute la partie la plus importante d’un NAS.
Ainsi, après avoir créé les espaces de stockage à proprement parler dans l’article précédent, nous allons ici mettre en place leur partage :
- Installation et configuration du service Samba,
- Configuration des partages de fichiers communs et par utilisateurs (homes),
- Création des utilisateurs Samba.
Installation
$ sudo apt install samba
Configuration
Permissions
Les permissions doivent être ajustées pour permettre aux utilisateurs d’accéder aux répertoires partagés et en modifier le contenu.
- Pour cela, il faut donner les droits d’écriture au répertoire racine des partages au groupe
: $ sudo chgrp -R users /tank/* - Et parametrer le SGID sur les partages
$ sudo chmod 2775 /tank/{videos,photos,books,misc,music,backups} $ sudo chmod 2750 /tank/users
Compléments d’information sur la configuration du SGID :
- https://www.thegeekdiary.com/what-is-suid-sgid-and-sticky-bit/
- https://www.redhat.com/sysadmin/suid-sgid-sticky-bit
- https://www.howtogeek.com/656646/how-to-use-suid-sgid-and-sticky-bits-on-linux/
Général
-
Faire une sauvegarde du fichier configuration du serveur Samba d’origine :
$ sudo mv /etc/samba/smb.conf{,.orig} -
Et créer un nouveau fichier vide
$ sudo vim /etc/samba/smb.conf[global] # Server information netbios name = nastest workgroup = WORKGROUP server string = %h Fileserver fruit:aapl = yes # Logging logging = syslog # Authentication security = user passdb backend = tdbsam map to guest = Bad Password guest account = nobody 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 # Name resolution: make sure \\NETBIOS_NAME\ works wins support = yes local master = yes domain master = yes preferred master = yes # Don't load printers load printers = no printing = bsd printcap name = /dev/null disable spoolss = yes # Extra options for Sonos (non recommandé) ntlm auth = ntlmv1-permitted-
Information sur le serveur
-
netbios name = nastest: nom d’hôte du serveur, -
workgroup = WORKGROUP: le workgroup dans lequel le serveur apparaît, -
server string = %h Fileserver: le nom qui apparaîtra dans les gestionnaires d’imprimante ou dans la navigation réseau. -
fruit:aapl = yes: activation du module d’interopérabilité avec Netatalk et les implémentations Apple de SMB.
-
-
Traçabilité
logging = syslog: défini le moteur de traçabilité.
-
Authentification
security = user: modèle de sécurité pour les serveurs Samba en standalone, qui définit que les utilisateurs doivent être authentifiés pour accéder aux ressources,passdb backend = tdbsam: défini le moteur pour stocker les utilisateurs et leurs mots de passe,map to guest = Bad Password: défini que les tentatives authentification échouées pour mauvais mot de passe seront renvoyées vers le compte guest,guest account = nobody: défini le nom d’utilisateur du compte guest,obey pam restrictions = yes: défini que Samba doit suivre les directives du module PAM pour les comptes et sessions,unix password sync = yes: défini que Samba doit tenter de synchroniser le mot de passe système lors d’un changement du mot de passe Samba (l’inverse n’est pas possible),passwd program = /usr/bin/passwd %u: défini le chemin du binaire utilisé pour réaliser le changement du mot de passe système,passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .: défini la séquence de changement de mot de passe système,pam password change = yes: défini de préférer le changement de mot de passe par PAM.
-
Résolution de nom (p. e. \NETBIOS_NAME)
wins support = yes: défini que le serveur Samba jouera le rôle de serveur WINS pour fournir un service de résolution de nom NetBIOS aux clients (nmbd),local master = yes: défini que le serveur doit être le master nmbd sur le réseau,domain master = yes: défini que le serveur doit être le master nmbd pour le domaine,preferred master = yes: défini que nmbd est le master préféré pour son workgroup.
-
Ne pas charger les imprimantes
load printers = no: ne pas charger les imprimantes,printing = bsd: défini comment les informations de statut des imprimantes est interprété par le système.printcap name = /dev/null: redéfini leprintcap nameutilisé par défaut par le système,disable spoolss = yes: désactive le support de SPOOLSS pour Samba.
-
Options supplémentaires pour Sonos (qui ne supporte pas SMBv3 - non recommandé pour des raisons de sécurité)
server min protocol = NT1: défini la version minimum que le serveur autorise pour les clients,ntlm auth = ntlmv1-permitted: autorise l’authentification avec NTLMv1 (et supérieur), qui est obsolète.
-
Partages
Voici à quoi ressemble un bloc de configuration pour un partage (à ajouter à la fin du fichier /etc/samba/smb.conf) :
[videos]
comment = Videos
path = /tank/videos
public = True
guest ok = True
browseable = True
writable = True
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
[videos]: nom du partage,comment: commentaire, pour apporter des précisions au nom du partage par exemple,path: chemin du répertoire partagé,public: le partage est accessible publiquement,guest ok: les invités sont autorisés à accéder au partage (c.-à-d. aucun compte n’est nécessaire),browseable: le partage est visible depuis le réseau,writable: il est possible d’écrire dans le répertoire partagé,create mask&force create mode: les permissions par défaut lors de la création de fichiers,directory mask&force directory mode: les permissions par défaut lors de la création de répertoires.
Partages utilisateurs
Les répertoires utilisateurs (ou home folders) sont gérés un peu différemment. Un seul partage est créé, mais avec une variable permettant à chaque utilisateur d’accéder à son propre répertoire.
Voici à quoi ressemble le bloc de configuration du partage :
[homes]
comment = users share
path = /tank/users/%S
valid users = @users
browseable = No
writable = True
create mask = 0600
force create mode = 0600
directory mask = 0700
force directory mode = 0700
[homes]: nom du partage,comment = users share: commentaire, pour apporter des précisions au nom du partage par exemple,path = /tank/users/%S: chemin du répertoire partagé,%Sest une variable pour le nom d’utilisateur,valid users = @users: défini la liste des utilisateurs pouvant accéder à ce partage, en l’occurrence les membres du groupeusers,browseable = No: le partage n’est pas visible depuis le réseau,writable = True: il est possible d’écrire dans le répertoire partagé,create mask = 0600&-force create mode = 0600: les permissions par défaut lors de la création de fichiers,directory mask = 0700&force directory mode = 0700: les permissions par défaut lors de la création de répertoires.
La configuration complète est disponible en annexe (en bas de l’article).
Vérification
Il est ensuite possible de tester la configuration (pour vérifier si elle contient des erreurs) avec la commande suivante :
$ sudo testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
Application
Pour appliquer les changements de configuration réalisés, il est nécessaire de redémarrer le service Samba :
$ sudo systemctl restart smbd.service
Utilisateurs
-
Si l’utilisateur n’est pas déjà présent dans le système, il sera nécessaire de le créer (sinon passer à l’étape 3) :
$ useradd -M -s /sbin/nologin <utilisateur>- L’option
-Mpermet de ne pas créer de répertoire utilisateur dans/home, - L’option
-s /sbin/nologinindique que cet utilisateur n’aura pas accès à un shell.
- L’option
-
Activer le compte en lui créant un mot de passe (qui ne sera pas utilisé, car l’utilisateur n’a pas de shell valide, mais il est nécessaire d’activer le compte pour samba) :
$ passwd <utilisateur> -
Ajouter l’utilisateur dans le groupe
users(si ce n’est pas déjà le cas) :$ sudo usermod -aG users brice -
Enfin pour créer le compte Samba :
$ sudo smbpasswd -a <utilisateur> [sudo] Mot de passe de brice : New SMB password: Retype new SMB password: Added user brice.Il peut être le même que pour le compte système.
-
Il est enfin nécessaire de créer le répertoire des utilisateurs et d’en ajuster le propriétaire et ses permissions :
$ sudo mkdir /tank/users/brice $ sudo chown brice: /tank/users/brice $ sudo chmod 700 /tank/users/brice
Bonus :
Pour modifier un mot de passe Samba, on peut utiliser la commande suivante :
$ sudo smbpasswd <utilisateur>
Sources :
- https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server
- https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs
- https://wiki.samba.org/index.php/Windows_User_Home_Folders
- https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html
Vous pouvez aller à l’article suivant pour poursuivre la construction du NAS : #4 − Relais mail.
Annexe 1 : Configuration complète
[global]
# Server information
netbios name = nastest
workgroup = WORKGROUP
server string = %h Fileserver
fruit:aapl = yes
# Logging
logging = syslog
# Authentication
security = user
passdb backend = tdbsam
map to guest = Bad Password
guest account = nobody
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
# Name resolution: make sure \\NETBIOS_NAME\ works
wins support = yes
local master = yes
domain master = yes
preferred master = yes
# Don't load printers
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
# Extra options for Sonos (non recommandé)
ntlm auth = ntlmv1-permitted
[videos]
comment = Videos
path = /tank/videos
public = True
guest ok = True
browseable = True
writable = True
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
[music]
comment = Music
path = /tank/music
public = True
guest ok = True
browseable = True
writable = True
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
[books]
comment = Books
path = /tank/books
public = True
guest ok = True
browseable = True
writable = True
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
[photos]
comment = Photos
path = /tank/photos
public = True
guest ok = True
browseable = True
writable = True
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
[misc]
comment = Misc
path = /tank/misc
public = True
guest ok = True
browseable = True
writable = True
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
[backups]
comment = Backups
path = /tank/backups
browseable = True
writable = True
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
valid users = @users
[homes]
comment = users share
path = /tank/users/%S
valid users = @users
browseable = No
writable = True
create mask = 0600
force create mode = 0600
directory mask = 0700
force directory mode = 0700