11 - Samba en mode usagers

Introduction

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

Le protocole SMB

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.

Le protocole NMB

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.

Le protocole WINS

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.

Installation

Installation du client

Deux paquets doivent être installés: samba-client et samba-common.

Installation:

$ dnf install samba-client samba-common

Installation du serveur

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)

Configuration de SAMBA (Serveur)

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.

La section [global]

[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

La section [homes]

[homes]	
comment = Home Directories
browseable = no	
writable = yes

La section [printers]

[printers]	
comment = All Printers	
path = /var/spool/samba	
browseable = no	
guest ok = no	
writable = no	
printable = yes

Le mode usager

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

Partage d’un répertoire

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.

Accès à Samba depuis Linux (client)

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: \> 

Monter la ressource partagée

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.

Accès à Samba depuis Windows (client)

Plusieurs possibilités:

  • Par le voisinage réseau:

  • La commande net view:

Les mots de passe

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

Formatif 1

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é.

Formatif 2

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.