Introduction
Samba est un logiciel libre client et serveur qui émule le protocole SMB de Microsoft Windows.
En version serveur samba permet :
le partage de fichiers se trouvant sur un serveur Unix ;
aux machines clientes (windows mais pourquoi pas également Unix) d’utiliser des imprimantes gérées par un serveur Unix (lpr, lprng ou cups) ;
l’authentification des utilisateurs, soit « nativement » (simple fichier smbpasswd ou démon windbind) soit en faisant appel à une source externe comme LDAP ;
la gestion des droits d’accès de ces utilisateurs.
Samba peut également servir de serveur de noms NETBIOS et de PDC (Primary Domain Controller).
La dernière version est, de façon expérimentale, capable de gérer la technique Active Directory.
En version cliente, samba permet aux machines Unix de se connecter à une ressource partagée par le protocole SMB, soit :
un accès à des fichiers ;
d’utiliser une imprimante partagée.
Samba fournit un logiciel de configuration via une interface web, swat.
Toutes les distributions linux offrent une version du logiciel samba - le site samba.org propose, outre les sources, également des binaires -, l’installation n’offre aucune difficulté.
Les dernières versions de samba sont la 3.0.4 et la 2.2.9. Une version spéciale appelée samba-tng, qui est un fork de samba, est plus particulièrement destinée à remplacer complètement un serveur windows contrôleur de domaine. Nous n’avons pas testé cette version.
Liens :
Site officiel de samba
Site français
Intégration LDAP
samba-tng
Après avoir introduit les principales fonctionnalités de samba, cet exposé décrira le fonctionnement du serveur samba servant à la gestion des étudiants de l’UFR de Mathématiques et d’Informatique.
Les démons
Le logiciel samba fait tourner 2 ou 3 démons - application unix qui tourne en arrière plan et qui répond à des requêtes émanant des clients.
nmbd
Ce démon traite toutes les requêtes qui concernent la résolution des noms. C’est lui qui est impliqué dans la recherche d’ordinateurs par le « voisinage réseau ». Il fonctionne en UDP. Il est toujours lancé en premier lors du démarrage de samba.
smbd
Ce démon traite toutes les connexions aux services reposant sur TCP/IP : opérations sur les fichiers, impression, etc. Il est également responsable de l’authentification. Il est démarré aussitôt après nmbd.
winbindd
Ce démon doit être activé si le serveur samba est membre d’un domaine NT et/ou s’il existe une relation d’approbation entre les différents domaines.
La configuration
Toute la configuration de samba se trouve dans le fichier /etc/samba/smb.conf. La syntaxe est la même que celle des anciens fichiers .ini de windows 3.1. Ce fichier est divisé en plusieurs sections.
Le test de la configuration se fait à l’aide de la commande testparm.
Important : les valeurs par défaut n’ont pas à être indiquée dans ce fichier, ce qui explique les différence du nombre de lignes entre le fichier lui-même et le résultat de testparm.
Les options globales
workgroup : il s’agit du nom du groupe de travail dans lequel se situe le serveur. Dans le cas d’un PDC, il s’agira du nom du domaine.
netbios name : il s’agira du nom NETBIOS sur serveur. En pratique, on met le même nom que celui de la machine Unix.
interfaces : adresse ip de la machine / netmask
security : il s’agit d’un des paramètres les plus importants. Par défaut, il est égal à user. Dans ce cas, les utilisateurs windows doivent être les mêmes que les utilisateurs unix. Si les utilisateurs windows n’ont pas de compte unix, le paramètre doit être égal à shared. Si l’authentification doit se faire sur un Contrôleur de Domaines - qui n’est pas l’ordinateur samba -, le paramètre doit alors être égal à domain.
encrypt passwords : Si le paramètre est égal à yes, le mot de passe circule de manière cryptée entre le serveur et le client. Cette option est obligatoire avec les systèmes windows récents. Le mot de passe est ensuite comparé avec le fichier local smbpasswd ou transmis soit à un annuaire LDAP ou à un Contrôleur de Domaines Windows.
guest account : Il s’agit d’un « utilisateur » qui sera utilisé pour accéder à des services (partages, imprimantes) qui acceptent une connection non authentifiée (guest ok doit être égal à yes). Le compte spécifié doit être un compte unix, de préférence sans le shell (nobody, ftp, etc.). Attention : si ce paramètre est mal configuré (le compte unix n’existe pas ou plus) et que samba est configuré en PDC, les machines clientes ne pourront plus se connecter au domaine.
smb passwd file : il s’agit du fichier qui sert à l’authentification des clients (utilisateurs et machines). Il n’est pas utilisé dans le cas d’une authentification via un annuaire LDAP. Par défaut, on a :
/etc/samba/smbpasswd
passdb backend : Cette option permet à l’administrateur de choisir la méthode utilisée pour extraire et stocker les mots de passe. Sont disponibles : smbpasswd (le fichier défini ci-dessus),tdbsam, ldapsam, nisplussam et mysql.
hosts allow : les machines autorisées à se connecter au serveur. Le séparateur est la virgule, la syntaxe classe ip/netmask est valable. Ne pas oublier de mettre localhost ou 127.0.0.1. Exemple :
localhost, 193.48.200.0/24, 193.49.116.0/24
nt acl support : Si défini à yes, alors samba va tenter de gérer les droits d’accès avec les attributs étendus de windows. Il faut bien entendu que le système de fichiers unix les supporte, ce que fait nativement xfs. Les gestion des acls est intégrée dans le noyau 2.6 de linux. La distribution Fedora Core 2 permet de gérer ces acl avec ext3 si l’on précise le paramètre acl dans les options de montage du système de fichiers (/etc/fstab) :
/dev/xxxx /mnt/point ext3 acl,defaults ...
profile acls : Si nt acl support est égal à no, profile acls doit être égal à yes si l’administrateur de la machine windows désire supprimer localement les profiles des utilisateurs.
load printers : Ce paramètre indique si les utilisateurs peuvent voir sur leurs machines toutes les imprimantes définies sur le serveur unix. En pratique, il vaut mieux mettre no et définir chaque imprimante dans le fichier smb.conf.
lpq command et lprm command : Ces paramètres doivent être configurés suivant le système d’impression choisi sur le serveur Unix.
logon drive : La lettre du lecteur windows qui va contenir le répertoire de base de l’utilisateur (ex : Z :). Ce paramètre n’est utile que si samba est utilisé comme PDC.
domain logons : Si le serveur samba est utilisé comme PDC, cet attribut doit être égal à yes.
domain master : Doit être égal à yes si le serveur samba est utilisé comme PDC.
os level : Plus la valeur de ce paramètre est élevée, plus le serveur samba sera considéré comme « browser master » par les clients windows. Si le serveur samba est PDC du domaine, mettre cette valeur à 100.
remote announce : Le démon nmbd peut s’annoncer périodiquement à un ensemble de machines d’une plage ip considérée. Il peut d’autre part ne s’annoncer que pour un domaine ou worgroup spécifié. Exemple :
193.48.200.255/UFR-MI
admin users : une liste d’utilisateurs ou de groupes (séparateur espace) habilités à avoir les droits d’administrateur. Exemple :
admin users = admdom @cdc
On note que la référence au groupe s’écrit @NomDeGroupe
Les partages
Samba va pouvoir partager des répertoires situés sur le serveur unix. C’est d’ailleurs sa principale utilisation. Les partages sont également définis dans le fichier smb.conf.
On prendra ici l’exemple d’un répertoire accessible en lecture à des étudiants et mis à jour par des enseignants :
[Data Licpro]
comment = Donnees Licence Professionnelle
path = /users/lpro/Data
valid users = @lpmifc, @lpmifi, @ufr
write list = @ufr
read only = No
inherit permissions = Yes
Le répertoire /users/lpro/Data est accessible depuis des machines windows sous le nom de « Data Licpro ». Seuls les membres des groupes lpmifc, lpmifi et ufr ont le droit d’y accéder. Seuls les membres du groupe ufr ont le droit d’écrire.
Le paramètre inherit permissions = Yes signifie que les droits d’accès du répertoire seront hérités par les fichiers et sous-répertoires crés.
On prend maintenant un répertoire qui est accessible en lecture par toute personne connectée dans le réseau de l’UFR de Math-Info et en écriture par le groupe ufr :
[Data Mi1]
comment = Sources Mi1
path = /users/cycle2_1/Data
write list = @ufr
inherit permissions = Yes
guest ok = Yes
hosts allow = localhost, 193.48.200.0/255.255.255.0, 193.49.116.0/255.255.255.0
C’est le paramètre guest ok = Yes qui permet de s’affranchir de l’authentification.
Imprimer avec samba
La version 2.2 a apporté une innovation majeure en permettant aux stations windows de télécharger les pilotes d’impression depuis le serveur samba. Celui-ci peut donc être configuré comme un véritable serveur d’impression windows.
On définit tout d’abord un partage spécial appelé Print$ :
[print$]
path = /var/samba/printers
write list = admdom @cdc
guest ok = Yes
Le répertoire /var/samba/printers est un répertoire qui va contenir les pilotes associés à chaque imprimante. En fait il faut créer un sous répertoire appelé W32X86 qui contiendra lui-même les sous-répertoires 2 et 3. Cela correspond aux différentes versions de windows dont samba reprend la configuration (cf . C:\WINNT\...
Une fois l’imprimante configurée sous unix, on peut ajouter l’imprimante dans le fichier smb.conf :
[imp-507]
path = /var/spool/samba
guest ok = Yes
printable = Yes
printer name = imp-507
Il faut ensuite se connecter sur une machine windows du domaine et mettre à jour les pilotes du serveur. Les pilotes sont téléchargés dans les sous répertoires indiqués dans le partage Print$ et l’association pilote/imprimante est stockée dans le fichier ntdrivers.tdb (dans le répertoire /var/lib/samba).
Attention : l’utilisateur doit avoir les droits d’écriture unix sur un certain nombres de répertoires, notamment /var/samba/printers. Nous avons défini un utilisateur spécial via LDAP qui a pour login admdom mais les membres du groupe cdc ont également les droits d’écriture.
Les outils unix
Samba est livré avec un certain nombre de commandes et le pseudo système de fichiers smbfs est disponible dans toutes les distributions linux.
Les commandes en ligne
smbstatus
Cette commande permet de visualiser l’état du serveur :
Samba version 3.0.4
PID Username Group Machine
-------------------------------------------------------------------
7793 hv05727 dmias1 pc513-3 (193.49.116.130)
730 hu03699 dmias2 pc508-4 (193.49.116.54)
....
Service pid machine Connected at
-------------------------------------------------------
hv05727 7793 pc513-3 Thu May 27 18:10:11 2004
...
Locked files:
Pid DenyMode Access R/W Oplock Name
--------------------------------------------------------------
7793 DENY_WRITE 0x20 RDONLY EXCLUSIVE+BATCH /users/cycle1_1/2003/hv05727/SHDOCVW.DLL Thu May 27 18:10:38 2004
smbclient
On peut se connecter à un partage samba depuis une machine unix :
smbclient \\\\ServeurSamba\\Utilisateur
Montage d’un répertoire samba sous unix
Il peut être utile de monter un répertoire samba sur une machine unix. Voici ce que l’on peut mettre dans /etc/fstab :
//ServeurSamba/Utilisateur /mnt/smb smbfs noauto,user,username=user 0 0
Attention : il faut mettre noauto car samba va demander un mot de passe !
De même, les gestionnnaires de fichiers nautilus et Konqueror permettent sous linux d’accéder aux partages samba.
Re Attention : dans les deux cas, les mots de passe circulent en clair sur le réseau !
Intégration LDAP
Samba utilise ses propres schémas ldap qu’il faut inclure dans la création de l’annuaire. Si on utilise la version 3, une recompilation avec comme paramètre de compilation (configure) --with-ldapsam est à prévoir si l’on continue d’utiliser les schémas de la version 2.2.
La société idealix diffuse une série de scripts avec le package smbldap-tools et a réalisé un document de configuration.
Les schémas
Il faut impérativement avoir :
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/samba.schema
Pour optimiser l’interrogation de l’annuaire, on doit mettre dans le fichier slap.conf du serveur ldap :
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq
Pour sécuriser les mots de passe, on doit avoir :
access to attrs=userPassword
by self write
by anonymous auth
by * none
access to attrs=sambaLMPassword
by self write
by anonymous auth
by * none
access to attrs=sambaNTPassword
by self write
by anonymous auth
by * none
access to *
by * read
On modifie ensuite le fichier /etc/samba/smb.conf en ajoutant les lignes suivantes dans les options générales :
ldap passwd sync = Yes
...
; SAMBA-LDAP declarations
passdb backend = ldapsam:ldap://127.0.0.1/
# ldap filter = (&(objectclass=sambaSamAccount)(uid=%u))
ldap admin dn = cn=Manager,dc=IDEALX,dc=ORG
ldap suffix = dc=IDEALX,dc=ORG
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers
ldap ssl = start_tls
add machine script = /usr/local/sbin/smbldap-useradd -w "%u"
add user script = /usr/local/sbin/smbldap-useradd -m "%u"
#delete user script = /usr/local/sbin/smbldap-userdel "%u"
add group script = /usr/local/sbin/smbldap-groupadd -p "%g"
#delete group script = /usr/local/sbin/smbldap-groupdel "%g"
add user to group script = /usr/local/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/local/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/local/sbin/smbldap-usermod -g "%g" "%u"
ldap admin dn : Cet attribut définit le Distinguished Name (DN) utilisé par samba pour contacter le serveur LDAP lorsqu’il accède aux informations de l’utilisateur. Cet attribut est utilisé en concordance avec le admin dn password stocké dans le fichier secrets.tdb.
On note ici que la methode d’accès aux mots de passe (passdb backend) est ldapsam avec comme machine l’interface locale.
Le serveur étudiant
Il s’agit du serveur des étudiants de l’UFR de Math-Info. Il gère environ 1000 étudiants et environ 80 machines, toutes sous linux et windows 2000.
L’authentification des utilisateurs se fait via un annuaire LDAP, directement pour linux, via samba pour windows.
L’annuaire LDAP de Math-Info est alimenté par celui de la DSI : les informations de ce dernier proviennent de la base apogée.
On peut voir ici la configuration du serveur générée par la commande testparm.
Cette configuration est work in progress mais opérationnelle.
|