Samba est une application qui permet d'utiliser sous Linux le protocole SMB (« Session Message Block ») également appelé le protocole NetBIOS ou LanManager.
NetBIOS est historiquement le premier protocole réseau utilisé pour partager des fichiers entre micros. Il a été conçu par IBM et a trouvé sa première utilisation avec Windows for Workgroup de Microsoft. NetBIOS existe sur trames 802.3 (natif) ou encapsulé (enrobé/emballé) dans les trames TCP/IP comme dans le cas de Samba.
Le protocole utilise un fonctionnement peu courant, où chaque machine possède un nom et tient à jour une table avec les noms et les adresses des autres machines. La couche ISO/ISO N° 3 (réseau) n'étant pas utilisé, le protocole n'est pas routable. Il faut donc utiliser la diffusion brodcast TCP/IP dans le cas d'une encapsulation.
Le protocole SMB est utilisé par Microsoft Windows pour partager des disques et des imprimantes. En utilisant les outils Samba d'Andrew Tridgell, les systèmes Unix (Linux inclus) peuvent également partager des disques et des imprimantes avec des hôtes Windows.
Avec Samba, on peut :
- Partager un disque Linux pour des machines Windows ;
- Accéder à un disque Windows depuis une machine Linux ;
- Partager une imprimante Linux pour des machines Windows ;
- Utiliser une imprimante Windows à partir d'un hôte Linux.
NetBIOS peut supporter les applications dites réparties. Une ressource spéciale IPC$ existe, permettant d'utiliser la communication inter-processus.
D'une manière générale, chaque ressource porte un nom unique sur chaque serveur. C'est ce que l'on appelle le nom de partage. S'il existe plusieurs serveurs, il faut utiliser le nom réseau.
Encore appelé nom complet, le nom réseau d'une ressource est composé du nom du serveur et du nom de la ressource. Par exemple Gravagecgrav est la ressource cgrav du serveur Gravage.
Sur la plupart des distributions, Samba se présente sous la forme d'un ou de deux paquetages et comporte deux daemons et un ensemble d'utilitaires binaires.
Les deux daemons sont généralement installés dans le répertoire /usr/sbin et sont lancés au démarrage ; ce sont :
- smbd - le daemon SMB ;
- nmbd - ce daemon propose le support du serveur de nom NetBIOS aux clients.
En général, les autres binaires Samba sont installés dans /usr/bin, bien que leur emplacement peut varier d'une distribution à l'autre. Le tableau ci-dessous récapitule ces binaires.
utilitaire/binaire |
Description |
smbclient |
Client SMB pour machines Unix ; |
smbprint |
Script pour imprimer sur l'imprimante d'un hôte SMB |
smbprint.sysv |
Script pour imprimer sur l'imprimante d'un hôte SMB mais pour des Unix SVR4 |
smbstatus |
Utilitaire qui liste les connexions SMB présentes sur localhost |
smbrun |
Script pour faciliter le lancement d'applications sur des hôtes SMB. |
testparm |
Vérificateur de syntaxe pour le fichier de configuration smb.conf |
nmblookup |
Permet d'effectuer des requêtes sur les noms NetBIOS depuis un hôte UNIX |
smbpasswd |
Outil pour changer les mots de passe pour Samba et les serveurs Windows NT |
Avec les distributions récentes, tout le nécéssaire est fourni, mais pas nécessairement installé. Pour vérifier si le(s) paquetage(s) est (sont) installé(s), il faut procéder comme suit :
# rpm -qa | grep samba
samba-common-x.x.xx-xxmdk
samba-x.x.xx-xxmdk
C'est ce que l'on obtient sous la Mandriva lorsque samba est déjà installé. Sous d'autres distributions, il se peut que l'on n'obtienne que ce qui suit lorsque samba est déjà installé :
# rpm -qa | grep samba
samba-x.x.xx-xx
Note 1: On peut obtenir les paquetages de samba sur l'un des deux principaux sites suivants :
·sur le site SAMBA (http://fr.samba.org) pour les derniers sources
·sur le site RUFUS (http://rufus.w3.org) pour les derniers RPMS
Une fois SAMBA installé, il faut vérifier que l'on peut lancer les deux daemons et que l'on peut demander à voir leur statut ( en cours d'exécution ou arrêtés) :
#/etc/rc.d/init.d/smb start
Starting SMB services:
Starting NMB services:
On lance les deux démons nécessaires au fonctionnement de SAMBA. (Même si SAMBA est déja lancée, normalement, il ne devrait pas y avoir d'erreur...)
# /etc/rc.d/init.d/smb status
smbd (pid 970) is running...
nmbd (pid 972) is running...
Vous devez voir apparaitre les deux dernières lignes.
Note 2: Dans de nombreux cas, lorsque vmware est installé sur une machine, on constate que le daemon smbd refuse de se lancer et l'on observe dans le fichier /var/log/syslog deux lignes qui ressemblent à ce qui suit :
smbd[5774]: bind failed on port 139 socket_addr=0.0.0.0.
smbd[5774]: Error = Address already in use.
Voici comment on procède pour vérifier cet état de choses sous la Mandriva :
# service smb restart
Arrêt des services SAMBA: [erreur]
Arrêt du service NMB : [OK]
Lancement du service SAMBA: [OK]
Lancement du service NMB : [OK]
# service smb status
smbd est arrêté
nmbd (pid 5870) est en cours d'exécution ...
# tail -30 /var/log/syslog
....
smbd[5774]: bind failed on port 139 socket_addr=0.0.0.0.
smbd[5774]: Error = Address already in use.
....
# lsof -iTCP:139
vmware-sm 2263 root 8u Ipv4 14395 TCP
Pour arrêter momentanément le daemon vmware, il faut taper la commande :
# service vmware stop
Pour l'empêcher de se lancer au démarrage du système, il faut taper la commande :
# chkconfig --level 5 vmware off
Rappel : les commandes suivantes sont équivantes :
# /etc/rc.d/init.d/smb
# service smb
Note 3: Sur la distribution Mandriva Samba est programmé pour se lancer automatiquement au démarrage du système et en utilisant init sys V.
Si ce n'est pas le cas sur votre distribution favorite et si cette dernière utilise les fichiers /etc/rc.d/init.d/* et dispose de la commande chkconfig, vous pouvez procéder à cette programmation en procédant comme suit, sachant que SAMBA ne doit pas fonctionner dans les niveaux d'exécution 0, 1, 2 et 6 (dans ces niveaux d'exécution le réseau n'est pas activé) :
# chkconfig --level 0126 smb off
# chkconfig --level 345 smb on
La configuration de Samba sur une machine Linux (ou sur un autre Unix) est contrôlée par un seul fichier, smb.conf. Cependant, le nom par défaut de ce fichier de configuration est déterminé au moment de la compilation de l'outil samba. Dans beaucoup de cas, c'est /etc/smb.conf. Mais sur la Mandriva, avec le package samba-x.x.xx, le fichier opérationnel est /etc/samba/smb.conf. Ce fichier indique quelles ressources système on désire partager avec le monde extérieur, et quelles restrictions on veut mettre dessus.
Un fichier smb.conf standard se compose de plusieurs sections contenant chacune des paramètres.
Il existe quelques 130 paramètres globaux et environ 100 paramètres associés aux partages. Mais seuls quelques uns sont nécessaires à la configuration d'un serveur simple.
A quelques exceptions près, les valeurs des paramètres sont réparties dans les trois catégories suivantes :
- chaînes de caractères ; la casse est conservée.
- valeur booléenne acceptant des conditions vrai/faux (yes/no, true/false ou 1/0). La casse des valeurs est indifférentiée.
- valeur numérique. Il est conseillé de vérifier la base de chaque paramètre pour savoir s'il s'agit d'un nombre en base décimale ou d'une valeur octale (exemple mode create).
Les paramètres se présentent sous la forme name = valeur. Exemple :
netbios name = JUPITER
Pour la plupart des paramètres, une valeur par défaut est associée à chaque paramètre. Autrement dit lorsqu'un paramètre n'est pas indiqué dans le fichier smb.conf, c'est sa valeur par défaut qui est utilisée.
Le lecteur trouvera en annexe un tableau récapitulatif des paramètres les plus utilisés par section et une description plus détaillée de quelques paramètres « délicats ».
Chaque section (ou partie) du fichier commence par une entête, comme par exemple [global], [homes], [printers], etc...
La section [global] définit quelques variables communes pour le partage de toutes les ressources.
La section [homes] permet à un utilisateur distant Windows ou autre d'accéder à son répertoire d'accueil encore appelé répertoire personnel (et uniquement au sien) sur la machine Linux locale. Ceci suppose qu'il doit posséder un compte sur l'hôte Linux.
Le fichier smb.conf suivant donné en exemple permet à des utilisateurs distants d'accéder à leur répertoire home sur la machine locale et d'écrire dans un répertoire temporaire.
; /etc/smb.conf
; Assurez vous de relancer le serveur après avoir fait des changement , dans ce fichier. Par exemple~:
; /etc/rc.d/init.d/smb stop
; /etc/rc.d/init.d/smb start
[global]
; décommentez cette ligne si vous désirez autoriser les invités (comptes
; 'guest') à se connecter
; guest account = nobody
log file = /var/log/samba-log.%m
lock directory = /var/lock/samba
share modes = yes
[homes]
comment = Répertoire homes
browseable = no
read only = no
create mode = 0750
[tmp]
comment = Espace disque temporaire
path = /tmp
read only = no
public = yes
[public]
comment = Partage public
path = /home/public
public = yes
writable = yes
printable = yes
La section [public] est un clone de la section [tmp] et permet de partager le répertoire public appelé /home/public. C'est la façon classique de partager un lecteur Linux avec des machines windows.
Pour que le répertoire ci-dessus soit en lecture pour tout le monde mais uniquement en écriture pour les personnes du groupe staff, il faut modifier l'entrée comme ci-dessous :
[public]
comment = Partage public
path = /home/public
public = yes
writable = yes
printable = no
write list = @staff
Un client SMB pour un hôte Unix est inclus dans la distribution de Samba. Il fournit une interface semblable au ftp, en ligne de commande. On peut utiliser cette utilitaire pour transférer des fichiers entre un « serveur » Windows et un client Linux.
Pour voir ce que partage une machine donnée c'est-à-dire lister les ressources disponibles sur un serveur distant, utiliser :
/usr/sbin/smbclient -L hôte
où « hôte » est le nom NetBIOS de la machine dont on veut voir les partages. On obtient une liste des « services » en partage, c'est-à-dire le nom des répertoires ou des machines qu'il partage pour vous. A moins que le serveur SMB n'ait aucune protection, il vous sera demandé un mot de passe qui correspond à celui enregistré dans windows.. On peut utiliser le mot de passe pour le compte d'invité ou pour son compte personnel sur cette machine.
Par exemple :
smbclient -L zimmerman
Ce qui devrait donner quelque chose comme ceci :
Server time is Sat Aug 10 15:58:27 1996
Timezone is UTC+10.0
Password:
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]
Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[]
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
public Disk Public
C$ Disk Default share
IPC$ IPC Remote IPC
OReilly Printer OReilly
print$ Disk Printer Drivers
This machine has a browse list:
Server Comment
--------- -------
HOPPER Samba x.x.xp8
KERNIGAN Samba x.x.xp8
LOVELACE Samba x.x.xp8
RITCHIE Samba x.x.xp8
ZIMMERMAN
La « browse list » (liste des machines) montre quels sont les autres serveurs SMB partageant des ressources sur le réseau.
Pour utiliser le client, lancer:
/usr/sbin/smbclient service
où « service » est une machine et un nom de partage. Par exemple, si vous essayez d'accéder à un répertoire en accès public sur une machine appelée zimmerman, le service sera nommé zimmermanpublic. Néanmoins, à cause des restrictions de l'interpréteur de commandes (le shell), vous allez devoir redoubler les backslashs, pour obtenir la ligne suivante :
$ /usr/sbin/smbclient zimmermanpublic mon_mot_de_passe
où « mon_mot_de_passe » est votre mot de passe écrit tel quel.
Vous allez obtenir la ligne de commande suivante :
Server time is Sat Aug 10 15:58:44 1996
Timezone is UTC+10.0
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]
smb: >
Tapez « h » pour obtenir de l'aide sur smbclient :
smb: > h
ls dir lcd cd pwd
get mget put mput rename
more mask del rm mkdir
md rmdir rd prompt recurse
translate lowercase print printmode queue
cancel stat quit q exit
newer archive tar blocksize tarmode
setmode help ~? ~!
smb: >
La syntaxe suivante est préférable parce qu'elle ne fait pas apparaître le mot de passe en clair à l'écran :
$ /usr/sbin/smbclient zimmermanpublic -U nom_utilisateur
Autre syntaxe intéressante : $ /usr/sbin/smbclient -L nom_serveur -N</font>
Les pages des manuels de ftp et de smbclient sont très similaires.
Une autre solution plus agréable consiste à utiliser smbmount qui permet de monter des ressources SMB de la même manière que NFS ou votre lecteur de cdrom.
Pour procéder à la manipulation, il faudra inclure le support du système de fichiers SMB dans la configuration de votre noyau. Ensuite, il faut récupérer les utilitaires smbfs sur un site miroir sunsite comme ftp.lip6.fr/pub/linux/sunsite/system/filesystem/smbfs.
La commande smbmount s'utilise avec la systaxe suivante :
smbmount //nomduserveur/ressource /pointdemontage [-o options]
Pour partager une imprimante Linux pour des stations Windows, il faut s'assurer que l'imprimante est configurée pour fonctionner sous Linux. Si vous savez imprimer depuis Linux, la mise en place d'un partage de l'imprimante par SMB est quasi-automatique.
Ajouter la configuration d'impression à votre smb.conf comme dans l'exemple ci-dessous :
[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
log file = /var/log/samba-log.%m
lock directory = /var/lock/samba
[printers]
comment = Toutes les imprimantes
security = server
path = /var/spool/lpd/lp
browseable = no
printable = yes
public = yes
writable = no
create mode = 0700
[ljet]
security = server
path = /var/spool/lpd/lp
printer name = lp
writable = yes
public = yes
printable = yes
print command = lpr -r -h -P %p %s
Assurez vous que le « path » (dans cet exemple, à l'intérieur de la section [ljet]) corresponde au répertoire de spool défini dans /etc/printcap !
Pour partager une imprimante sur une machine Windows, il faut suivre les points suivants :
1. Il faut avoir les entrées correspondantes à l'imprimante dans /etc/printcap et elles doivent correspondre à la structure locale des répertoires (pour le répertoire de spool, etc...).
2. Il faut avoir le script /usr/bin/smbprint. Il est fourni avec les sources de Samba, mais pas avec toutes les distributions binaires. Une version légèrement modifiée de ce script est présentée dans le SMB-HOWTO (voir notre bibliographie en fin de dossier).
3. Si on veut convertir des fichiers ASCII en Postscript, il faut avoir nenscript, ou équivalent. nenscript est un convertisseur Postscript et se trouve généralement dans /usr/bin.
4. Vous voudrez peut-être simplifier l'impression à l'aide de Samba en utilisant une interface simple d'emploi. Un script simple, écrit en perl, pour gérer l'ASCII ou le PostScript est présenté dans le SMB-HOWTO.
Dans cette partie, nous décrivons brièvement deux outils graphiques d'administration de samba sous Linux. Il s'agit de swat et de Webmin. Une description détaillée sort du cadre de ce dossier. Il s'agit de fournir suffisamment d'informations afin que toute personne intéressée puisse les installer et les lancer pour enfin les découvrir par la pratique. Notons toutefois que nous reviendrons ultérieurement sur Webmin dans un dossier consacré aux outils graphiques d'administration Linux.
Abréviation de Samba Web Administration Tool, SWAT est une fonctionnalité de Samba. Il s'agit d'un serveur web miniature et d'une application de scripts CGI exécutable à partir du processus inetd (ou sa variante plus évoluée xinetd) donnant accès au fichier smb.conf du système sur lequel il tourne.
Pour en savoir plus sur inetd ou xinetd, entrer man inetd ou man xinetd.
SWAT permet à une personne disposant de droits appropriés (et du mot de passe de root) de configurer tous les aspects de Samba à partir de pages Web. A chaque page, il propose également des liens d'aide pour toutes les options de configuration du fichier smb.conf.
Sous la Mandriva le package à installer porte le nom de samba-swat-x.x.x-xmdk.rpm. Après son installation qui ne pose aucun problème particulier (rpm -Uvh samba-swat-x.x.xx-xxmdk), il faut passer par les étapes suivantes :
1°) Créer le fichier /etc/pam.d/samba et y éditer les deux lignes qui suivent :
auth required /lib/security/pam_pwdb.so nullok shadow
account required /lib/security/pam_pwdb.so
2°) Editer les fichiers suivant et y ajouter respectivement les lignes qui suivent afin de sécuriser son serveur samba :
Dans /etc/hosts.deny :
swat: ALL
Dans /etc/hosts.allow :
swat: LOCAL,
Remplacer
3°) relancer le daemon xinetd par la commande :
service xinetd restart
Une fois la procédure terminée, on peut accéder à SWAT à partir de son navigateur habituel. Pour ce faire, il faut visiter le port 901 de son serveur Samba, en entrant http://root@localhost:901/. Le navigateur contacte SWAT et propose une boîte de dialogue d'authentification dans laquelle il suffit d'entrer le mot de passe de root.
Note importante: L'utilisation de swat réserve parfois des surprises désagréables. C'est pourquoi il est fortement conseillé, après l'utilisation de swat, de procéder à une relecture de son fichier smb.conf ou de le tester à l'aide de l'utilitaire :
testparm
Ainsi, par exemple l'auteur de ce dossier a été confronté au fait que swat définit le paramètre smb passwd file avec une valeur à blanc comme suit :
smb passwd file =
Malheureusement un tel champ à vide dans le fichier smb.conf plante le daemon smbd.
Webmin est un outil graphique d'administration Web pour les systèmes UNIX. Il permet de gérer Samba, de définir des comptes, de configurer le DNS, Apache et sendmail, et d'effectuer beaucoup d'autres tâches d'administration système.
Webmin se compose d'un serveur Web miniature développé en Perl et d'un ensemble de programme CGI prenant en charge les transferts de données de configuration système sur le web.
Notons tout de même qu'il ne prend pas en charge les partages de fichiers qui comprennent des tirets, ni les fichiers smb.conf contenant des paramètres include.
Les paramètres de la section [global]
Paramètre |
Exemple de valeur |
Description |
netbios name |
JUPITER |
Permet de spécifier le nom netbios du serveur samba. Le nom netbios est visible dans le voisinage réseau des PC sous windows. Si le nom netbios n'est pas spécifié, le serveur Linux prendra comme nom netbios son nom réseau. |
workgroup |
WORKGROUP |
Permet de spécifier le nom du groupe de travail. Il faut savoir que c'est plus agréable de mettre un nom connu de vos machines Win$$$. Par exemple vous pouvez laisser WORKGROUP |
serveur string |
Serveur Libre Linux/Samba |
Permet de spécifier le nom du serveur. C'est un commentaire Serveur Libre Linux/Samba. |
security |
SHARE |
Permet de choisir, à l'instar de windows une gestion de sécurité par utilisateur (user : chaque utilisateur est obligé d'avoir un compte sur le serveur Linux) ou par serveur (share : le serveur ne gère pas les utilisateurs et ne partage que des ressources identiques pour tout le monde). Choisir le mode SHARE : c'est le mode de fonctionnement de Win$$$ 9$ |
Les paramètres des partages de type HOMES
Paramètre |
Exemple de valeur |
Description |
interfaces |
(rien) |
Permet de spécifier les adresses IP des interfaces réseau dans le cas d'une utilisation de plusieurs périphériques. Indiquer les adresses IP des interfaces qui serviront à établir la liaison entre SAMBA et les machines clientes ainsi que le masque réseau (par exemple, si vous avez deux cartes ethernet - adresses 192.168.1.1 et 192.168.2.1 connectées respectivement aux réseaux 192.168.1.0 et 192.168.2.0 - mettez 192.168.1.1/24 192.168.2.1/24. Si vous n'avez qu'une seule carte ethernet, vous pouvez ne rien mettre, SAMBA la trouvera tout seul) |
guest ok |
NO |
les invités ne sont pas autorisés dans les répertoires maison (home). Si vous souhaitez les autoriser, mettez Yes, mais ce n'est pas très logique. |
create mask |
750 |
La meilleure valeur est 0750 qui signifie que seul l'utilisateur aura le droit de lire et écrire et que seuls les utilisateurs appartenant au groupe pourront lire les fichiers qui seront créés dans ce répertoire par le biais de SAMBA. |
available |
YES |
Sans commentaire (Pourrait-il en être autrement ?) |
encrypt password |
YES |
Permet de spécifier si on veut utiliser des mots de passe encryptés ou non. Il faut savoir que tous les windows ou presque utilisent un système différent. Choisir |
guest account |
ftp |
Mettre ftp ou un nom d'utilisateur valide sur son système : ce sera le compte sur lequel seront connectés les invités si on les autorise. Il faut donc mettre un compte qui possède très peu de droit comme ftp ou nobody |
hosts allow |
192.168.1. |
Permet de définir quelles adresses IP sont autorisées à se connecter au serveur samba. Mettre les adresses IP des machines ou des réseaux séparées par des espaces. Par exemple pour autoriser les machines du réseau 192.168.1.0 taper 192.168.1.(le point final est important). Vous pouvez autoriser toutes les machines de ce réseau sauf 192.168.1.10 en tapant : 192.168.1. EXCEPT 192.168.1.10 |
hosts deny |
ALL |
Mettre les adresses IP des machines auxquelles on souhaite interdire l'accès au serveur SAMBA par exemple : ALL pour interdire tout le monde sauf les machines autorisées par |
character set |
ISO8859-1 |
Si vous utilisez Win$$$ en France (avec des accents par exemple), mettez ISO8859-1. Note : Normalement, dans ce cas vous devez aussi fixer la valeur de client code page à 850 (la code page par défaut de Win$$$ en france) dans la Advanced view de SWAT. |
Les paramètres des autres types de partages
Paramètre |
exemple de valeur |
Description |
Comment |
Le beau partage |
|
path |
/c: |
Ce doit être le chemin complet d'un répertoire accessible par l'utilisateur smbuser et/ou le groupe smbusers |
guest account |
ftp |
Permet de spécifier le nom d'un utilisateur invité. Il est impératif d'ajouter ledit utilisateur au système. Si vous souhaitez autotoriser les accès aux invités, vous devez spécifier ici un utilisateur ayant très peu de droit comme l'utilisateur ftp sur un système Linux de base. |
valid users |
bcassoc albert daouda |
Entrer la liste (séparée par des espaces) des utilisateurs qui auront le droit de se connecter à cette ressource. |
force user |
smbuser |
Entrer le nom sous lequel nous nous connectons aux ressources partagé par SAMBA (vous pouvez ne rien mettre, en ce cas l'utilisateur qui se connectera le sera avec tous ses droits). |
force group |
smbusers |
Idem que ci-dessus |
read only |
NO |
Mettre Yes si vous voulez empêcher l'accès en écriture. (Nous vous conseillons de créer deux noms par ressource : un premier interdisant les écritures, dont beaucoup d'utilisateurs auront les droits d'accès - ie: par valid users - , et un second autorisant les écritures mais à un minimum d'utilisateurs - ayant des mots de passe !) |
guest ok |
NO |
Mettre Yes si vous souhaitez autoriser des invités à accéder à cette ressource. |
browseable |
YES |
Permet d'autoriser ou non le parcours du répertoire. Mettez No si vous souhaitez cacher cette ressource lors de l'affichage par le voisinage réseau de Win$$$ |
available |
YES |
Pour partager une ressource, celle-ci doit être disponible. |
writable |
YES |
Permet d'autoriser ou non l'écrituredans le répertoire. |
Les paramètres de configuration de serveur d'impression
Paramètre |
exemple de valeur |
Description |
comment |
Les belles imprimantes |
|
path |
/var/spool/lpd/lp |
Mettre un répertoire qui devra être accessible à l'utilisateur connecté à cette ressource : par exemple vous pouvez mettre n'importe quel répertoire qui est accessible en écriture par tout le monde par exemple /tmp) |
guest account |
rien |
Ne rien mettre ou mettre un utilisateur qui a le droit d'imprimer (sinon mettre guest ok à false). |
guest ok |
True |
on va imprimer en tant qu'invité. |
available |
True |
Les variables de Samba
Variable |
Définition |
Variables du client |
|
%a |
Architecture du client. Par exemple : Win95, WinNT, Samba, ... |
%l |
Adresse IP du client |
%m |
Nom NetBios du client |
%M |
Nom DNS du client |
Variables utilisateur |
|
%g |
Groupe primaire de l'utilisateur %u |
%H |
Répertoire home de l'utilisateur %u |
%u |
Nom de l'utilisateur unix courant |
Variables de partage |
|
%P |
Racine du partage actuel |
%S |
Nom du partage actuel |
Variables du serveur |
|
%h |
Nom DNS du serveur samba |
%L |
Nom NetBios du serveur samba |
%v |
Version de Samba |
Variables diverses |
|
%T |
La date et l'heure courantes |
Niveau de nom d'utilisateur et de mots de passe
Certains clients transmettent les noms d'utilisateurs en capitales (par exemple KENOBI). Par défaut, Samba recherche le nom d'utilisateur en minuscules (par exemple kenobi) et, s'il demeure introuvable, il le fait commencer par une lettre capitale (par exemple Kenobi). Cette méthode n'est pas adaptée au traitement des noms d'utilisateurs UNIX combinant majuscules et minuscules, comme par exemple KeNobi.
Un paramètre permet de spécifier la quantité maximale de majuscules dans le nom d'utilisateur. Samba tente ensuite de découvrir le nom de l'utilisateur en permutant les lettres capitales de 1 à la valeur définie.
Supposons que nous ayons :
username level = 4
Si la chaîne transmise est KENOBI, Samba tente de localiser les noms suivants dans le fichier des noms de de passe : kenobi, Kenobi, kEnobi, keNobi, keNobi, kenObi, kenoBi, kenobI, KEnobi, KeNobi, KenObi, Kenobi, etc.
Les mots de passe en texte brut posent les mêmes problèmes que ceux de la casse des noms d'utilisateurs. Le paramètre de niveau de mot de passe se comporte comme le paramètre nom d'utilisateur, à ceci près qu'il utilise le mot de passe de deux façons, comme s'il était envoyé tout en minuscules par le client. Sur la plupart des systèmes, un niveau égal à 8 signifie que la casse est indifférenciée. Un niveau de 4 est raisonnable.
password level = 4
Chiffrement des mots de passe
Samba supporte les algorithmes de chiffrement de mots de passe SMB de LanManager et de Windows. Certains aspects du chiffrement des mots de passe UNIX sont communs aux systèmes Microsoft. Par exemple les hachages des mots de passe LanMan et NT sont irréversibles comme pour les systèmes UNIX.
Toutefois les algorithmes de chiffrement des mots de passe d'UNIX et de LanMan/NT présentent une différence importante : l'algorithme de Microsoft crée les mots de passe par équivalence de texte brut c'est-à-dire qu'à valeur d'entrée égale, valeur de sortie égale.
Voici quelques points qui devraient aider à opter pour le chiffrement ou le texte brut :
·Grâce aux mots de passe en texte brut, Samba se réfère toujours à la même base de mots de passe (/etc/passwd). Samba ne transmet jamais de mots de passe en texte brut si des informations de comptes n'ont pas été préalablement envoyés sur le réseau.
·Les mots de passe en texte brut limitent les ressources requises aux fichiers système UNIX standard.
·Windows NT n'apprécie guère les mots de passe en texte brut et ne permet pas d'explorer les serveurs ne prenant pas en charge le chiffrement.
·La synchronisation de smbpasswd et de unix passwd est parfois difficiule.
·Pour activer le chiffrement des mots de passe, qui est inactif par défaut, il faut définir le paramètre encrypt passords dans le fichier smb.conf :
encrypt passwords = yes
Dans ce cas, il faut alors tenir à jour un second fichier de compte, appelé smbpasswd et stocké dans le sous-répertoire private du répertoire d'installation de Samba, où LanMan et NT stockent les versions chiffrées des mots de passent utilisateur.
·Pour modifier l'emplacement ou le nom par défaut du fichier des mots de passe, il faut utiliser le paramètre smb passwd file. La valeur doit être un chemin d'accès absolu au fichier comme ci-après :
smb passwd file = /etc/smbpasswd
Un grand nombre de comptes UNIX rend la création d'un fichier de mots de passe SMB et la définition des mots de passe fastidieuses. Mais il existe une solution exigeant qu'une entrée smbpasswd soit créée pour chaque utilisateur. Il s'agit du script shell mksmbpasswd.sh utilisé comme dans la commande qui suit :
cat /etc/passwd | mksmbpasswd.sh > /usr/local/samba/private/smbpasswd
·Le fichier de configuration /etc/samba/smb.conf est prévu pour la gestion des mots de cryptés (les deux paramètres encrypt passwords = yes et smb passwd file = /etc/samba/smbpasswd y sont définis). Au cas où le chiffrement des mots de passe ne correspond pas à votre choix, n'oubliez pas de mettre ces deux paramètres en commentaires.
L'ordre de résolution des noms :
La résolution des noms par le serveur Samba peut se faire de différentes manières. Le paramètre « name resolve order » définit l'ordre dans lequel s'effectue cette résolution. Il s'agit d'une liste pouvant contenir jusqu'à quatre valeurs delimitées par des caractères d'espacement.
Par défaut, Samba recherche le premier hôte du fichier lmhosts local. Ce fichier est l'équivalent NetBIOS du fichier /etc/hosts d'UNIX. Il tente ensuite de trouver le nom correspondant à l'hôte et de le résoudre selon la méthode standard (recherche dans le fichier /etc/hosts ou requêtes DNS. Si les deux méthodes précédentes échouent, le serveur contacte un serveur WINS s'il est spécifié dans le fichier smb.conf. Enfin, Samba diffuse des requêtes de noms.
Par défaut la valeur de ce paramètre est :
name resolve order = lmhosts hosts wins bcast
Pour que samba ne contacte pas de serveur wins et commence sa résolution par une requête DNS par exemple, on devrait avoir :
name resolve order = hosts bcast lmhosts
Annexes : C Utilisation de l'outil LinNeighborhood |
Pour se connecter à un ordinateur utilisant le protocole SMB (un pc Linux/SAMBA ou un pc Win$$$), il existe la méthode brutale : smbmount! Toutefois ce n'est pas très simple et encore moins, convivial. C'est pourquoi nous allons dire quelques mots de l'application LinNeighborhood.
Ce programme fait tout et même plus que l'explorateur de Win$$$ pour ce qui est des connexions via smb. En bref, c'est le voisinage réseau de Microsoft vu par Linux. Il est l'oeuvre de Hans Schmid et de Richard Stemmer.
Dans les lignes qui suivent, vous trouverez une adaptation de la description qui est faite pour l'installation de cet outil à partir des sources au format tgz sur le site de Lea-Linux (voir notre bibliographie en fin de dossier).
Récupération et installation du paquetage LinNeighborhood.
On peut trouver la version courante sur le site de Hams Schmid (http://www.bnro.de/~schmidjo) Vous trouverez ci-dessous la procédure d'installation depuis les sources. Le package porte un nom qui ressemble à quelque chose comme LinNeighborhood-x.x.x.src.tar.gz.
La décompression et l'installation se font par la série de commandes suivantes :
# tar xzf LinNeighborhood-0.4.4.src.tar.gz
# cd LinNeighborhood-0.4.4.src/src
# make
# cp LinNeighborhood /quelque/part/dans/le/path
Par ailleurs, il est possible aussi d'installer une version précompilée au format rpm.
La configuration de LinNeighborhood en elle-même reste triviale, mais pour une utilisation confortable, il faut lui apporter quelques petits raffinements.
Lancer LinNeighborhood par la commande :LinNeighborhood
Le plus simple pour la configuration est de préciser WORKGROUP dans la zone : ScanWorkgroup (où WORKGROUP est le nom du groupe de travail du serveur SAMBA). Les autres options de la boîte de dialogue s'expliquent toutes seules. Puis sauver la configuration ;
- Cliquer sur l'onglet
- Cliquer sur l'onglet
A partir de ce moment, on peut peut, depuis la fenetre de LinNeighborhood, parcourir le réseau comme on le ferait avec Win$$$ (ou presque). Mais, à ce stade on est confronté à un problème : quand vous tentez d'accéder réellement à une ressource, LinNeighborhood vous envoie le message : 'smbmount not found', la raison est simple : smbmount ne peut fonctionner qu'avec les privilèges de root.
Donc, pour que cela fonctionne depuis un compte utilisateur il faut rendre SUID les programmes : smbmount, smbumount et smbmnt.
chmod +s /usr/sbin/smbmount
chmod +s /usr/sbin/smbmnt
chmod +s /usr/sbin/smbumount
Mais cela ne suffit pas, le programme smbmount essaie de lancer le programme smbmnt mais celui-ci ne se trouve pas dans le PATH d'un utilisateur standard (il est dans /usr/sbin !). Solution : créer deux petits scripts que l'on met dans un répertoire de son PATH :
#!/bin/sh
export PATH=$PATH:/usr/sbin
smbmount $*
Appelons le par exemple smbmount-user. Et un autre :
#!/bin/sh
export PATH=$PATH:/usr/sbin
smbumount $*
Appelons le par exemple smbumount-user. Puis cliquons à nouveau sur le bouton
Konqueror est maintenant un bon moyen d'accéder à un serveur smb (et donc Windows), il suffit pour cela d'indiquer dans la zone URL : smb://user@serveur/ ou smb://user:password@serveur/ pour accéder au serveur 'serveur' en tant que 'user'.