Samba a été créé par Andrew Tridgell pour permettre un partage des fichiers et des imprimantes compatible avec Windows.
Il a utilisé un analyseur de paquet pour comprendre le fonctionnement du protocole SMB.
Samba utilise donc le protocole SMB (CIFS) comme le fait Windows.
Ce n’est pas Windows qui apprend à parler Linux mais le contraire: Linux parle le Windows.
Le résultat fonctionne très bien et est gratuit.
Le protocole SMB nécessite l’authentification des utilisateurs pour donner accès au partage.
Différentes méthodes existent pour gérer l’authentification telle que Active Directory, une base de données Samba ou /etc/passwd
.
Nous travaillerons avec une base de données locale (nous sommes en mode usagers), Samba offre deux possibilités :
/etc/passwd
qui référence /etc/shadow
est utilisé
/etc/samba/sambapsswd
Il faudra donc un compte Unix pour chaque compte Windows, dans une configuration de base pour avoir une correspondance lorsqu’un utilisateur Windows se connecte.
Samba, est une application client/serveur.
La partie cliente permet à un Linux d’accéder à des partages sur des serveurs Windows.
La partie serveur permet de créer des partages sur des machines Linux qui seront accessibles par des machines Windows.
Serveur | Client |
---|---|
smbd service fournissant l’authentification | smbclient interface de transfert de fichiers |
nmbd montre les service Samba, dans le voisinage réseau par exemple | smbmount pour monter les systèmes de fichiers distants |
smbumount pour démonter les systèmes de fichiers distants |
SMB (Server Message Block)
SMB est un protocole créé par IBM en 1985 puis développé par Microsoft.
Il est utilisé pour le partage de fichiers et d’imprimantes (et d’autres ressources).
Il repose sur NetBIOS et TCP/IP dans beaucoup d’environnement mais peut aussi reposer sur d’autres protocoles de transport comme IPX ou NetBEUI.
SMB a évolué vers CIFS (Common Internet File System) en 1996 puis vers SMB 2 en 2006 et SMB 3 en 2012.
C’est de ce protocole que vient le nom de Samba.
NMB (Netbios Message Block)
Lorsque plusieurs serveurs sont présents sur le réseau, il faut que que les utilisateurs puissent naviguer vers les différents partages.
Pour cela, le protocole NMB a été créé, il permet d’afficher les différents ordinateurs Windows dans le voisinage réseau.
Chaque ordinateur envoie des informations le concernant en broadcast ce qui permet aux autres ordinateurs de les afficher dans le voisinage réseau.
Avec l’augmentation de taille des réseaux, ce protocole ne pouvait plus fonctionner car le broadcast ne passe pas les routeurs.
Pour palier à ces problèmes, les protocole WINS a été mis en place par Microsoft.
Un serveur WINS contient une base de données permettant de faire correspondre des noms NetBIOS à des adresses IP.
Au lieu d’utiliser le broadcast pour trouver les adresses IP et les machines sur le réseau, un client peut interroger le serveur WINS pour obtenir ces informations.
Ceci permet de contourner les limitations de NetBIOS dans le cas de routeurs ne laissant pas passer le broadcast.
Deux paquets doivent être installés: samba-client et samba-common.
Installation:
$ dnf install samba-client samba-common
Deux paquets à installer: samba et samba-common
Installation:
$ dnf install samba samba-common
Pour démarrer le service:
$ systemctl start smb nmb
(pensez à le configurer pour qu’il démarre automatiquement)
Toute la configuration du serveur se fait dans le fichier /etc/samba/smb.conf
(faites une sauvegarde du fichier avant de la modifier)
Il contient les différents partage de la machine et la configuration globale du serveur.
Il est divisé en sections. Chaque section commence par […..]
Les #
sont des commentaires.
Ensuite les proprités sont décrites par des couples propriété/valeur:
Propriété = Valeur
Par défaut, trois sections existent:
[global]
: configuration globale du serveur.
[homes]
: partage des répertoires personnels.
[printers]
et [print$]
: pour le partage des imprimantes.
[global]
workgroup = MONGROUPE
netbios name = MONSERVEUR
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
Le mode usager de Samba correspond au mode groupe de travail.
Le serveur Samba n’appartient pas à un domaine et les utilisateurs doivent être présent sur chacune des machines du groupe de travail.
Les options pour le mode usager sont les suivantes:
workgroup = MONGROUPE
netbios name = MONNOM
security = user
Pour partager un répertoire quelconque on ajoute une nouvelle section portant le nom de la ressource partagée (attention: le répertoire /data doit être créé avant):
[data]
path = /data
comment = Le repertoire data
browseable = yes
writable = yes
valid users = toto,tutu,titi
Après avoir ajouter ou modifier la configuration, il est possible de la tester la configuration avec l’outil testparm
qui vérifie la syntaxe de votre fichier smb.conf
.
Il est grandement conseillé de l’utiliser à chaque modification.
[axel@noeud ~]$ testparm Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[homes]" Processing section "[printers]" Processing section "[print$]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] printcap name = cups security = USER workgroup = SAMBA idmap config * : backend = tdb cups options = raw [homes] browseable = No comment = Home Directories inherit acls = Yes read only = No valid users = %S %D%w%S [printers] browseable = No comment = All Printers create mask = 0600 path = /var/tmp printable = Yes [print$] comment = Printer Drivers create mask = 0664 directory mask = 0775 force group = @printadmin path = /var/lib/samba/drivers write list = @printadmin root
Pour que la configuration soit prise en compte:
$ smbcontrol all reload-config
Il faut ensuite donner les droits aux utilisateur du système d’utiliser Samba.
Pour ceci on leur crée un mot de passe Samba grâce à l’utilitaire smbpasswd.
Il faut que l’utilisateur existe sur la machine Linux avant de pouvoir lui ajouter un mot de passe Samba.
$ smbpasswd -a axel
Si un utilisateur n’a pas été configuré pour accéder au serveur, ça ne fonctionnera pas.
Le client Linux peut donc maintenant accéder à des ressources sur un serveur Linux utilisant Samba ou à des ressources partagées sur des postes Windows.
Vous pouvez donc utiliser le client smbclient qui permet de vérifier l’existence du serveur Samba et de lister ses partages.
[axel@noeud ~]$ smbclient -L localhost -U axel Enter SAMBA\axel's password: Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers IPC$ IPC IPC Service (Samba 4.8.3) axel Disk Home Directories Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- -------
Une fois les partages identifiés, il est possible de se connecter au partage et de télécharger ou téléverser des fichiers de façon similaire à FTP.
[axel@noeud ~]$ smbclient //localhost/axel -U axel Enter NOEUD\axel's password: Try "help" to get a list of possible commands. smb: \>
Le ?
permet d’afficher la liste des commandes.
smb: \> ? ? allinfo altname archive backup blocksize cancel case_sensitive cd chmod chown close del deltree dir du echo exit get getfacl geteas hardlink help history iosize lcd link lock lowercase ls l mask md mget mkdir more mput newer notify open posix posix_encrypt posix_open posix_mkdir posix_rmdir posix_unlink posix_whoami print prompt put pwd q queue quit readlink rd recurse reget rename reput rm rmdir showacls setea setmode scopy stat symlink tar tarmode timeout translate unlock volume vuid wdel logon listconnect showconnect tcon tdis tid utimes logoff .. ! smb: \>
Les utilitaire étaient smbmount et smbumount mais ils ne sont plus supportés dans les nouvelles versions.
Maintenant on utilise
mount -t cifs -o user=toto //serveur/partage /chemin
ou
mount.cifs -o user=toto qui sont identiques.
Notez dans la commande précédente qu’il n’y avait pas besoin de mettre un nom d’utilisateur.
C’est parce que les utilisateurs sur les deux machines ont le même nom.
L’utilisateur de la machine cliente est utilisé pour l’authentification sur le serveur.
Il faut juste entrer le mot de passe correspondant à cet utilisateur sur le serveur.
La commande “mount” seule permet de vérifier que le montage a fonctionné.
Le répertoire /mnt
contient maintenant ce qu’il y a dans le partage sur le serveur Windows:
Pour accéder à un serveur Linux Samba depuis un client Linux, il est aussi possible d’utiliser l’explorateur de fichiers Linux.
Plusieurs possibilités:
Par le voisinage réseau:
La commande net view:
Pour que les mots de passe utilisés par Samba soient compatibles avec ceux de Windows, il faudra configurer un mot de passe pour chacun des utilisateur configuré sur Linux en utilisant smbpasswd.
Pour ajouter un utilisateur qui n’était pas encore configuré pour utiliser Samba:
$ smbpasswd -a axel
Pour modifier le mot de passe:
$ smbpasswd axel
/ Pour désactiver un utilisateur:
$ smbpasswd -d axel
Pour le ré-activer:
$ smbpasswd -e axel
Pour le supprimer:
$ smbpasswd -x axel
Vous aurez besoin de 2 machines Linux et un client Windows.
Une machine Linux sera le serveur SMB (contiendra les partages), une machine Linux sera le client SMB pour accéder aux partages et la machine Windows servira de client SMB opur accéder au partage de la machine Linux.
Sur un serveur Linux, créez un répertoire /Informatique et partagez le à l’aide de Samba en mode usager.
Donnez les droits d’accès à ce partage aux utilisateur Neil Armstrong et Albert Einstein.
Le groupe de travail du serveur Linux sera Groupe.
Testez la connexion à partir d’une autre machine Linux et à partir de la machine Windows.
NB: Pour que le serveur Samba fonctionne, il doit être capable de résoudre son propre nom (fichier /etc/hosts) et selinux doit être désactivé.
Créez un partage sur un poste Windows.
Accédez au partage Windows depuis un des postes Linux en utilisant:
smbclient
mount.cifs
Pour voir les ordinateurs dans le voisinage réseau, vous devrez activer la fonctionnalité dans le panneau de configuration de Windows.