« LINUX:Samba » : différence entre les versions

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 199 : Ligne 199 :


==Création des utilisateurs==
==Création des utilisateurs==
Le type de sécurité d'authentification choisi est "user". Cet authentifiction est basée sur la gestion des utilisateurs et groupes Unix. Comme dans d'autres systèmes, nous avons les utilisateurs et d'autre part des groupes qui rassemblent les utilisateurs par équipe. On peut avoir plusieurs groupes et un utilisateur  peut appartenir à plusieurs groupes.
Le type de sécurité d'authentification choisi est "user". Cet authentification est basée sur la gestion des utilisateurs et groupes Unix. Comme dans d'autres systèmes, nous avons les utilisateurs et d'autre part des groupes qui rassemblent les utilisateurs par équipe. On peut avoir plusieurs groupes et un utilisateur  peut appartenir à plusieurs groupes.


Sous Linux, quatres fichiers sont concernés:
Sous Linux, quatres fichiers sont concernés:
Ligne 209 : Ligne 209 :
** le fichier "/etc/shadow" qui contient le mot de passe éventuel de ces utilisateurs
** le fichier "/etc/shadow" qui contient le mot de passe éventuel de ces utilisateurs


La création des groupes et des utilisateurs peut se faire par commande. Nous avons préféré intervenir directement dans les fichiers et les répertoires. Ces fichiers sont manipulables via un éditeur de texte (pas un traitement de texte !!!).




===Groupes===
Suivant notre exemple, nous avons besoin d'un groupe qui regroupe tous nos utilisateurs concernés par Samba: le groupe "users". Habituellement ce groupe existe déjà.
Voici son entrée dans le fichier "/etc/group":
----
  users:x:100:
  users:x:100:
----
Et dans le fichier "/etc/gshadow":
----
users:::
----
Dans le fichier "group", il y a 4 zones:
# le nom du groupe, ce nom doit être unique
# ancienne zone du mot de passe déplacé pour des raisons de sécurité vers le fichier "gshadow"; comporte un "x"
# le n° de groupe (GID), ce n° doit être unique
# la liste des noms d'utilisateurs qui appartiendraient à d'autres groupes que leur principal
'''Attention''': si vous changez le n° de groupe déjà utilisé, vous devrez adapter les n° de groupe des utilisateurs concernés dans le fichier "/etc/passwd" et revoir tous les fichiers et répertoires de votre système pour adapter ce changement. A EVITER ou à faire en toute connaissance de cause, par exemple quand c'est groupe créé par vous-même et à utilisation réduite.
Dans le fichier "gshadow", il y a 4 zones:
# le nom du groupe
# mot de passe du groupe, si cette zone est vide, il n'y a pas de mot de passe; s'il y a un mot de passe, lors du login sous Linux, ce mot de passe sera demandé en plus de celui de l'utilisateur.
# liste des noms d'utilisateurs ayant le rôle d'administrateur de ce groupe
# liste des noms d'utilisateurs du groupe
Il faut retenir le GID pour la suite.




users:::
===Utilisateurs===





Version du 12 octobre 2020 à 11:27

But

Samba est un serveur de fichiers et d'impression selon le protocole SMB. Ce protocole est utilisé principalement sous MS Windows. Nous allons l'utiliser comme serveur de fichiers pour un usage interne, privé.


Serveur ou PC

Normalement ce type de service est proposé par un serveur MS Windows. Mais nous n'avons pas nécessairement besoin d'un serveur Windows à licence couteuse.

Sur les stations de travail Windows, communément nommées PC, cette fonctionnalité peut être activée avec un nombre de sessions limitées et avec des fonctionnalités plus ou moins limitées en fonction du type de licences MS Windows. Pour la licence Windows Famille, cette fonctionnalité est très réduite par rapport à Windows Professionnel (Pro).

D'autre part, par définition, un serveur doit toujours être disponible. Or un PC peut être éteint, bloqué (écran bleu) ou surchargé (CPU, mémoire, disque,...) même temporairement en fonction de l'utilisation qu'en fait l'utilisateur, du programme qu'il utilise. Un serveur ne devrait pas avoir ces problèmes. Si sa charge augmente et progressivement atteint ses limites, il faut adapter le matériel (ex: ajouter un disque).

Un serveur doit avoir une adresse IP fixe au contraire des stations de travail qui, par définition, ont habituellement une adresse IP dynamique (DHCP) car elles sont appelées à se déplacer (portable) sur d'autres réseaux.

Un serveur Linux va faire l'affaire. Un vieux PC suffit. Faisons remarquer que dès qu'il est installé en base, il peut être géré à distance. Seul le boitier est nécessaire (CPU, mémoire, disques, carte réseau) ; la majorité des autres périphériques peuvent être éliminés; c'est le cas de l'écran, de la souris, du clavier. A ce stade, ils sont inutiles sauf dans les cas graves (erreur grave de modification de la configuration qui bloque la machine ou son accès, matériel défectueux,...).


SaMBa

Choix du type de sécurité

Samba met en oeuvre le protocole SMB de Microsoft. Il propose de nombreux types de sécurité.

En entreprise, on choisit de préférence la sécurité ADS (Active Directory Service) car on est confronté à de multiples sites (WAN) et de multiples serveurs de fichiers. Dans ce cas, soit on utilise un serveur Windows élevé au niveau Active Directory. Sous Linux il maintenant possible d'effectuer cette fonctionnalité avec les package FreeIPA ou 389-DS.

En privé, on n'a normalement besoin que d'un serveur dans un seul LAN avec un nombre limité d'utilisateurs. Dans ce cas, nous préconisons le type de sécurité "user".


Installation

On a besoin d'installer un package qui installera les dépendances nécessaires:

dnf install samba


Fichier de configuration

Le fichier de configuration de Samba est "/etc/samba/smb.conf".

Ce fichier comporte deux sections:

  • La section des paramètres globaux.
  • Le reste concerne chaque service de partage proposé.

Note: Il existe énormément de paramètres; vous pouvez les consulter à l'URL: https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html . Nous ne donnerons l'explication que pour un nombre très restreint de paramètres.


Section globale

Celle section est identifiée par la balise "[global]".

Tous les paramètres ont une valeur par défaut. Si on veut remplacer cette valeur par défaut, on la spécifie.

Cette section regroupe les paramètres du serveur mais aussi les paramètres par défaut pour tous les services de partage proposés par la suite. Ces paramètres de service peuvent être écrasés si nécessaire au niveau des paramètres spécifiques du service concerné.

Voici un exemple de configuration.

Les lignes commençant par un point-virgule sont des commentaires.

Nous la séparons en deux parties pour faciliter l'explication.

  • 1ère partie, paramètres globaux du serveur:

[global]
; description de la machine
   workgroup = HOME
   netbios name = serverdb
   server string = Serveur DB
; sécurité et authentification
   security = user
   passdb backend = tdbsam
   admin users = root
   guest account=smbuser
; sécurité d'accès réseau, peut être fait via iptables
   hosts allow = 127. 192.168.1.
; pour IPV4 seul
   interfaces = lo enp0s25
   bind interfaces only = Yes
; journaux par machine; vide si log level non défini
;  log file = /var/log/samba/log.%m
;  log level = 1
; désactivation du chargement automatique des imprimantes partagées sous Linux
   load printers=no

Quelques explications:

  • Description du serveur
    • workgroup=HOME: nom du groupe de travail ou du domaine (ex: HOME), il sera utilisé par la suite au niveau du Web Service Discovery (WSD)
    • netbios name=serverdb: nom de la machine; par défaut, c'est celui de la machine
    • server string: description du serveur
  • Sécurité - authentification
    • security=user: type de sécurité choisi ci-dessus
    • passdb backend=tdbsam: type de base de données utilisée pour stocker les paramètres des utilisateurs
    • guest account=smbuser: nom d'utilisateur Unix utilisé comme invité
    • admin users=root: nom d'utilisateur avec les droits administrateur; à utiliser avec précausions
  • Sécurité d'accès réseau
    • hosts allow: permettre l'accès aux machines des adresses IP fournies (127 ou 127.0.0.1 ou localhost) (192.168.1 ou 192.168.1.1 à 192.168.1.254). Ceci peut être défini au niveau du FireWall (voir ci-dessous)
  • Ecoute seulement sous IPV4
    • interfaces: liste des interfaces réseau accessibles
    • bind interfaces only=yes: couplé à l'option précédente, le serveur n'écoutera que sous IPV4. Utile pour un FireWall configuré seulement en IPV4
  • Journaux
    • log file=/var/log/samba/log.%m: les journaux sont créés par machine ("%m") à cet endroit.
    • log level=1: niveau de journalisation; si ce paramètre n'est pas déclaré avec un minimum de 1, les journaux restent vide.
  • Imprimante
    • load printers=no: désactivation du chargement automatique des imprimantes partagées sous Linux


  • 2ème partie, paramètres par défaut des services partagés (cette partie est également sous la section "[global]"):

; activation de la poubelle au niveau du serveur
   vfs objects = recycle
   recycle:repository = .recycle
   recycle:keeptree = no
   recycle:versions = no
   recycle:directory_mode = 0770
; définition des droits par défaut
   create mask = 0770
   directory mask = 0770

Quelques explications:

  • Activation de la poubelle au niveau du serveur pour chaque service; consulter l'URL: https://www.samba.org/samba/docs/current/man-html/vfs_recycle.8.html
    • vfs objects=recycle: le type d'objet gère la poubelle
    • recycle:repository=.recycle: nom du répertoire poubelle
    • recycle:keeptree=no: l'arborescence du fichier détruit n'est pas gardé
    • recycle:versions=no: Les différentes verions d'un fichier détruit ne sont pas gardées sauf la dernière
    • recycle:directory_mode=0770: droits d'accès utilisateur de style Unix de la poubelle et de son contenu (dans ce cas, tous les droits pour le propriétaire du fichier et les membres de son groupe)
  • Droits d'accès utilisateur de style Unix (ACL)
    • create mask=0770: droits d'accès utilisateur de style Unix à la création d'un fichier (dans ce cas, tous les droits pour le propriétaire du fichier et les membres de son groupe)
    • directory mask=0770: droits d'accès utilisateur de style Unix à la création d'un répertoire (dans ce cas, tous les droits pour le propriétaire du fichier et les membres de son groupe)


Section services

Toutes les autres sections autre que "[global]" qui suivent, correspondent chacune à un service de partage, fichiers ou imprimantes selon les cas.


Quelques explications préliminaires:

  • [photo]: nom du service partagé, par exemple "photo"; pour y accéder, on introduira dans la barre d'URL de l'explorateu de fichiers de MS Windows: "\\serverdb\photo", selon cet exemple
  • comment: description du service partagé
  • path: chemin Unix du répertoire de base du service partagé
  • browseable: si "yes", le service apparaît lors de l'affichage du contenu du serveur dans le voisinage réseau, sinon "no", il reste caché (sous MS Windows, si le nom de service est terminé par un dollard "$", il devient invisible.
  • read only: si "no", le contenu du service est modifiable, sinon "yes".
  • public: si "yes" le contenu du service est accessible à tous, sinon "no", le service n'est accessible qu'aux utilisateurs de l'option "valid users" ou valid groups".
  • valid users: liste des utilisateurs pouvant accéder au service, cet utilisateur deviendra propriétaire du fichier ou du répertoire sauf si l'option "force user" est spécifiée
  • force user: forcer le propriétaire Unix du fichier ou du répertoire au lieu de l'utilisateur nommé dans l'option "valid users"

Nous verrons à l'article suivant que l'utilisateur "smbuser" et les utilisateurs finaux, réellement attachés à une personne physique, appartiennent au même groupe Unix "users". Donc avec les droits Unix 0770, tous ces utilisateurs de ce groupe "users" ont un accès total ensemble.


Ce type de service "[homes]" est spécial. Cette fonctionnalité existe aussi sous MS Windows. Il ouvre un service au nom de l'utilisateur authentifié dont le chemin correspond à son espace défini sous Unix dans le fichier regroupant les utilisateurs Unix ("/etc/passwd") sauf si l'option "path" est spécifiée. La valeur "%S" définit la variable de remplacement par le nom du service Remarquez que les droits utilisateurs sont réduits au propriétaire.


[homes]
       comment = Home Directories
       path = /produc/utilisateur/%S
       browseable = no
       read only = no
       public = no
       valid users = %S
       recycle:directory_mode = 0700
       create mask = 0700
       directory mask = 0700


Ce service par contre, est ouvert à tous. Pour cette raison, les droits utilisateur Unix sont 0770 et pour faciliter la gestion, on force que ce soit l'utilisateur Unix "smbuser" qui en soit propriétaire. En cas de problème ou d'initialisation, deux commandes Unix peuvent régler le problème:

chmod -R 770 /produc/partage/famille
chown -R smbuser:users /produc/partage/famille

[famille]
      comment = Espace Famille
      path=/produc/partage/famille
      browseable = yes
      read only = no
      public = yes
      force user = smbuser


Dans cet exemple, le répertoire nommé contient les sources d'un logiciel WEB. On veut y avoir accès sans l'afficher à tous. Mais ces fichier doivent appartenir au process Apache, serveur WEB, d'où le propriétaire. Le développeur est ici "albert". Notons que cet exemple est présenter en tant qu'exemple mais ne doit pas être suivi à la lettre.


[waterbear]
       comment = WaterBear
       path=/web/waterbear
       browseable = no
       read only = no
       public = no
       force user = apache
       valid users = albert


Cet autre exemple permet l'accès à toute l'arborescence du système Linux avec les privilèges maximum. Notons qu'il est vivement conseillé de ne pas implémenter ce service.


[root]
       comment = Racine du systeme
       path = /
       browseable = no
       read only = no
       public = no
       force user = root
       valid users = root


Création des utilisateurs

Le type de sécurité d'authentification choisi est "user". Cet authentification est basée sur la gestion des utilisateurs et groupes Unix. Comme dans d'autres systèmes, nous avons les utilisateurs et d'autre part des groupes qui rassemblent les utilisateurs par équipe. On peut avoir plusieurs groupes et un utilisateur peut appartenir à plusieurs groupes.

Sous Linux, quatres fichiers sont concernés:

  • Groupes:
    • le fichier "/etc/group" pour la définition des groupes
    • le fichier "/etc/gshadow" qui contient le mot de passe éventuel de ces groupes
  • Utilisateurs:
    • le fichier "/etc/passwd" pour la définition des utilisateurs
    • le fichier "/etc/shadow" qui contient le mot de passe éventuel de ces utilisateurs

La création des groupes et des utilisateurs peut se faire par commande. Nous avons préféré intervenir directement dans les fichiers et les répertoires. Ces fichiers sont manipulables via un éditeur de texte (pas un traitement de texte !!!).


Groupes

Suivant notre exemple, nous avons besoin d'un groupe qui regroupe tous nos utilisateurs concernés par Samba: le groupe "users". Habituellement ce groupe existe déjà.

Voici son entrée dans le fichier "/etc/group":


users:x:100:

Et dans le fichier "/etc/gshadow":


users:::

Dans le fichier "group", il y a 4 zones:

  1. le nom du groupe, ce nom doit être unique
  2. ancienne zone du mot de passe déplacé pour des raisons de sécurité vers le fichier "gshadow"; comporte un "x"
  3. le n° de groupe (GID), ce n° doit être unique
  4. la liste des noms d'utilisateurs qui appartiendraient à d'autres groupes que leur principal

Attention: si vous changez le n° de groupe déjà utilisé, vous devrez adapter les n° de groupe des utilisateurs concernés dans le fichier "/etc/passwd" et revoir tous les fichiers et répertoires de votre système pour adapter ce changement. A EVITER ou à faire en toute connaissance de cause, par exemple quand c'est groupe créé par vous-même et à utilisation réduite.

Dans le fichier "gshadow", il y a 4 zones:

  1. le nom du groupe
  2. mot de passe du groupe, si cette zone est vide, il n'y a pas de mot de passe; s'il y a un mot de passe, lors du login sous Linux, ce mot de passe sera demandé en plus de celui de l'utilisateur.
  3. liste des noms d'utilisateurs ayant le rôle d'administrateur de ce groupe
  4. liste des noms d'utilisateurs du groupe

Il faut retenir le GID pour la suite.


Utilisateurs

smbuser:x:259:100:Utilisateur SMB:/dev/null:/dev/null
albert:x:1001:100:De Bast Albert:/home/albert:/sbin/nologin
monique:x:1002:100::/home/monique:/sbin/nologin
francoise:x:1003:100::/home/francoise/sbin/nologin
eric:x:1004:100::/home/eric:/sbin/nologin


smbuser:!:13557:0:99999:7:::
albert:!:17139:0:99999:7:::
monique:!:16823:0:99999:7:::
francoise:!:16823:0:99999:7:::
eric:!:16823:0:99999:7:::



Gestion des droits d'accès

Activer et lancer le service

Le service à lancer est SMBD. La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service. La troisième relance le service.

systemctl enable smb
systemctl start smb
systemctl restart smb

Notons que si on change un paramètre dans le fichier de configuration "/etc/samba/smb.conf", le service smbd relit régulièrement les paramètres de ce fichier et les met en application.


Configurer le mur de feu ou FireWall

Vous avez sûrement activé le FireWall du serveur. Comme c'est un service proposé, il faut ouvrir deux portes. Les ports TCP à ajouter sont 139 et 445. Dans l'exemple, l'adressage de notre LAN est 192.168.1.0 avec un masque de 255.255.255.0 ou de 24 bits. Nous utilisons IPTABLES; voici les lignes à ajouter:


-A INPUT -p tcp -m tcp --dport 139 -s 192.168.1.0/24 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -s 192.168.1.0/24 -j ACCEPT


Web Service Discovery Daemon ou WSDD

Introduction

Depuis MS Windows 10, le protocole SMB1 a été désactivé au profit de version plus récente SMB3. Habituellement Samba inclut un service NMB (processus mnbd) qui permet la découverte du serveur SMB dans le voisinage réseau de MS Windows. Avec la désactivation de SMB1, cette fonctionnalité disparaît. Le service "nmb" devient inutile et donc ne doit plus être lancé dans ce cadre. Cette fonctionnalité a été remplacée par le Web Service Discovery non encore implémenté dans Samba. Mais il existe sous Linux un package qui implémente cette fonctionnalité Web Service Discovery orientée SMB.


Installation

On a besoin d'installer un package qui installera les dépendances nécessaires:

dnf install wsdd


Paramétrage de WSDD

Les options de lancement peuvent être ajoutées dans le fichier "/etc/sysconfif/wsdd".

Voici un exemple de paramétrage:


OPTIONS=" -4 -w HOME -v -i enp0s25 "


Explication de ces options:

-4 : l'implémentation ne se fait que sous IPV4; utile si notre firewall n'agit que sous IPV4 et si on ne travaille que sous IPV4, ce qui est habituel sur un réseau local privé.
-w HOME : définit le groupe de travail de Samba; on le trouve dans le fichier de configuration de Samba "/etc/samba/smb.conf" sous le paramètre "WORKGROUP"; dans notre exemple, ce paramètre vaut "HOME".
-v : mode verbose
-v -v : mode debug
-i enp0s25 : interface réseau d'écoute; sur notre machine, elle se nomme "enp0s25"; habituellement, cette option peut être omise car par défaut, le service écoute sur tous les interfaces réseau sauf le loopback.


Activer et lancer le service

Le service à lancer est WSDD. La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service. La troisième relance le service.

systemctl enable wsdd
systemctl start wsdd
systemctl restart wsdd


Configurer le mur de feu ou FireWall

Vous avez sûrement activé le FireWall du serveur. Dans l'exemple, l'adressage de notre LAN est 192.168.1.0 avec un masque de 255.255.255.0 ou de 24 bits. Comme c'est un service proposé, il faut ouvrir diverses portes.

Il faut ouvrir un port UDP 3702. celui-ci est une communication multicast sur l'adresse 239.255.255.250. Cette partie sert à recueillir les informations du groupe.

D'autre part, au démarrage du service, celui-ci doit s'annoncer sur le réseau et rejoindre le groupe. Si le FireWall agit aussi en sortie, il faut aussi ouvrir ce port. En premier, on ouvre le port UDP 3702.

En parallèle, on doit ouvrir en sortie un port UDP aléatoire en dehors des ports d'écoute habituels. Ce second port sert à répondre aux demandes de présence par communication unicast.

Pour rechercher la tranche de ports libres où le service de réponse va puiser son port aléatoirement, on peut consulter le système avec la commande suivante:

cat /proc/sys/net/ipv4/ip_local_port_range

Dans l'exemple, la tranche est entre les ports 32768 et 60999.

Enfin, le port TCP 5357 est à ajouter. Il sert à l'échange du détail sur le matériel découvert.

Notons le refus des entrées sur le port 1900; les machines MS Windows communiquent aussi via ce port qui ne nous concernent pas.

Nous utilisons IPTABLES et au final,voici les lignes à ajouter:


-A INPUT -p tcp -m tcp --dport 5357 -s 192.168.1.0/24 -j ACCEPT
-A INPUT -p udp -m udp --dport 3702 -s 192.168.1.0/24 -d 239.255.255.250 -m pkttype --pkt-type multicast -j ACCEPT
-A INPUT -p udp -m udp --dport 1900 -d 239.255.255.250 -j DROP
-A OUTPUT -p udp -m udp --dport 3702 -d 239.255.255.250 -j ACCEPT
-A OUTPUT -p udp -m udp -d 192.168.1.0/24 --sport 32768:60999 -j ACCEPT


HOSTS ou DNS

Un dernier point mérite notre attention.

Supposons que notre serveur Linux se nomme "serverdb.home.dom" et pour le service SMB qu'il héberge "serverdb" et que son adresse IP fixe est "192.168.1.100". Un dossier de partage y est présent sous le nom "famille".

Il y a deux façon pour y accéder:

  • soit par l'adresse IP: \\192.168.1.100\famille
  • soit par son nom: \\serverdb\famille

Sous IP, pour pouvoir communiquer avec un hôte distant par son nom et non pas par son adresse IP, il faut utiliser une table de correspondances. Au niveau d'Internet, ce service se nomme Domain Name Service (DNS). Mais notre serveur privé de notre réseau local est inconnu d'Internet.

Deux solutions s'offrent à nous:

  • créer un serveur DNS privé dans notre réseau privé et configurer tous les périphériques clients de notre réseau privé afin qu'ils puissent l'utiliser. Cette solution est implémentée d'office dans les entreprises ayant beaucoup de machines en réseau.
  • adapter sur tous les postes de travail (PC), la table statique prévue à cet effet. Sous MS Windows, elle se situe sous le nom "c:\windows\system32\drivers\etc\hosts". (Sous Linux, elle se nomme "/etc/hosts") Ce fichier est un simple fichier texte à éditer avec un éditeur de texte (surtout pas avec un traitement de texte tel MS Word).

Dans notre cas, nous n'avons que peu de machines et la seconde solution est plus simple. Pour la seconde solution, on ajoute dans ce fichier "hosts", la correspondance sous la forme "<adresse IP> <noms de la machine>".

Suivant notre exemple, on ajoute la ligne:


192.168.1.100   serverdb  serverdb.home.dom

Notons que cette remarque est valable également pour tous services offerts par votre serveur privé. Par exemple un serveur WEB (Apache,...), un serveur de messagerie (postfix, dovecot,...),...




->retour au menu de Linux