Contenu | Rechercher | Menus
Cette page est en cours de rédaction.
Apportez votre aide…

Le fichier de configuration de Samba : smb.conf

La configuration de Samba n'est pas une mince affaire, c'est pourquoi cette page est assez longue, mais soyez tranquille, seule une partie s'appliquera à votre besoin, continuez de lire attentivement.
Cette page n'est pas exhaustive et ne permettra pas à tout le monde d'y trouver son bonheur, toutefois vous y trouverez ce dont vous avez besoin pour une configuration simple. Des configurations nécessaires à un aboutissement suffisant y sont proposées. Comme c'est le cas pour bon nombre de logiciels (serveurs, en l'occurrence) des configurations différentes sont possibles, en fonction des habitudes…
Ce ne sont que des propositions.

  1. Un certain nombre de notions sont rapidement expliquées ici, cette page est destinée à documenter le fichier de configuration de Samba, pas toutes les notions à avoir pour tout comprendre en détail. Faites appel à votre curiosité pour en savoir plus (si vous estimez en avoir besoin).
  2. Dans cette page, le terme "serveur" sera souvent employé, c'est parce que je1) considère Samba comme un service auquel se connectent des clients, il s'agit donc d'un serveur (au même titre que apache, par exemple), même si Samba tourne sur un PC domestique avec une version non-server de n'importe quelle distribution GNU/Linux.

Introduction

Le fichier /etc/samba/smb.conf permet de configurer Samba. Ce fichier est composé de sections dont le nom est entre crochets2) :

  • [global] : contient les paramètres généraux et les paramètres par défaut des différents partages,
  • [printers] et [print$] sont spécifiques au partage d'imprimantes,
  • [homes] est spécifique au partage du répertoire personnel d'un utilisateur (son répertoire $HOME) il apparaîtra dans la liste des partages avec le nom d'utilisateur du client (s'il est identifié),
  • [le_nom_d'un_partage] pour chaque partage

Éditez le fichier /etc/samba/smb.conf
Dans ce fichier de configuration par défaut il y a beaucoup de commentaires, afin de ne pas les perdre et d'avoir un fichier clair, il est conseillé de copier ce fichier sous un autre nom et de partir de zéro3).

Une fois terminé, pour vérifier que la configuration est sans faute de syntaxe, utiliser la commande suivante :

testparm -s

Vous verrez comment samba interprètera votre fichier de configuration et, en cas d'erreurs, vous serez averti.

Après chaque modification, il faut redémarrer samba :

sudo service samba restart
sudo service smbd restart


Si un redémarrage complet n'est pas possible pour des raisons de continuité de service et/ou si les modifications ne touchent pas le service NetBios (nmbd), la commande suivante suffit :

sudo service samba reload
sudo service smbd reload

Généralités

Le fichier /etc/samba/smb.conf est construit de différentes sections dont la première est généralement : [global].
Une section commence par une ligne contenant un mot entre crochets et finit lorsque la section suivante commence ;-).
Toute ligne commençant par un # est un commentaire. Toute ligne commençant par un ; est aussi considérée comme un commentaire mais sert pour les paramètres ignorés.
Dans une section, les valeurs sont affectées aux paramètres de cette manière :

paramètre = valeur

Dans certains cas, il est possible d'affecter une liste de valeurs à un même paramètre, la syntaxe à utiliser est alors :

paramètre = valeur1,valeur2,valeur3

ou séparés par des espaces

paramètre = valeur1 valeur2 valeur3

Il est coutumier d'indenter4) les paramètres afin de les distinguer des sections et des commentaires.

Une ligne se terminant par le caractère \ se prolonge sur la ligne suivante comme le veut la mode Unix.

Exemple illustratif :

# Un commentaire très important puisqu'il est là…
# Début de la section
[section]
# Un paramètre comme ceci
    paramètre unaire = valeur
# ou comme cela
    liste de paramètres = toi,moi,eux
# ...et tous ceux qui le veulent…
# Celui-ci n'est pas pris en compte
;    paramètre invalidé = essai infructueux
# paramètre commenté en fin de ligne
    paramètre spécial = Yes # Ah oui, on peut commenter en fin de ligne ;-) mais uniquement certains paramètres, évitez donc cette pratique

La liste des paramètres se trouve dans la page de man (ou manuel) de smb.conf :

man smb.conf

Pour chaque paramètre, une lettre est mise entre parenthèses :

  • (G) pour les paramètres de la section [global]
  • (S) pour les paramètres spécifiques aux partages (shares en anglais). Ces paramètres peuvent être définis dans la section [global] et seront valables pour tous les partages, cela évitera de les refaire figurer dans chaque partage. On dira que les paramètres sont hérités.

Paramètres généraux de [global]

Identification du PC sur le réseau

Groupe de travail ou Domaine
workgroup = CHEZ_MOI

Le groupe de travail (ou nom de domaine pour les PC dans un domaine) est le nom du "réseau" dans lequel les PC "sont"5). Bon, on ne commence pas par la notion la plus facile…
Il ne faut pas créer un groupe de travail, il existe dès lors qu'un PC se définit comme faisant partie de ce groupe.
En gros, pour ranger un peu les PC sur un même réseau, on les place dans des groupes appelés "groupes de travail". Si vous avez moins de 50 PC, vous pouvez les mettre dans le même groupe, ça ne dérangera personne !

Nom NetBios
netbios name = MON_ORDI_A_MOI

C'est le nom du PC sur le réseau.

Description
server string = serveur %h (Samba %v, Ubuntu)

C'est la description que vous voulez donner de votre PC.

Vous avez remarqué ces %h et %v ? Ils sont décrits dans le manuel de smb.conf, ici %h est le nom de l'hôte du serveur (hostname) et %v est la version de Samba.

Type de sécurité

Voir le chapitre dédié à ce point particulier.

Réseau

Interface

Dans certains cas6) on peut vouloir restreindre l'accès aux partages Samba à une partie des interfaces Ethernet disponibles sur le serveur ; limiter l'accès aux membres du réseau filaire et interdire l'accès à ceux qui sont sur le réseau WiFi par exemple. Il faut savoir que ce n'est pas ce qui est fait par défaut, puisque par défaut, Samba est accessible sur toutes les interfaces réseau, donc si ce fonctionnement vous convient, aucun besoin de préciser quoi que ce soit.

# On souhaite n'autoriser l'accès que via certaines interfaces réseau
bind interfaces only = Yes
# Liste des interfaces réseau en question
interfaces = 127.0.0.1 eth0:0 192.168.1.20/24

Paramètres liés à la résolution de nom

WINS

WINS est un service de résolution de nom, comparable au DNS.

Contrairement aux serveurs DNS, il ne peut y avoir qu'UN SEUL serveur WINS sur le réseau, attention donc à ne pas marcher sur les plates bandes d'un autre serveur !

Sa configuration peut être de 3 types :

  • La plus part du temps : Aucune.

Sur des réseaux simples (sans sous-réseaux) WINS n'est pas important. C'est d'ailleurs la configuration par défaut, c'est-à-dire celle qui est utilisée si rien n'est précisé.

  • Client WINS

Le réseau dans lequel se trouve le serveur Samba comporte un serveur WINS, il faut donc le signifier à Samba afin qu'il puisse en tenir compte.

# Si le serveur WINS a l'adresse 192.168.1.20
wins server = 192.168.1.20
  • Serveur WINS

Le serveur WINS de votre réseau est votre serveur Samba.

# Activation de la fonction de serveur WINS
wins support = Yes
# Un paramètre historique dont d'anciennes versions de Windows ont besoin
wins proxy = Yes
# Si VOTRE serveur a l'adresse 192.168.1.20
wins server = 192.168.1.20
# S'il fallait en plus passer par un serveur DNS
;dns proxy = Yes
Local Master

Pour les détails de fonctionnement voir cette page.
Afin de stabiliser le local master browser sur un réseau, il peut être intéressant de faire en sorte que Samba remplisse ce rôle, d'autant plus si Samba est contrôleur de domaine.

Par défaut, cette valeur est à Yes. On peut cependant le rappeler afin de faciliter la lecture et figer la paramètre os level à une valeur supérieure à 64 (et strictement inférieure à 255), afin de garantir la victoire de l'élection du local master browser.

# Samba participe à l'élection…
local master = Yes
# … et la gagnera !
os level = 65

Si toutefois on ne souhaite pas activer cette fonctionnalité, on peut préciser :

# Le serveur Samba ne participera même pas à l'élection du local master browser
local master = No

Exemple de section [global]

Voici un exemple7) d'une section [global] telle qu'elle pourrait être pour une configuration sans authentification :

[global]
    server string = %h server (Samba, Ubuntu)
    security = SHARE
    syslog = 0
    log file = /var/log/samba/log.%m
    max log size = 100
    dns proxy = No
    hide files = /lost+found/

Profitons-en pour parler des paramètres encore inconnus. Il suffit de dire que des notions d'anglais aident bien à la compréhension de leur rôle.

Cas particulier pour hide files, les noms de fichiers à cacher sont entre /, exemple si on veut cacher les répertoires lost+found, les corbeilles et les fichiers *.bak :

hide files = /lost+found/.Trash*/*.bak/

Comme il s'agit d'un paramètre de partage, le fait de le mettre dans [global] permettra de ne pas le préciser pour chaque partage.

Attention toutefois à ce paramètre car il affecte sensiblement les performances de Samba.

Paramètres généraux des partages

Répertoire partagé

Le chemin du répertoire partagé se renseigne de cette manière :

path = /data/Documents

Description

Il est possible de renseigner une description de partage :

comment = Tous les documents utiles

Masques de création

Le plus souvent, ce n'est pas la peine de se soucier de ce paramètre, par défaut, Samba fait les choses assez bien. Si toute fois vous souhaitez personnaliser les droits sur les fichiers lors de leur création, vous pouvez le faire avec ces paramètres :

create mask = 0700    # Fichiers : Tous les droits pour le propriétaire et rien pour les autres
directory mask = 700  # Répertoires : idem

Pour plus de détails, je vous conseille de consulter la page de manuel et d'avoir des notions sur les droits et autorisations sur les fichiers dans le monde Linux.

Accès aux données : Lecture et écriture

Il est possible de déclarer un partage :

  • en lecture/écriture pour tous,
  • en lecture seule pour tous,
  • en lecture seule pour certains utilisateurs et lecture/écriture pour d'autres utilisateurs.

Et en plus ce n'est même pas compliqué à mettre en place !

En lecture/écriture pour tous

Afin de rendre un partage accessible en lecture et en écriture pour tous, il faut préciser :

read only = No

Attention : ce n'est pas le mode par défaut, en effet, le mode par défaut est la lecture seule, pensez à préciser ce paramètre si vous souhaitez que la copie vers le serveur ou même l'enregistrement de documents modifiés soient possibles.

En lecture seule pour tous

C'est facile, c'est le mode par défaut, aucun paramètre à préciser, mais si vous ne voulez pas l'oublier, vous pouvez le préciser :

read only = Yes
Le mixe des deux...

Le fin du fin c'est de distinguer les droits en fonction des utilisateurs. Le principe est de déclarer le partage en lecture seule pour tous mais d'autoriser des exceptions :

read only = Yes
write list = utilisateur1, utilisateur2, @groupe12000

Et bien pour cela, il faudra que Samba identifie les utilisateurs, il faudra une politique de sécurité différente de security = share.

Il est possible d'inverser la philosophie, en déclarant le partage en écriture pour tous et préciser une liste d'utilisateurs ne pouvant que lire avec le paramètre read list.
Si un utilisateur apparait dans write list et dans read list, il aura l'autorisation d'écrire.

Accès aux données : Autorisations

Pour définir une liste d'utilisateurs qui ont le droit d'accéder au partage et donc d'en voir le contenu (indépendamment du droit d'écriture) il existe le paramètre valid users :

valid users = utilisateur1, utilisateur2, @groupe12000

Les autres utilisateurs n'auront pas accès à ce partage.

Et bien pour cela aussi, il faudra que Samba identifie les utilisateurs, il faudra une politique de sécurité différente de security = share.

Accès aux données : propriétaire

Il est possible de faire en sorte que tous les utilisateurs d'un partage soient reconnus par le système comme un seul utilisateur et/ou comme faisant partie d'un seul groupe, quel que soit l'identifiant de l'utilisateur.

    force user = nobody
    force group = nogroup

Ceci peut vous éviter de vous préoccuper des droits sur les fichiers.

Partage d'imprimantes

# quelques lignes dans la section [global]
########## Printing ########## 
   load printers = yes 
   printing = cups 
   printcap name = cups 

[printers] 
   comment = All Printers 
   browseable = no 
   path = /var/spool/samba 
   printable = yes 
   guest ok = no 
   read only = yes 
   create mask = 0700 

[print$] 
   comment = Printer Drivers 
   path = /var/lib/samba/printers 
   browseable = yes 
   read only = yes 
   guest ok = no 
# Uncomment to allow remote administration of Windows print drivers. 
# Replace 'ntadmin' with the name of the group your admin users are 
# members of.
######### !!!!!!!!!! Attention à cette ligne !!!!!!!!!!!!! ########
   write list = root @ntadmin

C'est avec ces quelques lignes que vous pourrez partager les imprimantes gérées via cups.

Vitesse de transfert lente et/ou temps d'accès longs

Dans le cas où les transferts se trouvent réduits (très lents ou très longs), une solution est de modifier la configuration des sockets :

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192

Sécurité

Toute la configuration de Samba tourne autour de la politique de sécurité ; il s'agit du paramètre security.

C'est sur ce paramètre là que vous devez réfléchir avant de commencer. Un nom NetBios ou un groupe de travail qui change ce n'est qu'une ligne à changer, par contre, pour la politique de sécurité, c'est toute la philosophie de la configuration qui change.
Vous êtes prévenu.

Ce paramètre peut avoir les valeurs suivantes :

  • SHARE : Sécurité basée sur les mots de passes. Les utilisateurs accèdent au partage en indiquant le mot de passe d'un utilisateur. Les droits sur les fichiers s'appliqueront sur le partage. Mode utilisé pour des postes sous Windows 9x et Me. Il est aussi possible de ne pas faire d'authentification via ce mode.
  • USER : Une sécurité basée sur une identification par login et mot de passe depuis une liste d'utilisateurs (Base d'utilisateurs Samba, base d'annuaire LDAP, …). Ce mode est celui par défaut si le champ security n'est pas renseigné.
  • DOMAIN : Une sécurité basée sur une identification par login et mot de passe géré par un contrôleur de domaine.
  • SERVER : Une sécurité basée sur une identification par login et mot de passe géré par un autre serveur sur le réseau.
  • ADS : Une sécurité basée sur Active Directory.

Vous l'avez compris, pour une utilisation "à la maison", on choisira l'un des deux premiers cas.

security = SHARE

Dans ce mode, donc pas de droits à gérer, juste les partages en accès libre. La seule restriction possible est la lecture seule. L'authentification se fait par mot de passe. Ce mode permet aux postes sous Windows 9x et Me d'accéder à un partage avec des identifiants différents.

Exemple de section [global] :

[global]
    server string = %h server (Samba, Ubuntu)
    security = SHARE
    syslog = 0
    dns proxy = No
    guest account = ( !!!! mettre ici le login de l'utilisateur principal)

Exemple de configuration d'un partage :

[Nom_du_partage]
   path = /chemin/du/répertoire/partagé
   comment = qui peut le plus peut le moins
   read only = no
   guest ok = yes
   public = yes

Le nom du partage ne doit pas excéder 12 caractères si vous avez des clients sous MS windows 98.

security = USER

Gestion des utilisateurs : à la maison

Les utilisateurs qui ne se servent pas du PC sont créés de sorte qu'ils ne puissent pas utiliser le système (shell par défaut sur /bin/false et répertoire personnel (home) sur /dev/null) :

sudo useradd -s /bin/false -d /dev/null -g guest nom_utilisateur
sudo smbpasswd -a nom_utilisateur

Puis rentrer deux fois le mot de passe de cet utilisateur (ou le faire taper par l'utilisateur lui-même).

Les utilisateurs qui ont un compte sur le PC pourront être autorisés aussi avec "valid users". Cependant, il faudra définir un mot de passe samba pour tous les utilisateurs :

sudo smbpasswd -a nom_utilisateur

Il semble que l'utilisation de smbpasswd ne soit plus celle conseillée (à vérifier), il faudrait utiliser

pdbedit -a username

Pour importer la base de données smbpasswd :

pdbedit -i smbpasswd -e tdbsam

De plus, il faut dans le fichier smb.conf :

passdb backend = tdbsam

Gestion des utilisateurs : en entreprise de petite taille

Une solution de gestion des utilisateurs est proposée ici, libre à vous de choisir de la suivre.

Il n'est pas forcément nécessaire, dans une configuration simple, de faire en sorte que tous les utilisateurs système soient créés dans des groupes d'utilisateurs différents.
Ce qui est proposé ici est de gérer les droits uniquement via samba. C'est une solution applicable la plupart du temps, et surtout une des plus simple.

Dans cette optique, un seul groupe d'utilisateurs est créé :

groupadd sambausers

Ensuite soit les utilisateurs sont créés de sorte qu'ils ne puissent pas utiliser le système (shell par défaut sur /bin/false et répertoire personnel (home) sur /dev/null) :

sudo useradd -s /bin/false -d /dev/null -g sambausers nom_utilisateur

Soit les utilisateurs du système déjà existants sont directement ajoutés dans le groupe sambausers

sudo adduser [nom_utilisateur_existant] sambausers

Enfin, créer pour chaque utilisateur un accès "samba" :

sudo smbpasswd -a nom_utilisateur

Puis rentrer deux fois le mot de passe de cet utilisateur (ou le faire taper par l'utilisateur lui-même).
Un utilisateur nommé samba et faisant partie du groupe sambausers peut être créé pour qu'il soit propriétaire des répertoires partagés.

Configuration

#======================= Global Settings =======================

[global]

## Browsing/Identification ###
workgroup = Arcade
server string = Samba server (%h)
netbios name = Serveur
dns proxy = no

#### Networking ####
interfaces = 192.168.214.20
bind interfaces only = yes

### Access rights ###
create mask = 0660
directory mask = 0770

#### Debugging/Accounting ####
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d

####### Authentication #######
security = user
# ATTENTION A BIEN REMPLACER "groupe_principal" par le nom du groupe dont vous faites partie
# (si vous êtes l'utilisateur principal, c'est également votre login)
# et de rajouter les éventuels autres utilisateurs...
valid users = @guest, @groupe_principal
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = no
map to guest = bad user

############ Misc ############
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
usershare allow guests = no

Configuration d'un partage en lecture/écriture pour certains utilisateurs

Ajouter les lignes suivantes pour chacun des partages de ce type :

[Nom_du_partage]
   path = /chemin/du/répertoire/partagé
   comment = Répertoire en lecture et écriture pour tous ceux qui y ont accès
   read only = no
   valid users = liste des utilisateurs séparés par des espaces

Configuration d'un partage en lecture/écriture pour certains utilisateurs et en lecture seule pour d'autres

Ajouter les lignes suivantes pour chacun des partages de ce type :

[Nom_du_partage]
   path = /chemin/du/répertoire/partagé
   comment = Répertoire en lecture seule pour certains, en lecture/écriture pour d'autres (sans compter ceux qui n'y ont pas accès)
   read only = yes
   valid users = liste des utilisateurs n'ayant que le droit de lire séparés par des espaces
   write list = liste des utilisateurs ayant le droit de lire et d'écrire séparés par des espaces

Les utilisateurs de write list doivent être dans les valid users sinon ils n'ont pas d'accès !

Droits sur les répertoires partagés : à la maison

Une solution simple consiste à dire que le répertoire appartient à l'utilisateur principal et au groupe "guest" afin que tout le monde puisse y accéder. Attention aux utilisateurs tiers du PC. Commande à lancer pour chaque répertoire partagé :

sudo chown -R $USER:guest /répertoire/partagé
sudo chmod -R 770 /répertoire/partagé

Droits sur les répertoires partagés : en entreprise de petite taille

Remarque importante : Au niveau d'un répertoire partagé, Samba choisi toujours les droits "minimum". Si on désire qu'un utilisateur ou groupe puisse écrire sur le répertoire partagé à partir d'un autre ordinateur, non seulement il doit disposer des droits d'écriture sur le répertoire lui-même (à vérifier avec la commande chmod), ET le smb.conf doit également lui permettre de le faire.

Le plus simple étant que le répertoire appartienne à l'utilisateur "samba" ainsi qu'au groupe "sambausers" prévu à cet effet. Voici la commande à lancer pour tous les répertoires partagés :

sudo chown -R samba:sambausers /répertoire/partagé
sudo chmod -R 770 /répertoire/partagé

Ainsi, tous les utilisateurs qui sont présents dans le groupe propriétaire "sambausers" disposeront de tous les droits sur ce répertoire, mais via le partage réseau c'est la configuration de Samba (dans le smb.conf) qui fixera précisément qui peut lire et qui peut écrire parmi les utilisateurs de ce groupe :

valid user = @sambausers                 # seuls les utilisateurs du groupe sambausers peuvent se connecter au répertoire partagé
read only = yes                       # limitation des droits à la lecture pour tout le groupe sambausers, mais .....
write list = utilisateur01             #........sauf pour utilisateur01 (qui est dans le groupe sambausers) qui pourra y écrire.

security = DOMAIN

Configure Samba en contrôleur de domaine.

FIXME Appel à contribution

aide mémoire : !! preferred master = yes

security = SERVER

Obsolète

FIXME Appel à contribution

security = ADS

Permet l'intégration du serveur Samba dans un contrôleur de domaine Active Directory

L'authentification Active Directory se fait avec kerberos, nous devons installer un client kerberos sur notre Linux pour pouvoir nous authentifier.

Installation de kerberos et winbind

#aptitude install krb5-user libpam-krb5 winbind

Paramétrage de kerberos

#vi /etc/krb5.conf
[libdefaults]
default_realm = DOMAINE.LOCAL         #Nom dns du domaine AD EN MAJUSCULE
...
[realms]
DOMAINE.LOCAL = {
kdc = 172.16.0.100                              #Adresse IP du contrôleur de domaine
admin_server = 172.16.0.100
}
...
[domain_realm]
.kerberos.server = DOMAINE.LOCAL

Teste de connexion au contrôleur de domaine

#kinit ADMINISTRATEUR@DOMAINE.LOCAL

Connexion au contrôleur de domaine

#net ads join -U administrateur

Authentification des utilisateurs par winbind

#vi /etc/nsswitch.conf
passwd:            compat winbind
group:             compat winbind
shadow:            compat winbind

Paramétrage de samba. Pensez à sauvegarder le fichier smb.conf!

#vi /etc/samba/smb.conf
[global]
workgroup = DOMAINE
realm = DOMAINE.LOCAL
security = ADS
encrypt passwords = yes
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
idmap uid = 600-20000
idmap gid = 600-20000
template shell = /bin/bash
...

On vérifie avec testparm la configuration du fichier smb.conf puis on redémarre les services smbd et winbind.

#testparm
#service smbd restart
#service winbind restart

Dans le fichier smb.conf, vous pouvez utiliser l'option write list = @nom_du_groupe_AD dans vos partages

[Applications]
comment = Applications
path = /bureautique/applications
write list = @GG_admins
read only = no

Si vous devez redémarrer le service smbd, pensez à redémarrer le service winbind sinon, l'authentification ne fonctionnera pas. FIXME Appel à contribution

Liens


Contributeurs principaux : MrWaloo, …


2) [exemple] de nom de section
3) oui : page blanche, mais soyez sans crainte, elle ne le restera pas
4) ajouter des espaces en début de ligne
5) désolé pour les guillemets en rafale, mais je n'ai pas le choix pour garder un minimum de précision
6) comme par exemple celui où 2 paires de démons (daemons) Samba tournent sur le même serveur, avec une interface par instance
7) sans commentaire, ce qui n'est pas top

samba_smb.conf.txt · Dernière modification: Le 28/03/2014, 15:08 par 109.26.156.18
Le contenu de ce wiki est sous licence : CC BY-SA v3.0