<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/8"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/8/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/8/atom/feed</id>
  <updated>2008-07-30T14:54:25+02:00</updated>
  <entry>
    <title>Mettre en oeuvre d&#039;un serveur Samba (partages Windows)</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/8" />
    <id>http://artisan.karma-lab.net/node/8</id>
    <published>2007-01-02T20:47:01+01:00</published>
    <updated>2008-07-30T14:54:25+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Serveurs" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  Samba est un outil émulant les protocols SMB/CIFS utilisés par Microsoft pour partager divers resources (fichiers, imprimantes, etc...). Il permet aussi de monter un contrôleur de domaine Windows complet. Dans ce tutorial, l'objectif est plus modestement de configurer un serveur Samba capable de mettre rapidement des dossiers et des imprimantes à des client Windows. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Samba est un outil émulant les protocols SMB/CIFS utilisés par Microsoft pour partager divers resources (fichiers, imprimantes, etc...). Il permet aussi de monter un contrôleur de domaine Windows complet. Dans ce tutorial, l'objectif est plus modestement de configurer un serveur Samba capable de mettre rapidement des dossiers et des imprimantes à des client Windows. 
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Configuration du serveur</h2>
	 
<p>
  Un serveur samba s'installe très rapidement par un <kbd>urpmi samba-server</kbd> (ceci pour Mandriva, à adapter pour d'autres distribution). Les fichiers des configurations sont alors placés en <kbd>/etc/samba</kbd>. Celui qui nous interesse le plus est <kbd>/etc/samba/smb.conf</kbd> qui contient la configuration du serveur Samba à proprement parler. 
</p>
<p>
  Ce fichier de configuration ressemble aux vieux fichier .ini sous Windows. C'est un fichier texte composés de sections (ex. <kbd>[global]</kbd>). En dessous de chaque section, se placent des variables et leurs valeurs (ex. <kbd>browsable = no</kbd>). Les commentaires sont quant à eux les lignes précédées du symbole <kbd>#</kbd>.
</p>
<p>
  La section principale, généralement en tête du fichier de configuration est nommée <kbd>[global]</kbd>. Suit tous les paramétres principaux du serveur Samba. Pour rentrer dans le vif du sujet, voici une section globale que nous allons décortiquer :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  [global]<br />
&nbsp; &nbsp; # nommage du serveur <br />
&nbsp; &nbsp; workgroup = Mon_workgroup<br />
&nbsp; &nbsp; netbios name = SERVERSAMBA<br />
&nbsp; &nbsp; server string = Serveur Linux/Samba<br />
<br />
&nbsp; &nbsp; # gestion des utilisateurs<br />
&nbsp; &nbsp; security = user<br />
&nbsp; &nbsp; encrypt passwords = yes<br />
&nbsp; &nbsp; username map = /etc/samba/smbusers<br />
<br />
&nbsp; &nbsp; # gestion des fichiers<br />
&nbsp; &nbsp; hide dot files = Yes<br />
&nbsp; &nbsp; directory mask = 0770<br />
&nbsp; &nbsp; create mask = 0770<br />
&nbsp; &nbsp; case sensitive = No<br />
&nbsp; &nbsp; dos charset = 850<br />
&nbsp; &nbsp; unix charset = UTF-8<br />
&nbsp; &nbsp; oplocks = No<br />
<br />
&nbsp; &nbsp; # gestion des logs<br />
&nbsp; &nbsp; log file = /var/log/samba/log.%m<br />
&nbsp; &nbsp; max log size = 50<br />
<br />
&nbsp; &nbsp; # gestion du parcours des ressources<br />
&nbsp; &nbsp; os level = 255<br />
&nbsp; &nbsp; preferred master = Yes<br />
&nbsp; &nbsp; domain master = Yes<br />
&nbsp; &nbsp; local master = yes<br />
&nbsp; &nbsp; wins support = Yes<br />
&nbsp; &nbsp; dns proxy = No<br />
&nbsp; &nbsp; name resolve order = lmhosts wins host bcast<br />
&nbsp; &nbsp; guest account = nobody<br />
&nbsp; &nbsp; admin users = root @adm<br />
&nbsp; &nbsp; timeserver = yes<br />
<br />
&nbsp; &nbsp; # gestion des imprimantes<br />
&nbsp; &nbsp; printcap name = cups<br />
&nbsp; &nbsp; printing = cups<br />
<br />
&nbsp; &nbsp; # gestion des interfaces réseau<br />
&nbsp; &nbsp; bind interfaces only = yes<br />
&nbsp; &nbsp; interfaces = eth0<br />
&nbsp; &nbsp; socket address = 192.168.0.128<br />
&nbsp; &nbsp; hosts deny = 192.168.0.13<br />
&nbsp; &nbsp; socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192
  </div>
  
  </div> 
</p>
<h3>Nommage du serveur</h3>
<p>
  Le paramétre <kbd>workgroup</kbd> définit le nom du group de travail associé au serveur Samba. Il peut être différent du groupe de travail définit sous Windows. En revanche, il ne doit pas contenir de symboles ni espace, et surtout, aussi idiot cela puisse paraître, il doit commencer par une majuscule !!
</p>
<p>
  Le paramétre <kbd>netbios name</kbd> indique le nom interne du serveur utilisé par le protocole NetBios. Il doit être sans symboles ni espace et en majuscules de préférence. 
</p>
<p>
  Le paramétre <kbd>server string</kbd> est une simple description textuelle du serveur qui sera affiché à côté de son nom, sous Windows.
</p>

<h3>Gestion des utilisateurs</h3>
<p>
  Le paramétre <kbd>Security</kbd> indique que l'on utilise les droits de l'utilisateur pour autoriser ou non l'accès à une ressource. Ainsi, si l'on partage un dossier linux que seul l'utilisateur <kbd>toto</kbd> a le droit de lire, l'utilisateur <kbd>tutu</kbd> n'aura aucune vue sur ce partage.
</p>
<p>
  Les utilisateurs Samba ne sont pas directement repris des utilisateurs Linux (malheureusement). Il faut, au cas par cas, les ajouter aux utilisateurs Samba. Pour faire simple, imaginons que l'utilisateur <kbd>toto</kbd> soit un utilisateur valide sur la machine Linux. Nous allors donc ajouter <kbd>toto</kbd> aux utilisateurs Samba par la commande
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  smbpasswd -a toto
  </div>
  
  </div>
</p>
<p>
  En saisissant ici le même mot de passe que celui de l'utilisateur Linux. Ensuite, sous Windows, nous créerons un utilisateur <kbd>toto</kbd> en lui donnant, lui aussi, le même mot de passe. Ainsi, lorsque toto, sous Windows ira chercher ses partages, il y accèdera directement sans saisie de mot de passe.  
</p>
<h3>Gestion des fichiers</h3>
<p>
  Le paramètre <kbd>hide dot files</kbd> va permettre de rendre invisible les fichiers commençant par un point (fichiers cachés sous linux). <kbd>case sensitive</kbd> quant à lui permet de mimer le comporterment de Windows en ne distinguant pas les cases de caractère. Enfin les deux paramètres <kbd>mask</kbd> indique les droits à appliquer aux dossiers et fichiers créés sous Windows.
</p>
<p>
  Les deux paramétre ayant trait à l'encodage définissent le page de caractère utilisé par un windows français (850) et l'encodage du système de fichier de Linux (ici UTF-8 mais cela peut-être aussi ISO-8859-15). 
</p>
<h3>Gestion du parcours des ressources</h3>
<p>
  C'est un point assez important du paramétrage. En effet, cela permet à Samba d'être élu le plus rapidement possible "browser master", c'est à dire, qu'il sera la base de référence des machines ayant des partages. Dans notre cas, seule une machine partage, c'est Samba. Cependant, bien paramétrer cet aspect améliore notablement la rapidité d'affichage des partages disponibles sur le serveur Samba et la résolution des noms de machines. Vous pouvez vous reporter à la documentation de Samba pour mieux saisir les nuances de chacun de ses paramétres mais ce qu'ils indiquent en gros c'est que Samba est 1/ Le roi du monde (os level=255), 2/ Demande une élection de roi du monde dés son lancement (preferred master) 3/ Est un serveur wins (wins support = Yes) 4/ Est un serveur d'horloge (timeserver).  
</p>
<p>
  L'aspect serveur Wins permet à n'importe quel Windows d'appeler le serveur samba par son nom et non plus par son IP. Pour que ceci fonctionne correctement, il est cependant nécessaire de paramétrer correctement votre serveur <kbd>dhcpd</kbd> en plaçant la ligne <kbd>option netbios-name-servers 192.168.0.128</kbd> où <kbd>192.168.0.128</kbd> est l'adresse IP du serveur Samba. Ainsi chaque machin Windows, lorsqu'elle recevra son adresse IP, recevra aussi l'adresse du serveur Wins qui lui est nécessaire pour résoudre les noms. L'ordre de résolution est indiqué par le paramètre <kbd>name resolve order</kbd>.
</p>
<h3>Gestion des interfaces réseau</h3>
<p>
  Cette partie est optionelle et permet juste d'améliorer et de gérer la sécurité au niveau des interfaces réseau. Il est indiqué que l'on ne se connecte qu'aux interfaces (donc par lo, par exemple), et plus précisement à l'interface <kbd>eth0</kbd>. On indique aussi que les clients portant l'IP 192.168.0.13 sont interdit de séjour sur Samba.  
</p>


	<a name='chapter_2'></a>
  <h2>Ajout d'un partage</h2>
	
<p>
  L'ajout d'un partage se fait alors très simplement en ajoutant à la fin du fichier <kbd>smb.conf</kbd> une nouvelle section portant le nom du partage. Par exemple, si je désire partager le dossier <kbd>/mesFichiers</kbd> avec le nom <kbd>mesFichiers</kbd>, j'ajouterais la section suivante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  [mesFichiers]<br />
&nbsp; &nbsp; writeable = yes<br />
&nbsp; &nbsp; path = /mesFichiers
  </div>
  
  </div>
</p>
<p>
  Il n'y a besoin de rien d'autres car nous somme en mode sécurité <kbd>user</kbd> (voir plus haut). Ainsi donc, un utilisateur est autoriser à manipuler le partage dans les limites de ces droits sur le dossier d'origine sous Linux. 
</p>

	<a name='chapter_3'></a>
  <h2>Ajout d'une imprimante partagée</h2>
	
<p>
  Il existe deux méthodes pour partager une imprimante CUPS via Samba. La première consiste à installer sous Windows les drivers Postscript d'Adobe. Ainsi Windows imprime en Postcript qui est le langage natif des drivers cups. La seconde méthode consiste à ne créer qu'un tube entre Windows et l'imprimante, et d'utiliser sur le poste client Windows les drivers natifs de l'imprimante à utiliser. C'est la seconde méthode qui est préférée car elle permet une meilleur utilisation des capacités de l'imprimante. Pour publier ainsi toutes les imprimantes CUPS dans Samba, il suffit d'ajouter la section suivante : 
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  [printers]<br />
&nbsp; &nbsp; &nbsp; &nbsp; comment = All Printers<br />
&nbsp; &nbsp; &nbsp; &nbsp; path = /var/spool/samba<br />
&nbsp; &nbsp; &nbsp; &nbsp; create mask = 0700<br />
&nbsp; &nbsp; &nbsp; &nbsp; guest ok = Yes<br />
&nbsp; &nbsp; &nbsp; &nbsp; printable = Yes<br />
&nbsp; &nbsp; &nbsp; &nbsp; print command = lpr-cups -P %p -o raw %s -r # using client side printer drivers.<br />
&nbsp; &nbsp; &nbsp; &nbsp; browseable = No
  </div>
  
  </div>
</p>
<p>
  La ligne <kbf>print command</kbf> est le tube dont nous parlions plus haut. Elle indique à Samba d'écrire tout ce qui vient de windows, sans modification, dans l'imprimante. Il faut donc maintenant installer le bon driver sous Windows.
</p>
<p>
  Ici aussi, deux possibilités. La première est d'utiliser le CD du constructeur pour installer les pilotes en locale sous Windows et de les associer à l'imprimante au moment de la connection. La seconde solution, plus élégante, consiste à injecter le dit driver dans Samba de sorte à ce que tout client Windows puisse imprimer sans installer de driver. 
</p>
<p>
  D'un point de vue générale, Windows s'attends à trouver les drivers d'une imprimante dans un partage nommé <kbd>print$</kbd>. Nous allons donc utiliser Windows pour injecter dans ce partage les drivers d'une imprimante donnée. 
</p>
<p>
 Tout d'abord il faut ajouter dans <kbd>/etc/samba/smb.conf</kbd> le partage qui va recevoir les drivers :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  [print$]<br />
&nbsp; &nbsp; &nbsp; &nbsp; path = /var/lib/samba/printers<br />
&nbsp; &nbsp; &nbsp; &nbsp; write list = @adm root<br />
&nbsp; &nbsp; &nbsp; &nbsp; guest ok = Yes
  </div>
  
  </div>
</p>
<p>
  Ensuite, ajouter l'utilisateur <kbd>root</kbd> à samba (en mettant le même mot de passe !)
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  smbpasswd -a root
  </div>
  
  </div>
</p>
<p>
  Sur la machine Windows, connectez vous en tant qu'administrateur. Allez dans le voisinage réseau puis sur la machine Samba. Il devrait y avoir un dossier "Imprimantes et Télécopieurs". Aller dans ce dossier et faites un click-droit sur l'imprimante à paramétrer. Dans l'onglet Avancé, cliquez sur "Nouveau Pilote". Sélectionnez "Disque fourni" (important pour injecter les drivers dans le partage). Insérez votre disque de drivers, sélectionnez le et validez. 
</p>
<p>
  Si tout c'est bien passé, le dossier <kbd>/var/lib/samba/printers</kbd> devrait maintenant contenir les drivers de votre imprimante et ces derniers sont donc utilisable pour toue prochaine installation de l'imprimante partagée.
</p>    ]]></content>
  </entry>
</feed>
