LINUX:Samba
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
[global]
- descriptions de la machine
workgroup = HOME server string = Server DB netbios name = serverdb
- sécurité, peut être fait via iptables
hosts allow = 127. 192.168.1.
- pour IPV4 seul
interfaces = lo enp0s25 bind interfaces only = Yes
- sécurité et authentification
security = user passdb backend = tdbsam guest account=smbuser
- 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
- journaux par machine; vide si log level non défini
- log file = /var/log/samba/log.%m
- log level = 1
admin users = root
- désactivation du chargement automatique des imprimantes partagées sous Linux
load printers=no
[homes]
comment = Home Directories browseable = no writable = yes valid users = %S recycle:directory_mode = 0700 create mask = 0700 directory mask = 0700
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,...),...