Table des matières

Installer et configurer samba

Introduction

Qu'est-ce que samba ?

Samba est un logiciel libre sous licence GPL, permettant de supporter le protocole SMB/CIFS le partage de ressources réseau.

Le partage réseau a été développé par IBM en 1985 pour OS/2 et s'appelait alors LAN Manager. Il a ensuite été mis en avant par Microsoft sous le nom de SMB pour en faire un tout nouveau protocole de partage. Il a été appelé aussi CIFS (Common Internet File System ) entre 1998 et 2006, et a encore été renommé sous le nom de SMB2 pour la sortie de Windows Vista et conserve ce nom jusqu'à Windows 8.

Ces termes sont à connaître car ils apparaissent pour certains points de la configuration de samba, qui se charge de compatibilité avec ce protocole de partage réseau mais aussi avec différents produits Microsoft, comme NetBios (TCP/IP) et le nommage wins et maintenant DNS, et MSRPC (appel de procédure à distance), et il peut aussi être utilisé comme contrôleur de domaine “actif directory”.

Le protocole SMB/CIFS est toujours un logiciel propriétaire, et ces spécifications étaient donc fermées au début. Mais pour des raisons d'intéropérabilité, suite à un procès, Microsoft a été contraint d'ouvrir certaines de ses spécifications qui ont été distribuées par le MSDN (open Specifications Developer Center).

Samba a donc été créé afin de rendre possible la communication entre différents systèmes d'exploitations d'un même réseau, mais on peut aussi l'utiliser pour le partage de Linux à Linux.
On le doit d'abord aux travaux de rétro-ingénierie d'Andrew Tridgel qui est son principal développeur. Depuis 2007, et la fermeture des spécifications SMB le développement et les performances de samba ne cessent de se développer.

Configuration générale du serveur debian

Prenons, pour exemplifier une configuration simple, une machine virtuelle sur laquelle il a été installé un serveur Debian.

hostname
debian-serveur
Attention à la confusion entre serveur (samba ou autre) installé sur un système qui reste malgré tout “l'hôte”, on va dire de ce système.
ip a s eth0
<...>
192.168.0.14/24 brd 192.168.0.255
<...>
Il s'agit d'une machine virtuelle avec accès par pont dont l'adresse IP a été préalablement fixée par le serveur DHCP au niveau du FAI.
echo $USER
hypathie

Pré-requis

Création d'un compte user pour le partage de fichier

addgroup --system sharing

Création d'un utilisateur système correspondant à l'utilisateur samba

adduser --system sharing --ingroup sharing

Mot de passe système unix

passwd sharing

Création d'un fichier partageable

mkdir /home/sharing/public

Mise en place des droits sur le répertoire et ses fichiers partageables

chown -R sharing:sharing /home/hypathie/
chmod -R 770 /home/sharing/
Pour donner les droits récursivement à /home/sharing/public

Installation de samba serveur

apt-get update
apt-get install samba

Configuration simple pour partage de fichiers entre Windows et Debian

Les fichiers samba

cd /etc/samba/ && ls</code
<code>dhcp.conf  gdbcommands	smb.conf 

Le fichier de configuration est smb.conf.

Sauvegarde de smb.conf

mv smb.conf smb.conf-OLD

Édition de smb.conf

vim smb.conf
/etc/samba/smb.conf
[global]
 
 
   workgroup = WORKGROUP         # par défaut et à laisser tel quel
   netbios name = debian-serveur # nom du serveur visible sur le poste client Windows
 
   server string = %h SAMBA     # nom du serveur samba
   path = /home/sharing
   valid user = sharing
 
#### Networking ####
 
   interfaces = 192.168.0.14 eth0
 
   hosts allow = 192.168.0. 127.
 
 
####### Authentication #######
 
   security = user
   encrypt passwords = true
 
########## Printing ##########
 
;   printing = bsd
;   printcap name = /etc/printcap
 
   printing = cups
   printcap name = cups
 
   use client driver = yes
 
 
#======================= Share Definitions =======================
 
[homes]
   comment = Home Directories
   browseable = no
 
# next parameter to 'no' if you want to be able to write to them.
   read only = yes
 
   create mask = 0700
 
   directory mask = 0700
 
# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# The following parameter makes sure that only "username" can connect
# to \\server\username
# This might need tweaking when using external authentication schemes
   valid users = %S
 
 
[sharing]
path = /home/sharing/
browseable = yes
writeable = yes
valid users = sharing
write list = sharing
create mask = 0770
directory mask = 700
Le fichier /etc/samba/smb.conf est constitué par section.
Les sections principales sont :
  • [global] : paramètres généraux (indiqué par un G dans le man).

Les paramètres obligatoires sont :

workgroup = MON-GROUPE  
Et il faut aller sur Windows créer un groupe du même nom
ou utiliser WORKGROUP qui le nom par défaut sur Windows
netbios name = Nom-du-serveur-samba
server string = serveur %h  
security = user        # mise en place de la politique d'authentification
encrypt passwords = true
À savoir sur security : Le mode “user” est le plus intéressant, mais il y a d'autres modes d'authentification que la mise en place d'un mot de passe utilisateur chiffré.
Le mode domain passe par workgroup qui définit un contrôleur de domaine.
Le mode “server” a été déprécié, il ne faut pas l'utiliser.
Il y a aussi le ADS qui se base sur Active Directory. Il faut alors définir un “realm1) et le mot de passe du serveur d'authentification 2)
  • [partage] : nom d'un partage (tout les paramètres indiqués par un S dans le man, également compatibles avec la section global).

On l'a appelé dans l'exemple [hypathie]. Les paramètres essentiels sont :

path = /chemin/de_ce_répertoire/à_partager_sur_le_réseau
Attention aux droits placés sur le répertoire et ses sous-répertoires et fichiers
Il est bon pour la sécurité de mettre en place une politique de partage :
lecture / écriture avec read only :
No ou Yes pour ne pas permettre ou permettre l'écriture.
Restriction de l'écriture à un utilisateur ou une liste précisée avec
read only = Yes et en dessous write list = user1, user2, …
Restriction de l'accès au partage à un ou plusieurs utilisateur ou à un groupe :
valid users = user1, user2, @group1101
Pour forcer tous les utilisateurs à être reconnu comme un seul utilisateur du système : force user = nobody
et force group = nogroup.
Comme cela si quelqu'un vient sur le partage, il a les droits de tout autre utilisateur, et ne peut aller à la racine.
Les droits au niveau de samba:
Les droits UNIX surchargent les droits samba, mais samba a besoin qu'on lui spécifie les droits appliqués par défaut sur les fichiers de partages créés.
Droits à la création des fichiers
Par exemple pour lecture, écriture, exécution pour utilisateur et son groupe, et lecture, exécution pour les autres :
create mask = 0775

> Droits (POSIX) à la création des dossiers
Rappel, pour se déplacer dans un répertoire, c'est l'exécution, pour créer, supprimer renommer un fichier d'un répertoire niveau dossier, c'est l'écriture, et la lecture c'est l'ouverture d'un fichier.
Pour lecture, écriture, exécution pour utilisateur seulement:

create mask = 700
  • [printers] et [print$] : partage d'imprimantes
  • [homes] : partage du répertoire personnel des utilisateurs

Variables de substitution du fichier de configuration smb.conf

  • %u. Nom d'utilisateur pour le service courant.
  • %g. Nom du groupe primaire de l'utilisateur %u.
  • %U. Nom d'utilisateur pour le service courant. Ceci est le nom demandé par l'utilisateur, pas forcement le nom utilisé par Samba (cf. mappage sur autre utilisateur)
  • %G. Nom du groupe primaire de l'utilisateur %U.
  • %H. Répertoire personnel (home) de %u.
  • %v. Version de Samba.
  • %S. Le nom du service courant (par exemple le nom du partage).
  • %P. Le répertoire principal du service courant.
  • %h. Le nom Internet de la machine (hostname) sur laquelle tourne Samba.
  • %m. Le nom Netbios de la machine cliente.
  • %L. Le nom Netbios du serveur Samba. C'est le nom utilisé par le client, peut être utile pour différencier le comportement de Samba avec plusieurs noms Netbios.
  • %R. Niveau de protocole utilisé (CORE, COREPLUS, LANMAN1, LANMAN2 ou NT1).
  • %d. Numéro de process du processus serveur courant.
  • %a. Architecture du système client. Reconnait actuellement Samba, WfWg, WinNT et Win95. Le reste renvoie UNKOWN
  • %I. Adresse IP de la machine cliente
  • %T. La date et l'heure courante
  • %$(envar). La valeur de la variable d'environnement envar.
  • %N. Nom du serveur hébergeant le répertoire personnel (home) NIS.
  • %p. Chemin du répertoire personnel NIS, obtenu à partir de l'entrée NIS auto.map.

Le caractère % permet de substituer les variables.

Par exemple, si dans [global] de cet exemple on met :

server string serveur %h : samba %v

Il s'affichera “serveur debian-1 : samba la version de samba”.

Références :

Vérifier la syntaxe du fichier de configuration

testparm smb.conf

Ré-initialisation de samba

service restart samba

Ajout d'un compte user dans samba

Ce compte doit correspondre à un compte utilisateur existant du système debian. Il faut en créer pour des raison de sécurité.
La commande suivante se charge d'en créer un dans les données de samba.
Il faut donner un mot de passe pour le compte samba, qui est différent du mot de passe UNIX qui a été demandé quand on a utilisé la commande adduser nouvel-utilisateur.

smbpasswd -a sharing
  • Pour lister les utilisateurs samba :
smbpasswd -L
  • Pour désactiver un utilisateur :
smbpasswd - d utilisateur
  • Pour supprimer un utilisateur :
smbpasswd - x utilisateur

Côté client Windows

Groupe de travail

Démarrer → clic droit sur “Ordinateur” → “Propriétés”

On voit : Groupe de travail : WORKGROUP

Activer partage réseau

Démarrer → Panneau de configuration → Centre réseau et partage → Groupe résidentiel → Modifier les paramètre de partage avancé…

→ Activé le partage réseau
→ Autoriser Windows à gérer les connexions des groupes résidentiels.

→ Activé la découverte du réseau

Accéder à debian serveur samba

Démarrer → Ordinateur → Réseau

DEBIAN-1SERVEUR apparaît

Double-clic sur debian-1 → double-clic sur sharing-partage → double-clic sur public.

Créer un fichier, par exemple “coucou-samba”.

ls /home/hypathie/public/
coucou-samba.txt

Pour aller plus loin

Partage d'imprimante avec samba

Édition du fichier /etc/samba/smb.conf

Il doit ressembler à cela.

########## Printing ##########

;   printing = bsd
;   printcap name = /etc/printcap

   printing = cups
   printcap name = cups

   use client driver = yes

[printers]
   comment = All Printers
   browseable = yes
   printable = yes
   writeable = no
   guest ok = no
   read only = yes
   create mask = 0700

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   writeable = no
   read only = yes
   guest ok = no

   write list = root, @lpadmin
cupsaddsmb -v -U root -a

Connexion d'un client Linux

smbclient (mode texte)

On peut utiliser le logiciel smbclient sur un système linux.

smbclient [-L nom-netbios | IP-du-serveur] [-W mon-workgroup] [-U Nom-du-Compte]

La connexion ressemble à une connexion ftp.

Les options

-L : lister les partages disponibles (pour un utilisateur -U)
-W : nom de domaine samba (correspond à celui déclaré dans /etc/samba/smb/conf)
-U : nom de l'utilisateur

 smbclient -L //192.168.0.14 -U sharing
Enter sharing's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

	Sharename       Type      Comment
	---------       ----      -------
	IPC$            IPC       IPC Service (debian-serveur SAMBA)
	sharing         Disk      
	print$          Disk      Printer Drivers
	HP-Deskjet-     Printer   HP Deskjet 2540 series
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

	Server               Comment
	---------            -------
	CLIENT1              client1
	DEBIAN-SERVEUR       debian-serveur serverA

	Workgroup            Master
	---------            -------
	WORKGROUP            DEBIAN-SERVEUR

Accès au répertoire partagé du serveur

smbclient //192.168.0.14/sharing -U sharing
Enter sharing's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]
smb: \> help
?              allinfo        altname        archive        blocksize      
cancel         case_sensitive cd             chmod          chown          
close          del            dir            du             echo           
exit           get            getfacl        geteas         hardlink       
help           history        iosize         lcd            link           
lock           lowercase      ls             l              mask           
md             mget           mkdir          more           mput           
newer          open           posix          posix_encrypt  posix_open     
posix_mkdir    posix_rmdir    posix_unlink   print          prompt         
put            pwd            q              queue          quit           
readlink       rd             recurse        reget          rename         
reput          rm             rmdir          showacls       setea          
setmode        stat           symlink        tar            tarmode        
translate      unlock         volume         vuid           wdel           
logon          listconnect    showconnect    ..             !

On peut alors avoir accès au dossiers partagés et y faire ce qu'on veut avec les commandes smbclient lister ci-dessus !.

:)

1)
real = son.kerberos.REALM
2)
passwd server = son.kerberos.server