Table des matières

Installer et configurer samba

Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !

Introduction

Qu'est-ce que samba ?

Samba est un logiciel libre sous licence GPL, permettant de supporter le protocole SMB/CIFS pour 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.

tuto Obsolète

La structure de samba

Comment se lance samba ?

Il peut être lancé soit soit par des daemons directs, par inetd qui est le plus sécurisé mais avec un temps de latence plus long.

Dans cas il s'agit du partage réseau.

Dans ce cas il s'agit du serveur WINS.

Les ports utilisés par samba

Mise en place d'un partage de fichiers

Configuration générale du système sur lequel on installe samba

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

hostname
debian-1
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.
echo $USER
first-user
ip a s eth0

ou mettez votre interface, exemple:

 ip a enp2s0 
<...>
inet 192.168.0.15/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.

Pré-requis à l'installation du serveur samba

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

addgroup --system hypathie

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

adduser --system hypathie --ingroup hypathie

Création d'un fichier partageable

mkdir /home/hypathie/public

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

chown -R hypathie:hypathie /home/hypathie/
-R (récursivement) pour que le dossier déjà créé dans ce répertoire appartienne aussi à l'utilisateur et au groupe “hypathie”.
Voir : chown
chmod -R 770 /home/hypathie/
Pour donner les droits de lecture, écriture et exécution à l'utilisateur “hypathie” sur tous fichiers et dossiers créés dans ce dossier.
On peut aussi donner les droits de lecture pour les “autres” 775.
Voir droits-unix et droits-unix-bis
Et chmod

Installation de samba serveur

apt-get update
apt-get install samba

Configuration simple pour partage de fichiers entre Windows et Debian

Les fichiers samba

ls /etc/samba 

Le fichier de configuration est smb.conf.

Sauvegarde de smb.conf

#Se placer dans le répertoire /etc/samba
cd /etc/samba
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-1       # nom du serveur visible sur le poste client Windows
 
 server string = %h server     # nom du serveur samba
 
 hosts allow = 192.168.0. 127. # ajouté et à modifier selon l'IP du réseau local
 
 security = user               # à décommenter
 
 bind interfaces only = yes    # mettre "yes" pour utiliser le choix des interfaces (ligne au dessous)
 interfaces = 192.168.0.15/24  # Pour éviter le wifi, on peut mettre à la place de l'IP/masque, le nom de l'interface "eth0:0"
 
 
 
[hypathie]                     # ajouté et à modifier selon le répertoire de partage 
path = /home/hypathie/         # créé sur le système lors de la création d'un nouvel utilisateur
read only = no
browseable = yes
writeable = yes
valid users = hypathie
write list = hypathie
create mask = 0700      # droits posix (octal = 0 devant 700): lecture, écriture, exécution pour l'utilisateur seulement
directory = 700
force user = nobody    # surtout si on partage la racine
force group = nogroup
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 “realm2) et le mot de passe du serveur d'authentification 3)
  • [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
Le caractère % permet de substituer les variables.

  • %U : Nom de l'utilisateur
  • %G : Groupe de l'utilisateur
  • %h : Nom du serveur Samba
  • %m : Nom NetBIOS du client Samba
  • %L : Nom NetBIOS du serveur Samba
  • %M : Le nom internet du client
  • %a : Type de la machine cliente
  • %I : IP de la machine cliente
  • %i : IP local de la machine cliente
  • %T : Date et heure courante
  • %D :Nom de domaine
  • %I : IP de la machine cliente

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

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

Sur Wheezy et précédents:

service samba restart

Sur Jessie et suivant:

systemctl 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 hypathie
  • 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 au serveur samba

Démarrer → Ordinateur → Réseau

DEBIAN-1 apparaît

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

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

Vérification

Sur le serveur samba le fichier créé depuis Windows est bien là. Et peut être édité depuis l'un ou l'autre poste.

ls /home/hypathie/public/
coucou-samba.txt
1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
2)
real = son.kerberos.REALM
3)
passwd server = son.kerberos.server