\documentclass[a4paper]{report}

\usepackage[latin1]{inputenc}
%\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{url}
\usepackage{tabularx}

\usepackage{fancyhdr}
\lhead{Introduction \`{a} Samba}
% \chead{}
\rhead{}
\lfoot{Guillaume~Valadon}
\cfoot{\thepage}
\rfoot{Année~1999-2000}
\renewcommand{\footrulewidth}{.3pt}
\renewcommand{\headrulewidth}{.3pt}

\title{Introduction \`{a} Samba}
\author{Guillaume~Valadon~(\url{doug@sieste.org})}

\begin{document}

\pagestyle{fancy}

\maketitle

\tableofcontents

\chapter{Qu'est-ce que Samba ?}

D'après le petit Larousse, il s'agit d'une danse brésilienne à deux temps, mais ce n'est pas de cela dont je 
vais parler. 
Samba est un ensemble d'applications utilisant le protocole SMB (Server Message Block), appelé aussi 
CIFS (Common Internet File System). Disponible sur de nombreux systèmes d'exploitation dont, parmis les plus 
connus :
\begin{list}{}
\item AIX
\item Amiga
\item FreeBSD
\item HP-UX
\item Irix
\item NetBSD
\item OS/2
\item QNX
\item Solaris/SUNOS \\
\end{list}
Malgré la quarantaine d'OS supportés, Linux et SUNOS ont été les mieux testés. \\

Samba fait rentrer les machines UNIX dans le monde Windows, en leur permettant aussi bien de fournir des  
partages de fichiers et d'imprimantes, que d'y accèder.
Il est maintenu par un groupe de développeurs, la Samba Team, et est distribué sous License GPL, ce qui 
est un énorme avantage en comparaison des prix des licenses de Windows NT Server. Ainsi, il n'y a plus besoin 
de se préoccuper des couteuses licences par poste ou par siège, un seul serveur Samba gère autant de connexions
et de postes que l'on souhaite. \\

Le mot \textit{partage} est souvent employé dans un réseau de machines Windows. Il désigne le
 répertoire, ou l'imprimante auquel on accéde via le réseau. Sous Windows, 
les partages d'une machine sont visibles gr\^{a}ce au \textit{Voisinage Réseau}, et on peut facilement
les associer à une lettre de lecteur classique ce qui rend transparentes leurs utilisations. \\

\section{Les débuts}

Le protocole NetBIOS fit sont apparition en 1984, puis vint NetBEUI en 1985, tous deux développés par IBM.
Leur fonctionnement sur TCP/IP est décrit par les RFC\footnote{On peut les r\'{e}cuperer sur 
\texttt{ftp://ftp.ripe.net/rfc}} 1001 (concepts) et 1002 (protocole). SMB fut quant à lui développé en 
partenariat entre Microsoft et Intel en 1987, et se place au dessus de NetBIOS et NetBEUI.
Il s'agit d'un protocole orienté connexion travaillant sur un mode question réponse, suivant une architecture 
client/serveur. Plus clairement, le client pose une question, le serveur y répond. \\

NetBIOS sur TCP/IP offre trois services distincts : la gestion des noms (enregistrement, et résolution), un 
échange de données en mode connecté et un autre en mode non connecté. \\

Le système de gestion des noms permet de faire la relation entre les adresses IP des machines, et leurs noms
NetBIOS. Ceux-ci ne sont pas suffixés par un domaine comme dans le monde IP, et sont limités à quinze
caractères. On peut utiliser les caract\`{e}res suivants a-z, A-Z, 0-9, ~!~@~\#~\%~\textasciicircum~\&~(~)~-~'~\{~\}
~\textasciitilde.
Cependant l'utilisation du "." n'est pas recommandée car cela peut poser des problèmes dans les futures versions
de NetBIOS sur TCP/IP. \\

Un seizième caractère permet de déterminer le type de ressources associé au nom. Parmi les plus utilisées,
on a :  \\

\begin{center}
\begin{tabularx}{10.5cm}{c|l}
 Valeur & Description \\
 \hline 00 & Nom NetBIOS \\
 03 & Service de messagerie \\
 1b & Domain Master Browser \\
 20 & Serveur de fichier (et d'impression) \\ \\
\end{tabularx}
\end{center}

Ce dernier octet permet aussi de connaître le type de ressources des groupes :  \\

\begin{center}
\begin{tabularx}{10.5cm}{c|l}
 Valeur & Description \\
 \hline 1c & Nom du domaine \\
 1d & Nom du Master Browser \\
 1e & Nom du group utilisé dans l'élection du master browser \\ \\
\end{tabularx}
\end{center}

Ainsi en tapant :

\begin{tabbing}
c:\textbackslash\textgreater nbtstat -a quicky \\ \\
aaaaaaa\=aaaaaa \kill

       \>NetBIOS Remote Machine Name Table \\ \\


aa\=aaaaaaaaaaaaaaaaa\=aaaaaaaaaaa\=aaaaaaaaaaaaaaaaaaa \kill
   \>Name               \>Type         \>Status\\

aaaaaaaaaaaaaaa\=aaaaaaaaaaaaaaaaa\=aaaaaaaaaaa\=aaaaaaaaaaaaaaaaaaa \kill
-----------------------------------------------------------------\\
QUICKY         \>\textless 00\textgreater  \>UNIQUE      \>Registered\\
SMB            \>\textless 00\textgreater  \>GROUP       \>Registered\\
QUICKY         \>\textless 03\textgreater  \>UNIQUE      \>Registered\\
QUICKY         \>\textless 20\textgreater  \>UNIQUE      \>Registered\\
SMB            \>\textless 1E\textgreater  \>GROUP       \>Registered\\
BENZ           \>\textless 03\textgreater  \>UNIQUE      \>Registered\\
SMB            \>\textless 1D\textgreater  \>UNIQUE      \>Registered\\
..\_\_MSBROWSE\_\_.\>\textless 01\textgreater  \>GROUP       \>Registered\\ \\

MAC Address = 00-A0-65-00-02-EF\\
\end{tabbing}
On peut voir que la machine quicky peut recevoir des messages pour l'utilisateur benz, et fait partie du 
groupe SMB. \\

Au niveau du système d'exploitation un partage est simplement identifié gr\^{a}ce à des adresses UNC 
(Universal Naming Convention)~: 
\begin{list}{}
\item \texttt{//machine/partage} \\
\end{list}

A partir de l'UNC, la machine va pouvoir trouver l'IP de la machine  et effectuer la connexion au partage. \\

Lors du démarrage, une machine va annoncer son nom gr\^{a}ce à un broadcast, si aucune autre machine ne 
possède le m\^{e}me, la machine le conserve, sinon comme on peut le voir ici, le système d'exploitation demande
à ce qu'il soit changé. 

\begin{flushleft}\includegraphics[scale=0.6]{erreur.eps}\end{flushleft} 

Ce mécanisme d'enregistrement du nom peut également \^{e}tre effectué par un serveur NBNS (NetBIOS Name 
Server) - l'implémentation de ce système par Microsoft s'appele WINS (Windows Internet Name Service). Les 
machines s'adresseront alors à ce serveur pour savoir si un nom est disponible ou pas.
La résolution des noms NetBIOS (le passage du nom à l'IP) peut quant à elle \^{e}tre effectué soit par 
broadcast soit par l'intermédiaire d'un serveur WINS. \\

Les serveurs WINS permettent d'éliminer les broadcasts, on va ainsi pouvoir utiliser SMB à travers des 
routeurs. \\

On obtient différents types d'enregistrement et de résolution de noms appelés :
\begin{list}{}
\item \textit{b-node} : broacast
\item \textit{p-node} : serveur WINS
\item \textit{h-node} : serveur WINS, si celui-ci ne marche pas, on se sert du broadcast 
\end{list}

\section{Concepts du protocole SMB}

Le protocle SMB fonctionne au dessus de NetBIOS, fonctionant lui-m\^{e}me sur TCP/IP. Samba n'implémentant  
que SMB sur TCP/IP, les échanges de données sont effectués en mode connecté.

Le tableau~1.1 nous montre où se situe SMB par rapport au modèle OSI :

\begin{center}
\newlength{\LL} \settowidth{\LL}{IPX}
\begin{table}[h]
\caption{\label{prot}Pile de protocoles}
\begin{center}
\begin{tabular}{|c|c|c|}
 \hline \multicolumn{3}{|c|}{SMB} \\
 \hline NetBIOS & &  NetBIOS \\
 \cline{1-1} \cline{3-3}  \multirow{2}{\LL}{IPX} &  NetBEUI & TCP \& UDP \\
 % j'aimerais bien lui demander "Gentil LaTex peux-tu centrer ce
 % texte avec la cellule du haut ?" 
 \cline{3-3}  &  & IP \\
 \hline \multicolumn{2}{|c|}{802.2,} & \\
 \multicolumn{2}{|c|}{802.3,802.5} & \multicolumn{1}{c|}{Ethernet} \\
 \hline
\end{tabular}
\end{center}
\end{table}
\end{center}

Il existe de nombreuses variantes de SMB, parmi les opérations minimales qu'elles doivent pouvoir effectuer 
sur des fichiers et imprimantes partagés, citons : 
\begin{list}{}
\item connection et déconnexion
\item ouverture et fermeture
\item lecture et écriture \\
\end{list}

% synoptique
% neg du protocole
% auth
% tree connect

\section{Browsing}

Pour connaître tous les serveurs d'un domaine, une machine s'adressera au \textit{master browser} qui lui 
renverra une \textit{browse list}, c'est ce que l'on appelle \textit{browsing} en anglais. Cette liste a été 
construite à partir des \textit{server annoucements} et \textit{domain annoucements} faits par tous les serveurs et 
les \textit{domain master browsers}\footnote{\textit{master browser} d'autres domaines du réseau} sur le réseau. 
Ceci permet un gain de temps et de ressources au niveau des machines clientes qui n'auront pas à reconstruire la 
\textit{browse list} au fur et à mesure des changements. \\

Une élection a lieu entre les machines du réseau et permet de déterminer laquelle sera \textit{master browser}.
Cette t\^{a}che ne pouvant \^{e}tre effectuée par toutes les machines pour des raisons de puissance, on peut
demander à Samba de le devenir en falsifiant l'élection. Il mentira en annon\c cant un numéro de 
système d'exploitation supérieur à celui de NT Server (0x20) par exemple. Cela est utile dans le cas de l'utilisation 
de Samba à travers des réseaux routés où l'on va avoir besoin de synchroniser les \textit{master browser} des 
différents sous-réseaux. \\

Comme nous l'avons déja vu, la gestion des noms peut-\^{e}tre assurée par un serveur WINS. Lorsqu'une machine
arrive sur le réseau, elle envoie son nom NetBIOS, son IP, et son groupe de travail au serveur WINS.
Ces informations vont \^{e}tre par la suite automatiquement mises à jour.
Il n'y a pas d'élection la fonction \textit{serveur WINS} est statique, elle est déterminée au moment de la
mise en place de Samba.

\section{Authentification}

Un réseau de machines Windows  comprend deux méthodes d'identification des utilisateurs, par :
\begin{list}{}
\item groupe de travail (workgroup) : l'authentification est distribuée à l'ensemble des machines du réseau, chaque 
machine gère sa propre base d'utilisateurs
\item domaine : l'authentification est assurée par une seule machine pour l'ensemble des partages du réseau
\end{list}

\newpage

\chapter{Installation}

Les sources Samba sont disponibles sur le serveur ftp.samba.org et ses miroirs. Il convient tout d'abord 
de les d\'{e}compresser par
\begin{list}{}
	\item \texttt{tar xzvf samba-x.x.x.tar.gz} \\
\end{list}

Le r\'{e}pertoire cr\'{e}e s'appelle \textbf{samba-x.x.x} et contient de nombreux documents et exemples. \\

Rendons nous dans \textbf{samba-x.x.x/source}  o\`{u} nous allons lancer l'installation par
\texttt{
\begin{list}{}
\item ./configure 
\item make 
\item make install \\
\end{list}
}

Sous un système Linux 2.2.x ou supérieur, il est conseillé d'utiliser :
\begin{list}{}
\item \texttt{./configure --smbmount} \\
\end{list}

Samba est désormais install\'{e} dans le r\'{e}pertoire \textbf{/usr/local/samba} suivant l'arborescence 
suivante :
\begin{list}{}
 \item \textbf{bin/} contient les serveurs \texttt{smbd} et \texttt{nmbd} ainsi que d'autres utilitaires
 \item \textbf{lib/} contient les fichiers smb.conf et lmhost
 \item \textbf{man/} les manuels des commandes fournies par Samba
 \item \textbf{swat/} l'outil d'administration de Samba
 \item \textbf{var/} logs d'activit\'{e} des d\'{e}mons, et informations n\'{e}cessaires à leur fonctionnement
 \item \textbf{private/} contient entre autres le fichier smbpasswd \\
\end{list} 

\texttt{smbd} fournit les partages et les services d'impression aux clients Windows, \texttt{nmbd} assure la résolution des noms
et la fonction de serveur WINS.
En plus de ces serveurs, de nombreux utilitaires sont fournis, citons par exemple \texttt{smbclient} qui offre une 
façon simple d'accéder aux serveurs SMB en ligne de commande à la manière de ftp, \texttt{smbwrapper} permettant 
d'utiliser des partages comme un système de fichier classique, et \texttt{nmblookup} grâce auquel on retrouve 
l'adresse IP d'une machine à partir de son nom NetBIOS.

\newpage

\chapter{Pr\'{e}sentation du fichier smb.conf}

Le fichier smb.conf est le fichier de configuration de Samba. Toutes les sections (sauf \texttt{[global]}) 
repr\'{e}sentent un partage, et sont d\'{e}finies par un mot entre crochets (ex : \texttt{[toto]}). Plus de deux cents  
param\`{e}tres permettent de d\'{e}finir leur comportement, et sont de la forme  \texttt{nom = valeur}, où casse et  
nombre d'espaces ne sont pas pris en compte. \\

Ce fichier étant lu de haut en bas, une section s'arr\^{e}te là où une autre commence, des paramètres de la section 
\texttt{[global]} peuvent \^{e}tre recouverts par ceux d'une autre section. Remarquons également que certains 
paramètres ne peuvent apparaître que dans \texttt{[global]}. Les lignes commen\c{c}ant par \# ou ; seront interprétées 
comme des commentaires. \\

Il existe trois sections sp\'{e}ciales : \texttt{[global]}, \texttt{[homes]}, et \texttt{[printers]}. \\

La section \texttt{[global]} définit le fonctionnement général de Samba (\texttt{smbd} et \texttt{nmbd}). On peut y définir sa 
politique d'accès, les interfaces qu'il doit écouter, la façon dont il va trouver les adresses IP 
associ\'{e}es à un nom NetBIOS particulier, etc ... \\

Les sections \texttt{[homes]} et \texttt{[printers]} sont particulières. Elles vont respectivement engendrer la création à la 
volée du partage personnel de l'utilisateur se connectant au serveur Samba d'après /etc/passwd, et la création des 
imprimantes que sert le serveur d'après le fichier /etc/printcap.
Elles permettent donc de ne pas créer explicitement une entrée par utilisateur et par imprimante dans le 
fichier de configuration. \\

Ainsi partager \textbf{/tmp} reviendrait à déclarer une section \texttt{[tmp]} dans smb.conf, et à fournir un paramètre de type 
\texttt{path} afin que le partage pointe vers un r\'{e}pertoire existant sur le système local :

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[tmp] \\
\>\>path = /tmp \\
\end{tabbing}
}

Pour y permettre l'écriture, on ajoutera simplement :

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
	\>\>writeable = Yes \\
\end{tabbing}
}

Il existe un ensemble de variables que l'on peut placer dans toutes les directives qui acceptent des 
chaînes de caractères en argument.\\
Voici les plus utiles:
\begin{list}{}
	\item \%u : l'utilisateur courant
	\item \%g : le groupe de \%u
	\item \%U : l'utilisateur demandé (celui que le client fournit, peut être différent de \%u si on 
utilise 'force user')
	\item \%H : le répertoire de connexion de \%u
	\item \%S : le partage en cours
	\item \%m : le nom Netbios de la machine cliente
	\item \%L : le nom Netbios du serveur
	\item \%I : l'adresse IP du client
	\item \%v : la version de Samba \\
\end{list}	
Elles permettent de définir des contextes particuliers dans les partages, ainsi on pourrait loguer les 
événements par client et non plus globalement avec le paramètre suivant dans la section \texttt{[global]}

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
        \>\>log file = /usr/local/samba/var/smbd.\%m \\
\end{tabbing}
}

De nombreux paramètres seront utilisés avec leurs valeurs par défaut :

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
	\>[homes] \\
	\>\>writeable = Yes \\
\end{tabbing}
}

Ces deux lignes dans smb.conf permettent de créer un partage en écriture des répertoires de connexion des 
utilisateurs de la machine. Le nom NetBIOS du serveur SMB sera le nom de la machine dans le monde IP, et le 
path aura pour valeur le répertoire de connexion de l'utilisateur. \\

La relecture du  fichier smb.conf est effectuée toutes les soixante secondes par \texttt{smbd} et \texttt{nmbd}, on peut également la forcer
en leur envoyant un signal HUP. Les modifications ne sont pourtant pas prises en compte immédiatement afin de pas
arr\^{e}ter les connexions en cours. \\

Lorsque qu'une machine cliente cherche à utiliser un \textit{partage}, celui-ci est recherché dans smb.conf en commençant par
\texttt{[partage]}, \texttt{[homes]}, puis \texttt{[printers]}. Si aucun partage n'est trouvé, le partage par défaut est utilisé,
sinon une erreur est renvoyée.

\newpage
 
\chapter{Première configuration}

Créeons simplement le fichier smb.conf suivant :

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[global] \\
   	   \>\>workgroup = SMB\\
           \>\>netbios name = SAMBA\\ \\
\>[homes] \\
	  \>\>comment = Repertoire personnel de \%u \\
          \>\>path = /home/\%u \\
          \>\>read only = No \# équivalent à writable = yes \\
          \>\>browseable = No \\
\end{tabbing}
}

On s'aperçoit que depuis un poste Windows l'accès à la machine nous est refusé, le mot de passe n'étant pas bon.
Ceci est dû au comportement par défaut de celui-ci :  il s'attend à recevoir des mots de passe 
sans aucun chiffrement. Windows NT (à partir du SP3), Windows 95 (mis à jour avec VRDRUPD.EXE), et Windows 98 
utilisent quant à eux des mots de passe chiffrés. \\

Pour résoudre ce problème, deux solutions s'offrent à nous. \\

La première consiste à modifier la base de registre de Windows pour qu'il ne chiffre plus les mots de passe mais 
ceci est assez hasardeux et peu souhaitable si l'on cherche un tant soit peu à sécuriser les accès. \\

La seconde est celle qui doit être retenue, et consiste à demander poliment à Samba d'utiliser des mots de
passe chiffrés par l'ajout de la ligne suivante dans smb.conf :

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
	\>\>encrypt passwords = yes\\
\end{tabbing}
}

Le chiffrement utilisé est celui du protocole SMB et non plus celui du monde UNIX, il convient donc de créer un 
fichier d'utilisateur supplémentaire appelé smbpassd qui ne sert qu'à la connexion au serveur. \\

Ceci est réalisé grâce à la commande smbpasswd :

\texttt{
\begin{list}{}
	\item \$ smbpasswd -a toto
	\item New SMB password: 
	\item Retype new SMB password: 
	\item Added user toto.
	\item Password changed for user toto. \\
\end{list}
}

Ce nouveau fichier ne se substitue pas à /etc/password. C'est toujours grâce à lui que l'accès aux fichiers
est réalisé : l'écriture et la lecture de fichiers contenus dans un partage sont 
dépendants des droits UNIX sur ceux-ci. C'est pour cela que l'utilisateur doit exister dans les deux fichiers. \\

Un problème peut cependant apparaitre lorsque l'on essaye de créer un compte UNIX avec un nom d'utilisateur Windows 
trop long (en général plus de 8 caractères). Il faut dans ce cas utiliser le paramètre \texttt{username map} de la section 
\texttt{[global]} qui prend en argument un nom de fichier contenant la relation nom UNIX \textless=\textgreater~nom Windows. \\

Dans username.map on aura par exemple : \\
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
	\>\>\texttt{root = administrateur} \\
\end{tabbing}

Logons nous en tant que toto avec le mot de pass toto sur une station Windows 9x, et tapons : 
\texttt{
\begin{list}{}
	\item C:\textbackslash>net use t: \textbackslash \textbackslash smb\textbackslash toto
	\item Exécution achevée. \\
\end{list}
}	
Le disque T: est desormais associé au répertoire personnel de l'utilisateur toto.

%notes :

%\texttt{
%\begin{list}{}
%\item smbclient -s pouet.conf -R wins -L samba -N <- forcer l'accès avec le serveur WINS ki va bien
%\item nmblookup -B ip\_wins samba <- forcer la résolution de nom sur le bon serveur WINS
%\end{list}
%}


\newpage

\chapter{Exemple d'utilisation}

On va étudier les paramètres intéressants de Samba à partir d'un cas réel. 

Prenons
le cas d'une entreprise possédant trois services :
\begin{list}{}
	\item direction
	\item technique
	\item comptabilité \\
\end{list}

On va créer les trois partages correspondants ainsi que les répertoires personnels des utilisateurs de ces services.

\section{Création des partages}

On crée donc trois groupes UNIX avec \texttt{groupadd} : direction, compta et technique.
Puis on crée les utilisateurs de ces 3 groupes par : 

\texttt{
\begin{list}{}
\item adduser -d /shares/\textit{groupe}/\textit{utilisateur} -g \textit{groupe} \textit{utilisateur}
\end{list}
}
\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[global] \\
          \>\>workgroup = entreprise\\
          \>\>netbios name = direction\\
          \>\>netbios aliases = compta technique\\
          \>\>server string = Serveur Samba\\
          \>\>interfaces = 127.0.0.1/24 192.168.0.1/24\\
          \>\>bind interfaces only = Yes\\
          \>\>encrypt passwords = Yes\\
          \>\>include = smb.conf.\%L\\
\end{tabbing}
}

\begin{list}{}
\item \texttt{netbios aliases} permet à smbd d'avoir plusieurs noms NetBIOS 
\item \texttt{interfaces} interfaces que Samba va écouter 
\item \texttt{bind interfaces only} limite les connexions aux interfaces spécifiées dans \texttt{interfaces}
\item \texttt{include} est de loin le paramètre le plus intéressant de samba, il fonctionne comme le \#include en C et permet
d'insérer des smb.conf spécifiques par exemple au serveur demandé par l'intérmédiaire des variables \%. \\
\end{list}

Ici on demande à Samba d'insérer un smb.conf relatif au serveur sur lequel on veut se connecter. Dans 
\textbf{/usr/local/samba/lib/}, on a donc :

smb.conf.compta

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[homes] \\
       \>\>comment = Repertoire personnel de \%u \\
        \>\>path = /shares/compta/\%u\\
        \>\>read only = No\\
        \>\>browseable = No\\
        \>\>valid users = +compta\\
\smallskip\>[compta] \\
	\>\>path = /shares/compta/\\
	\>\>browseable = Yes\\
        \>\>read only = No\\
        \>\>valid users = +compta\\
\end{tabbing}
}
	
On fait de m\^{e}me pour direction et technique. \\

On a donc trois serveurs dans le groupe de travail entreprise, possédant chacun des partages dont l'accès est limité 
aux utilisateurs de ces services gr\^{a}ce à \texttt{valid users}. Le + devant le nom compta signifie ici le groupe compta : 
tous les utilisateurs de ce groupe auront ainsi accès à \texttt{[homes]}. \\

L'entreprise grandissant, on décide d'embaucher une secrétaire, celle-ci n'aura accès qu'au partage 
secretariat des 3 sections. \\

On crée l'utilisateur et un groupe secret . \\

On ajoute au fichier smb.conf.compta :  

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[secretariat] \\
	\>\>path = /shares/secretariat/\%L \\
	\>\>browseable = Yes\\
	\>\>valid users = +compta secret\\
	\>\>read only = yes\\
	\>\>write list = secret\\
\end{tabbing}
}

On fait de m\^{e}me pour direction et technique. \\

Seule la secrétaire pourra écrire dans \texttt{[secretariat]}, les utilisateurs du service pourront seulement y lire.
\texttt{write list} permet de spécifier la liste des utilisateurs pouvant écrire dans le partage. \\

A ce stade, il convient de constater que les permissions Samba s'appliquent avant celles du système d'exploitation. Ainsi,
si l'on a un partage avec \texttt{read only = No} de positionné mais que l'utilisateur ne possède pas les droits 
d'écriture sur le répertoire associé, celui-ci ne pourra pas y écrire. \\

Il faut donc qu'il y ait cohésion entre les droits accordés par Samba et par l'OS. \\

Pour permettre à nos utilisateurs de sauvegarder temporairement leurs données on crée dans smb.conf :

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[tmp] \\
          \>\>comment = Partage temporaire\\
          \>\>path = /tmp\\
          \>\>guest ok = Yes\\
\end{tabbing}
}

\texttt{guest ok} permet à tout le monde de se connecter à ce partage, aucun mot de passe ne sera demandé. \\

On décide maintenant de partager un lecteur de cdrom on ajoute \texttt{[cdrom]} dans le smb.conf : 

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[cdrom] \\
	\>\>comment = Lecteur de cede \\
	\>\>path = /mnt/cdrom \\
	\>\>root preexec = mount /mnt/cdrom \\
        \>\>root postexec = umount /mnt/cdrom \\
\end{tabbing}
}
		
Les paramètres \texttt{preexec} et \texttt{postexec} permettent d'executer des commandes à la connexion et à la 
déconnexion au partage. Le préfixe root indique qu'elles seront lancées sous le super utilisateur.

\section{Impression}

Notre entreprise veut maintenant se doter d'une imprimante. \\

L'impression d'un document nécessite trois étapes : 
\begin{list}{}
\item ouverture du fichier
\item écriture
\item fermeture \\
\end{list}

A ce stade, \texttt{smbd} se charge de l'impression. \\

Pour créer une imprimante via Samba, il suffit de créer le partage suivant dans smb.conf :

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[imprimante] \\
	\>\>printable = yes \\
	\>\>printer = lp \\
	\>\>path = /var/spool/lpd \\
\end{tabbing}
}

Une fois le fichier écrit dans \textbf{/var/spool/lpd} celui sera imprimé grâce à \texttt{lp}. \\

Comme déja vu lors de la présentation de smb.conf, on peut grâce à \texttt{[printers]}, créer des imprimantes à la volée
selon /etc/printcap. Le paramètre \texttt{load printers = yes} dans \texttt{[global]} permet de les rendre visibles.

\section{Sous-réseaux} 

La société s'agrandit et est désormais présente dans deux lieux géographiques différents reliés entre eux grâce à l'Internet.
SMB utilisant le broadcast pour la résolution des noms et l'annoncement des machines sur le réseau, on ne va pas pouvoir 
l'utiliser tel quel dans cet environnement routé. \\

On va donc utiliser des serveurs WINS, cependant passer sur tous les postes clients pour configurer ce système 
est fastidieux, nous allons donc demander à
Samba d'enregistrer les annoncements et de répondre aux requêtes WINS grâce à \texttt{wins proxy}. On va aussi configurer les deux
\texttt{smbd} pour être \texttt{domain master browser} et \texttt{local master browser}.\\

Ajoutons les paramètres suivants dans la section \texttt{[global]} du sous-réseau A : 

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill 
\>\>domain master browser = Yes\\
\>\>remote browse sync = IP du serveur Samba sur le sous-réseau B\\
\>\>wins support = Yes\\ 
\>\>wins server = IP du serveur Samba sur le sous-réseau B\\ 
\end{tabbing}
}


Et dans pour le sous-réseau B : 

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>\>local master = Yes \\
\>\>prefered master = Yes \\
\>\>os level = 99 \\
\>\>wins support = Yes\\ 
\>\>wins server = IP du seveur Samba sur le sous-réseau A\\ 
\end{tabbing}
}

\begin{list}{}
\item \texttt{remote browse sync} va permettre la synchornisation de la browse list en faisant appel au master browser du 
sous-réseau B
\item \texttt{os level} demande à \texttt{smbd} de mentir et ainsi devenir \texttt{master browser} du sous-réseau B
\end{list}

\section{Paramètres remarquables}

Un certain nombre de paramètres n'ont pas été abordés dans les sections précédentes mais demeurent néanmoins intéressants. \\

\begin{center}
\begin{tabular}{c|p{8cm}}
paramètre & signification \\
\hline available & active ou désactive un partage \\
copy & clone le service donné en arguments dans le service courant \\
create mask/mode & permissions UNIX avec lesquelles sera crée un fichier\\
allow/deny hosts & machines autorisées ou non à utiliser les partages\\
message command & commande à lancer à la reception d'un message \\
\end{tabular}
\end{center}

Si l'on a installé Samba en utilisant \texttt{./configure --with-syslog}, on peut grâce aux paramètres \texttt{syslog *}
enregistrer tous les messages en passant par \texttt{syslogd}. \\

Les options \texttt{printer driver *} permettent d'automatiser la configuration de l'imprimante sur les postes Windows.

\newpage

\chapter{Les commandes fournies par Samba}

Ce chapitre est une présentation des commandes offertes avec Samba qui sont les plus utiles. 

\section{smbclient}

 Elle permet d'accèder à des partages en ligne de commande comme avec un client ftp classique. On peut également
s'en servir pour envoyer des messages, lister les partages d'une machine, ou bien imprimer un fichier. \\

Lister les partages :

\texttt{
\begin{tabbing}
\$ smbclient -L //samba -N \\
added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 \\
Domain=[SMB] OS=[Unix] Server=[Samba 2.0.6] \\ \\
aaaaaaaa\=aaaaaaaaaaaaa\=aaaaaaaa\=aaaaaaaaaaaaaaaaaaaaaaaaaaaa \kill
        \>Sharename     \>Type       \>Comment \\ 
        \>---------      \>-----      \>-------- \\
        \>tmp            \>Disk      \>Partage temporaire\\
        \>cdrom          \>Disk      \>Lecteur de cede\\
        \>IPC\$          \>IPC       \>IPC Service (Serveur Samba)\\ \\
        \smallskip\>Server               \>\>Comment\\
        \>---------            \>\>-------- \\
	\>SAMBA                \>\>Serveur Samba\\ \\
        \smallskip\>Workgroup            \>\>Master\\
        \>---------            \>\>--------\\
        \>SMB                  \\
\end{tabbing}
}

\begin{list}{}
\item -N : smbclient ne demandera pas de mot de passe \\
\end{list}

Lister les partages sur une machine distante en utilisant un serveur WINS particulier :
\texttt{
\begin{list}{}
\item \$ smbclient -s pouet.conf -L toto -N \\
\end{list}
}

où pouet.conf contient : 

\texttt{
\begin{tabbing}
aaaaaaa\=aaaa\=aa \kill
\>[global] \\
\>\>wins server = 192.168.0.1 \\
\>\>name resolve order = wins\\
\end{tabbing}
}

Envoyer un message : 
\texttt{
\begin{list}{}
\item \$ smbclient -M machine
\item test d'envoi de message \\
\end{list}
}

Options remarquables :
\begin{list}{}
\item -R \textit{ordre des moyens de résolution de noms} : utiliser seulement ces types de résolutions
\item -I \textit{IP destination} : se connecter à cette IP
\item -U \textit{nom d'utilisateur} : utiliser cet utilisateur
\item -D \textit{répertoire} : commencer depuis ce répertoire \\
\end{list}

\section{nmblookup}

 Cette commande permet de trouver l'IP d'une machine à partir de son nom
\texttt{
\begin{list}{}
\item \$ nmblookup samba 
\item querying samba on 192.168.0.255
\item 192.168.0.1 samba<00>\\
\end{list}
}
options remarquables :
\begin{list}{}
\item -M : rechercher le master browser
\item -S : lister les ressources après que l'Ip ait été retrouvée
\item -a \textit{adresse IP} : lister les ressources
\item -R : 
\item -B \textit{adresse IP de broadcast} : effectuer la résolution de nom via cette IP
\item -U \textit{adresse IP du serveur WINS} : idem mais vers un serveur WINS \\
\end{list}

\texttt{
\begin{tabbing}
\$ nmblookup -A 192.168.0.1 \\
Looking up status of 192.168.0.1 \\
received 12 names \\
aaaaaaa\=aaaaaaaaaaaaaaaa\=aaaaaaaaaaaaaaaaaaaaaaa\=aaaaaaaaaaaaaaaaaaa \kill
        \>SAMBA           \>\textless 00\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>SAMBA           \>\textless 03\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>SAMBA           \>\textless 20\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>COMPTA          \>\textless 00\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>COMPTA          \>\textless 03\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>COMPTA          \>\textless 20\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>SMB             \>\textless 00\textgreater~- \textless GROUP\textgreater~ \>M \textless ACTIVE\textgreater~  \\
        \>SMB             \>\textless 1b\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>SMB             \>\textless 1e\textgreater~- \textless GROUP\textgreater~ \>M \textless ACTIVE\textgreater~  \\
        \>TECHNIQUE       \>\textless 00\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>TECHNIQUE       \>\textless 03\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
        \>TECHNIQUE       \>\textless 20\textgreater~-         \>M \textless ACTIVE\textgreater~  \\
num\_good\_sends=0 num\_good\_receives=0 \\ \\
la ligne : \\
        \>SAMBA           \>\textless 00\textgreater~-        \>M \textless ACTIVE\textgreater~
\end{tabbing}
}

Nous donne le nom NetBIOS associée à cette IP
 
\section{smbwrapper \& smbmount/smbumount}

 Ces commandes permettent de rendre transparente l'utilisation d'un partage. En effet, elles donnent l'impression 
que celui-ci fait partie du système de fichier. 

Pout utiliser smbwrapper, tapons : 

\texttt{\begin{list}{}
\item \$ smbsh 
\item Username: doug
\item Password: \\
\end{list}}

Puis pour lister le contenu du répertoire personnel de l'utilisateur : 
\texttt{
\begin{list}{}
\item \$ ls /smb/samba/doug \\
\end{list}
}

Où \textbf{/smb} n'existe pas sur le système, Samba étant le nom de la machine sur laquelle on souhaite accéder au partage doug. \\

Toutes les commandes habituelles sur les fichiers deviennent valides cependant, on ne peut pas éxecuter de programmes 
depuis le partage. \\

La solution de choix sur un système Linux 2.2.x est l'utilisation du module smbfs, on va ainsi pouvoir monter et 
démonter des partages comme on l'aurait fait avec des disques durs. \\

\texttt{
\begin{list}{}
\item \# smbmount //samba/benz /home/doug/samba/ -o username=benz,uid=doug,gid=doug \\
\end{list}
}

On peut voir qu'avec l'option -o on peut passer un certain nombre de paramètres à smbmount, en lui demandant 
notamment de donner les droits sur le point de montage ainsi crée à tel ou tel utilisateur.

\texttt{
\begin{list}{}
\item \# mount
\item /dev/sdb1 on / type ext2 (rw)
\item none on /proc type proc (rw)
\item /dev/sdb6 on /home type ext2 (rw)
\item /dev/sdb7 on /softs type ext2 (rw)
\item /dev/scd0 on /mnt/cdrom type iso9660 (ro) 
\item //samba/benz on /home/doug/samba type smbfs (0) \\
\end{list}
}

Comme on peut le voir ici, le partage est bien considéré comme faisant partie du système de fichier.  \\

On démontera le système de fichier de la façon suivante :
\texttt{
\begin{list}{}
\item \# smbumount /home/doug/samba/ \\
\end{list}
}

Il est intéressant de positionner le bit setuid à un sur smbmount et smbumount pour permettre aux utilisateurs 
d'accéder aux partages. \\

En utilisant smbfs, on arrive à éxecuter des programmes résidant sur le partage sur notre machine.

smbtar est un script utilisant smbclient et permettant de sauvegarder des données stockées sur un système distant. \\

Ainsi :

\texttt{
\begin{list}{}
\item \$ smbtar -s samba -u benz -x benz -p \textit{mot de passe} -t home.tar \\
\end{list}
}

Avec cette commande, j'ai sauvegardé le contenu du partage \texttt{-p} sur la machine \texttt{samba} dans le fichier
\texttt{-t}. Il est à déplorer que le mot de passe ne soit pas demandé s'il n'est pas fourni en ligne de commande. \\

Le SMB HOWTO\footnote{Disponible sur \url{http://www.freenix.org/linux}} montre comment effectuer périodiquement des sauvegardes
de partages disants.


\section{smbstatus}
 
smbstatus permet de connaitre les connexions en cours avec le serveur \texttt{smbd}. \\

\texttt{
\begin{tabbing}
\=aaaaaaaaa\=aaaaaaaa\=aaaaaaaa\=aaaaaaaa\=aaaaaaaaaaaaaaaaaaaaaaaa\=aaaaaaaaa\=aaaaaaaaaaaaaaaaaa \kill
\$ smbstatus \\
\smallskip Samba version 2.0.6 \\
\>Service      \>uid      \>gid      \>pid     \>machine\\
------------------------------------------------------------------------------------------------------------------------\\
\>benz         \>benz     \>benz       \>343   \>quicky (192.168.0.2) \>Fri Apr  \>7 16:39:52 2000\\ \\
\smallskip No locked files \\ \\
aaa\=aaaaaaaa \kill
Share mode memory usage (bytes): \\
   \>1048464(99\%) free + 56(0\%) used + 56(0\%) overhead = 1048576(100\%) total \\
\end{tabbing}
}

\section{testparm}
 
La commande que l'on se doit d'utiliser après chaque modification manuelle de smb.conf, car elle indique les 
fautes dans celui-ci. 

\chapter{Outils de configuration de Samba}

Avant de les utiliser, il convient de bien connaître la syntaxe de smb.conf, et donc de bien avoir lu le fichier man de smb.conf. \\

Ksamba, et GnoSamba fonctionnent sous X-Window, SmbEdit sous Windows. Ils permettent de créer en quelques clics de souris des
partages et de leur attribuer simplement un certains nombre de paramètres. Comanche, l'outil de configuration d'Apache permet depuis peu de paramétrer Samba. \\

SWAT et Webmin sont particulièrement intéressants car ils permettent la configuration à distance de Samba via un navigateur web. On
notera que SWAT ne devient réellement utilisable que dans le contexte d'une connexion sécurisée par SSL. \\

Enfin, l'outil le plus utile est gsmb qui permet de faire la relation entre les fichiers /etc/passwd et smbpasswd à travers
une interface très pratique. \\

Se les procurer :
\begin{list}{}
\item Ksamba : \url{http://www.kneschke.de/projekte/ksamba}
\item GnoSamba : \url{http://se.samba.org/samba/GUI/}
\item Smbedit : \url{http://se.samba.org/samba/smbedit/intro.htm}
\item SWAT : fourni avec les sources de Samba
\item Webmin : \url{http://www.webmin.com/webmin/}
\item gsmb : \url{http://savage.iut-blagnac.fr/projets/developpement/gsmb/}
\item Comanche : \url{htpp://www.comanche.org}
\end{list}

\chapter{Conclusion}

A partir de ce document, on va pouvoir commencer à utiliser pleinement Samba. 
Cependant certains points n'ont pas
été abordés et semblent prometteurs comme la fonction de Contrôleur Principal de Domaine, le partage de mots de
passe via LDAP, et les connexions sécurisées via SSL. \\

Samba est simple d'utilisation, très documenté, et plus important encore bénéficie d'une équipe de développement
très active. C'est donc un outil de choix pour remplacer des machines NT dans un environnement Windows, d'autant 
que la fonction PDC semble de mieux en mieux supportée. 

\addcontentsline{toc}{chapter}{Bibliographie}
\begin{thebibliography}{1}

\bibitem{sam}
Richard \textsc{Sharpe}, Gerald \textsc{Carter} \\
\emph{Sams Teach Yourself Samba in 24 Hours} \\
Sams, 1999 

\bibitem{o'reilly}
Robert \textsc{Eckstein}, David \textsc{Collier-Brown}, Peter \textsc{Kelly} \\
\emph{Using Samba} \\
O'Reilly, 1999

\bibitem{what's}
Richard \textsc{Sharpe}
\emph{Just what is SMB ?} \\
\url{http://anu.samba.org/cifs/docs/what-is-smb.html} \\
1999

\bibitem{RFC}
\emph{RFC 1001 \& 1002} \\
\url{ftp://ftp.ripe.net} \\
1987

\bibitem{cifs}
\url{http://www.cifs.com}

\bibitem{news}
\url{news.protocol.smb}

\bibitem{doc}
Les documents de \textbf{samba-x.x.x/docs/}

\bibitem{howto}
\emph{SAMBA HOWTO} \\
Disponible sur \url{http://www.freenix.org/linux}

\end{thebibliography}

\end{document} 

