<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "/usr/local/share/xml/docbook/4.2/docbookx.dtd"


[
<!ENTITY win    "<productname>Windows</productname>">
<!ENTITY ms    "<trademark>Microsoft</trademark>">

]>
<article class="techreport" lang="fr" >
  <articleinfo>


    <author>
<firstname>Ivan</firstname>">
<surname>Kurzweg</surname>
    </author>
    <title> Samba</title>
    <copyright>
      <holder>Ivan Kurzweg</holder>
      <year>2002 - 2006</year>
    </copyright>

    <legalnotice>
<para>
Permission to use, copy, modify, and distribute this documentation for any purpose with or without fee is here by granted, provided that the above copyright notice and this permission notice appear in all copies.
</para>        


    </legalnotice>

    <keywordset>
      <keyword>samba, unix</keyword>
    </keywordset>
  </articleinfo>
  
  <abstract>
    <para>Samba est une implédmentation Open Source du protocole Server Message Block (SMB). Il permet l'interaction sur un réseau de &ms; &win;, Linux, UNIX et d'autres systèmes d'exploitation, permettant ainsi l'accés à des fichiers basés sur &win; et à des partages d'imprimantes. L'utilisation de SMB par Samba lui permet d'apparaître comme un serveur &win;  aux clients &win; . La documentationn officielle de Samba est disponible <ulink url="HowTo/index.html">ICI</ulink> en local, pour la réalisation des exercices et des compléments d'informations. </para>

  </abstract>

  <sect1>
    <title>Présentation de Samba</title>
    <para> La  version 3 de Samba, a incorporé de nombreuses améliorations par rapport aux versions précédentes, y compris :  
<itemizedlist>
	<listitem><para>    La possibilité de faire partie d'un domaine Active Directory au moyen de LDAP et Kerberos</para></listitem>
	<listitem><para>      La prise en charge intégrée de Unicode pour l'internationalisation</para></listitem>
	<listitem><para>    La prise en charge de connexions client &ms; &win; XP Professional aux serveurs Samba sans devoir toucher à la base de registre local</para></listitem></itemizedlist>
</para>
    <para>Samba a largement participé à l'intégration de systèmes Unix dans des environnements &ms;, en proposant en particulier les fonctionnalités suivantes : 
    
<itemizedlist>
	<listitem><para>   Mettre des arborescences de répertoires et des imprimantes à la disposition de clients Linux, UNIX et  &win;</para>  </listitem>
    <listitem><para>   Aider lors de la navigation du réseau (avec ou sans NetBIOS) </para>  </listitem>
    <listitem><para>     Authentifier les connexions de domaines &win; </para>  </listitem>
    <listitem><para>    Fournir la résolution du serveur de noms Windows Internet Name Service (WINS) </para>  </listitem>
    <listitem><para>    Agir en tant que contrôleur principal de domaine (ou PDC, de l'anglais Primary Domain Controller) de type &win; NT </para>  </listitem>
    <listitem><para>   Agir en tant que Contrôleur de Domaine Secondaire (ou BDC, de l'anglais Backup Domain Controller) pour un contrôleur principal (PDC) bas~ sur Samba </para>  </listitem>
    <listitem><para>   Agir comme un serveur <emphasis>membre</emphasis> du domaine Active Directory </para>  </listitem>
    <listitem><para> Joindre un PDC &win; NT/2000/2003  </para>  </listitem>
  </itemizedlist>
  </para>
    <para>Cependant, et en attendant sa version 4 qui a nécessité plus de 4 ans de développement, Samba est pour le moment limiter, en particulier pour ces tâches : 
    
<itemizedlist>
	<listitem><para>
      Agir comme un BDC pour un PDC &win; (et vice versa)</para>  </listitem>
    
    <listitem><para>
      Agir comme le contrôleur d'un domaine Active Directory</para>  </listitem> </itemizedlist>
  </para>

    <sect2>
      <title>Options d'installation sur FreeBSD</title>
<para>L'installation de Samba via les logiciels portés de Samba propose un certain nombre d'options de compilation, permettant d'ajouter/enlever des fonctionnalités en fonction de chaque environnement et besoin. Ces options peuvent varier suivant les versions de Samba : 
<itemizedlist>
	  <listitem><para>[X] LDAP                      With LDAP support</para>  </listitem>
<listitem><para>[X] ADS                       With Active Directory support</para>  </listitem>
<listitem><para>[X] CUPS                      With CUPS printing support</para>  </listitem>
<listitem><para>[X] WINBIND                   With WinBIND support</para>  </listitem>
<listitem><para>[X] ACL_SUPPORT               With ACL support</para>  </listitem>
<listitem><para>[X] SYSLOG                    With Syslog support</para>  </listitem>
<listitem><para>[X] QUOTAS                    With Quota support</para>  </listitem>
<listitem><para>[X] UTMP                      With UTMP support</para>  </listitem>
<listitem><para>[ ] MSDFS                     With MSDFS support</para>  </listitem>
<listitem><para>[ ] SAM_XML                   With XML smbpasswd backend</para>  </listitem>
<listitem><para>[ ] SAM_MYSQL                 With MYSQL smbpasswd backend</para>  </listitem>
<listitem><para>[ ] SAM_PGSQL                 With PostgreSQL smbpasswd backend</para>  </listitem>
<listitem><para>[ ] SAM_OLD_LDAP              With Samba2.x LDAP smbpasswd backend</para>  </listitem>
<listitem><para>[X ] PAM_SMBPASS               With SMB PAM module</para>  </listitem>
<listitem><para>[X] POPT                      With installed POPT library</para>  </listitem></itemizedlist>

</para>
      <para>Le script  <filename>/usr/local/etc/rc.d/samba</filename> et le fichier <filename>/usr/local/etc/smb.conf.sample</filename> sont créés lors de la compilation. Le script permet de contrôler les démons Samba, et le fichier propose une configuration de Samba, à modifier bien sûr . Il est à noter que sous FreeBSD, il est nécessaire d'autoriser spécifiquement le démarrage de Samba dans le fichier <filename>rc.conf</filename> pour utiliser ces scripts. 

<informalexample>
	    <programlisting>
<![CDATA[arrakis# /usr/local/etc/rc.d/samba stop
Stopping smbd.
Stopping nmbd.
arrakis# /usr/local/etc/rc.d/samba start
Removing stale Samba tdb files: ........ done
Starting nmbd.
Starting smbd.
arrakis# /usr/local/etc/rc.d/samba  restart
Performing sanity check on Samba configuration: OK
Stopping smbd.
Stopping nmbd.
Removing stale Samba tdb files: ...... done
Starting nmbd.
Starting smbd.

]]></programlisting></informalexample>


<informalexample>
	    <programlisting>
<![CDATA[
# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options (perhaps too
# many!) most of which are not shown in this example
#
# For a step to step guide on installing, configuring and using samba, 
# read the Samba-HOWTO-Collection. This may be obtained from:
#  http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
#
# Many working examples of smb.conf files can be found in the 
# Samba-Guide which is generated daily and can be downloaded from: 
#  http://www.samba.org/samba/docs/Samba-Guide.pdf
#
# Any line which starts with a ; (semi-colon) or a # (hash) 
# is a comment and is ignored. In this example we will use a #
# for commentry and a ; for parts of the config file that you
# may wish to enable
#
# NOTE: Whenever you modify this file you should run the command "testparm"
# to check that you have not made any basic syntactic errors. 
#
#======================= Global Settings =====================================
[global]

# workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
   workgroup = MYGROUP

# server string is the equivalent of the NT Description field
   server string = Samba Server

# Security mode. Defines in which mode Samba will operate. Possible 
# values are share, user, server, domain and ads. Most people will want 
# user level security. See the Samba-HOWTO-Collection for details.
   security = user
....
]]></programlisting></informalexample>
</para>
<para>Enfin, quelques utilisatires sont fournis avec samba, dont une partie est décrite dans les paragraphes suivants.</para>
    </sect2>

    <sect2>
      <title>Démons de samba</title>
      <para>Samba est composé de trois démons (<filename>smbd</filename>, <filename>nmbd</filename> et <filename>winbindd</filename>). Deux services (<filename>smb</filename> et <filename>windbind</filename>) contrôlent la manière selon laquelle les démons sont démarrés et arrêtés et ainsi que d'autres fonctionnalités en relation avec les services.

<orderedlist>
	  <listitem>
	    <para><filename>smbd</filename> :  Le démon <filename>smbd</filename> fournit des services de partage de fichiers et d'impression aux clients &win;. En outre, il est responsable de l'authentification des utilisateurs, du verrouillage des ressources et du partage des données par le biais du protocole SMB. Les ports par défaut sur lesquels le serveur est à l'écoute de tout trafic SMB sont les ports TCP 139 et 445. Le démon smbd est contrôlé par le service <filename>smb</filename></para>
	  </listitem>
	  <listitem>
	    <para> <filename>nmbd</filename> : Le démon serveur <filename>nmbd</filename> comprend et répond à toutes les requêtes de service de nom NetBIOS telles que celles produites par SMB/CIFS dans des systèmes basés sur &win;. Parmi ces derniers figurent les clients &win; 95/98/ME, &win; NT,  &win; 2000, &win; XP et LanManager. Ce démon joue également un rôle au niveau des protocoles de navigation qui constituent l'affichage du voisinnage réseau (<foreignphrase>Network Neighborhood</foreignphrase>) de &win;. Le port par défaut sur lequel le serveur attend du trafic NMB est le port UDP 137.

Le démon <filename>nmbd</filename> est contrôlé par le service <filename>smb</filename>. </para>
	  </listitem>
	  <listitem>
	    <para><filename>Winbind</filename> :  Le service <filename>winbind</filename> effectue la résolution entre les informations relatives aux utilisateurs et aux groupes sur un serveur Windows NT et les rend utilisables par des plates-formes UNIX. Cette opération est possible grâce à l'utilisation d'appels RPC de &ms;, du système PAM (<foreignphrase>Pluggable AuthenticationModule</foreignphrase>, ou module d'authentification enfichable) et du NSS (<foreignphrase>Name Service Switch</foreignphrase>). Ceci permet aux utilisateurs de domaines &win; NT d'apparaître comme des utilisateurs UNIX sur une machine UNIX. Bien qu'intégré à la distribution Samba, le service <filename>winbind</filename> est contrôlé séparément du service <filename>smb</filename>. Le démon <filename>winbindd</filename> est contrôlé par le service <filename>winbind</filename> et il n'est pas nécessaire que le service <filename>smb</filename> soit lancé pour que le démon tourne. </para>
	  </listitem>
	</orderedlist>

</para>
    </sect2>
    <sect2>
      <title>Outils et utilitaires de la distribution Samba</title>
      <sect3>
	<title>findsmb</title>
	<para>

Le programme <command>findsmb  <option>subnet_broadcast_address</option></command> est un script Perl qui permet de recueillir des informations sur les systèmes compatibles avec SMB sur un sous-réseau particulier. Si aucun sous-réseau n'est spécifié, le sous-réseau local est utilisé. Parmi les éléments spécifiés figurent l'adresse IP, le nom, groupe de travail ou nom de domaine NetBIOS, le système d'exploitation et la version.

L'exemple suivant montre la sortie de la commande <command>findsmb</command> exécutée en tant qu'un utilisateur valide du système : 

<informalexample>
	    <programlisting>
<![CDATA[ikare@ix:~$ findsmb

                                *=DMB
                                +=LMB
IP ADDR         NETBIOS NAME     WORKGROUP/OS/VERSION 
---------------------------------------------------------------------
172.17.4.1      POSTE401       [        BAGGINS       ]
172.17.7.2      SRV2          *[ASR] [Windows Server 2003 R2 3790 Service Pack 1] [Windows Server 2003 R2 5.2]
172.17.7.3      SRV3           [ASR] [Windows Server 2003 3790 Service Pack 1] [Windows Server 2003 5.2]
172.17.7.5      SRV5          *[CONCEPT] [Windows Server 2003 R2 3790 Service Pack 1] [Windows Server 2003 R2 5.2]
172.17.7.9      POSTE703      +[HERMES] [Windows 5.1] [Windows 2000 LAN Manager]
172.17.3.10     POSTE310       [BAGGINS] [Windows 5.0] [Windows 2000 LAN Manager]
172.17.3.14     POSTE314       [BAGGINS] [Windows 5.0] [Windows 2000 LAN Manager]
172.17.7.20     POSTE704       [HERMES] [Windows 5.1] [Windows 2000 LAN Manager]
172.17.6.20     POSTE816       [        BAGGINS       ]
]]></programlisting></informalexample>


</para>
      </sect3>


      <sect3>
	<title>nmblookup</title>
	<para> Le programme <command>nmblookup <option>options netbios_name</option></command> effectue la résolution des noms NetBIOS en adresse IP. Le programme diffuse sa demande sur le sous-réseau local jusqu'à ce que la machine cible réponde.

<informalexample>
<programlisting><![CDATA[
ikare@ix:~$ nmblookup SRV2
querying SRV2 on 172.17.255.255
172.17.7.2 SRV2<00>
192.168.31.1 SRV2<00>
192.168.219.1 SRV2<00>
]]></programlisting></informalexample>
 </para>
      </sect3>

      <sect3>
	<title>pdbedit</title>
	<para>

Le programme <command>pdbedit</command> gère les comptes présents dans la base de données de <filename>SAM</filename>. Tous les <emphasis>backends</emphasis> sont pris en charge, y compris <command>smbpasswd</command>, LDAP, NIS+ et la bibliothèque de base de données tdb. 


<informalexample>
<programlisting><![CDATA[
pdbedit  -v -L ikare
Unix username:        ikare
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-761572816-94600713-4071525793-5646
Primary Group SID:    S-1-5-21-761572816-94600713-4071525793-513
Full Name:            
Home Directory:       \\ix\ikare
HomeDir Drive:        
Logon Script:         
Profile Path:         \\ix\ikare\profile
Domain:               IX
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          mar, 19 jan 2038 07:14:07 RET
Kickoff time:         mar, 19 jan 2038 07:14:07 RET
Password last set:    0
Password can change:  0
Password must change: mar, 19 jan 2038 07:14:07 RET
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
]]></programlisting></informalexample>
</para>
      </sect3>

<sect3>
	<title>smbtree</title>
	<para>

Le programme <command>smbtree</command> permet d'otenir l'équivalent du voisinage réseau sous &win;, en mode texte. Il affiche l'ensemble des ressources SMB, en donnant les noms et les partages de chaque poste. Un extrait de <command>smbtree</command> sur le réseau de N3 : 


<informalexample>
<programlisting><![CDATA[
WORKGROUP
        \\POSTE704       
        \\KONIFEXXX_PC   
TOTO
        \\REDREUNION     
                \\REDREUNION\jeux           
                \\REDREUNION\Lettre et CV   
                \\REDREUNION\Mes vid~~os    
                \\REDREUNION\IPC$               IPC distant
SA-AUTREMENT
        \\PC-NELLO       
                \\PC-NELLO\C$                   Partage par défaut
                \\PC-NELLO\ADMIN$               Administration à~ distance
                \\PC-NELLO\E              
                \\PC-NELLO\Counter-Strike Source
                \\PC-NELLO\Téléchargements
                \\PC-NELLO\x86_policy.X   
                \\PC-NELLO\Documents      
                \\PC-NELLO\print$               Pilotes d'imprimantes
                \\PC-NELLO\D$                   Partage par défaut
                \\PC-NELLO\IPC$                 IPC distant

]]></programlisting></informalexample>
</para>
      </sect3>
      <sect3>
	<title>smbcacls</title>
	<para> 

Le programme <command>smbcacls  <option>//server/share   filename   options</option></command> modifie les ACL de &win; dans les fichiers et répertoires partagés par le serveur Samba. </para>
      </sect3>
      <sect3>
	<title>smbclient</title>
	<para>
Le programme <command>smbclient <option>//server/share password options</option></command> est un client UNIX souple qui fournit des fonctionnalités semblables à <command>ftp</command>. </para>
      </sect3>
      <sect3>
	<title>smbcontrol</title>
	<para> 
Le programme <command>smbcontrol <option>options destination messagetype  parameters</option> </command> envoie des messages de contrôle aux démons <filename>smbd</filename> ou <filename>nmbd</filename> en cours d'exécution. L'exécution de <command>smbcontrol -i</command> lance la commande de manière interactive jusqu'à ce qu'une ligne blanche ou que la lettre 'q' soit saisie. </para>
      </sect3>
      <sect3>
	<title>smbgroupedit</title>
	<para> 

Le programme <command>smbgroupedit <option>options</option></command> établit la correspondance entre les groupes Linux et les groupes Windows. Il permet également à un groupe Linux d'être un groupe de domaine. </para>
      </sect3>
      <sect3>
	<title>smbmount</title>
	<para> 

Le programme <command>smbmount <option>//server/share mount_point -o options</option></command> utilise le programme de bas niveau <command>smbmnt</command> pour monter un système de fichiers <filename>smbfs</filename> (partage Samba).  La commande <command>mount -t smbfs</command> est également valide.
</para>

      </sect3>
      <sect3>
	<title>smbpasswd</title>
	<para>

Le programme <command>smbpasswd <option>options username password</option></command> gère les mots de passe cryptés. Ce programme peut être exécuté aussi bien par un super-utilisateur pour changer le mot de passe d'un utilisateur quelconque que par un utilisateur ordinaire pour changer son propre mot de passe Samba. </para>
      </sect3>
      <sect3>
	<title>smbstatus</title>

	<para>
Le programme <command>smbstatus <option>options</option></command> affiche le statut des connexions actuelles à un serveur Samba. </para>
      </sect3>
      <sect3>
	<title>testparm</title>

	<para>
Le programme <command>testparm <option>options filename hostname IP_address</option></command> vérifie la syntaxe du fichier <filename>smb.conf</filename>. Si votre fichier <filename>smb.conf</filename> se trouve dans l'emplacement par défaut (<filename>/etc/samba/smb.conf</filename> pour Linux, <filename>/usr/local/etc/samba/smb.conf</filename>), il n'est pas nécessaire de préciser l'emplacement. La spécification du nom d'hôte et de l'adresse IP pour le programme <command>testparm</command> permet de vérifier que les fichiers <filename>hosts.allow</filename> et <filename>host.deny</filename> sont bien configurés correctement. Le programme <command>testparm</command> affiche également un résumé de vos fichiers <filename>smb.conf</filename> et le rôe du serveur (autonome, domaine, etc.) après avoir effectué les tests. Ce programme est utile lors du débogage étant donné qu'il exclut les commentaires et fournit les informations de manière concise pour des administrateurs expérimentés. 

<informalexample>
<programlisting><![CDATA[
testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
        workgroup = MSHOME
        server string = %h server (Samba, Ubuntu)
        obey pam restrictions = Yes
        passdb backend = tdbsam
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 1000
        dns proxy = No
        panic action = /usr/share/samba/panic-action %d
        invalid users = root

[printers]
        comment = All Printers
        path = /var/spool/samba
        create mask = 0700
        printable = Yes
        browseable = No

[print$]
        comment = Printer Drivers
        path = /var/lib/samba/printers
]]></programlisting></informalexample>

</para>


      </sect3>
    </sect2>
</sect1>



<!-- ============================== CHAPITRE 2 =================================== -->



  <sect1>
    <title>Type de serveurs Samba</title>
    <para>La plus grande partie de la configuration de Samba passe par la modification du fichier <filename>/etc/samba/smb.conf</filename> (<filename>/usr/local/etc/samba/smb.conf</filename> sur FreeBSD). Elle regroupe plusieurs sections, permettant de définir le mode de fonctionnement du serveur, les partages réalisés, et les informations relatives à la gestion du réseau.</para>
<para>On peut regrouper les différents rôles d'un serveur Samba au sein d'un réseau en 3 groupes : serveur de fichier, controleur de domaine et serveur d'impression. </para>

    <sect2>
      <title>Serveur de fichiers</title>
      <para>Par abus de langage, nous allons désigné par "serveur de fichier" une configuration où Samba est placé en tant que serveur d'un groupe de travail, ou membre d'un groupe de travail. Un serveur autonome n'est pas une contrôleur de domaine et ne joue aucun rôle dans un domaine, </para>
      <sect3>
	<title>Mode anonyme en lecture seule</title>
	<para>Le fichier <filename>smb.conf</filename> suivant montre un extrait du fichier de configuration nécessaire pour permettre l'implémentation d'un partage de fichiers anonyme en lecture-seule. Le paramètre <varname>security = share</varname> rend un partage anonyme. Notez bien que les niveaux de sécurité pour un seul serveur Samba ne peuvent pas ~tre mélangés. La directive de sécurité (<varname>security</varname>) est un paramètre global pour Samba qui se trouve dans la section de configuration <varname>[global]</varname> du fichier <filename>smb.conf</filename>.

<informalexample>
<programlisting><![CDATA[
[global]
workgroup = FREMENS
netbios name = FREMENS_SRV
security = share

[data]
comment = Serveur de documentation
path = /export
read only = Yes
guest only = Yes
]]></programlisting></informalexample>

Avec une telle configuration, le serveur Samba est accessible par un poste Windows, sans besoin de mot de passe. Le répertoire est en lecture seule.

</para>
      </sect3>

  <sect3>
	<title>Mode anonyme en lecture / écriture</title>
	<para>Dans le cas du fichier de configuration suivant, on obtient un partage réseau accessible de manière anonyme en lecture/écriture. Bien entendu, une telle politique de partage de ressources n'est pas à privilégier ! L'écriture est possible grâce à la directive <varname>read only =no</varname>.  es directives force user et force group sont également ajoutées pour appliquer les règles de propriété à tout fichier ajouté et spécifié comme appartenant au partage.


<informalexample>
<programlisting><![CDATA[
[global]
workgroup = FREMENS
netbios name = FRE_SRV
security = share

[data]
comment = Serveur NON sécurisé
path = /export
force user = nobody
force group = nobody
read only = No
guest ok = Yes

]]></programlisting></informalexample>

Ici, le serveur est accessible sans mot de passe. La création de documents est possible selon les droits Unix des répertoires cibles, et la modification/suppression des fichiers est également dépendante des droits Unix de l'utilisateur <filename>nobody</filename> sur les fichiers.

</para>
      </sect3>
  <sect3>
	<title>Mode lecture / écriture sécurisé</title>
	<para>


<informalexample>
<programlisting><![CDATA[
[global]
workgroup = FREMENS
netbios name = FRE_SRV
security = user

[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No

[public]
comment = Partage sécurisé
path = /export
force user = nobody
force group = nobody
read only = No
browseable = Yes

]]></programlisting></informalexample>
Dans ce cas, la connexion au serveur n'est possible que par authentification <foreignphrase>login/password</foreignphrase>. Le prérequis est bien entendu la création de compte Samba ! A la suite du login, tous les utilisateurs ont accès à LEUR répertoire de domiciliation, et au répertoire <filename>public</filename>. 
</para>
      </sect3>
    </sect2>
    <sect2>
      <title>Contrôleur de domaine</title>
      <para>S'il est possible d'intégrer un serveur Linux comme membre d'un domaine Active Directory, nous allons concentrer notre étude que la confguration d'un serveur en temps que contrôleur de domaine (de type NT). La version 4 de Samba permettra d'en faire un contrôleur de domaine Active Directory.</para>

      <para>S'il est possible d'utiliser LDAP pour l'authentification des utilisateurs et ordinateurs sur le domaine, nous allons utiliser le backend de gestionnaire de mots de passe tdbsam, par défaut dans Samba.

<informalexample>
<programlisting><![CDATA[
[global]
workgroup = FREMENS
netbios name = FRE_PDC 
passdb backend = tdbsam
security = user
add user script = /usr/sbin/useradd -m %u
delete user script = /usr/sbin/userdel -r %u
add group script = /usr/sbin/groupadd %g 
delete group script = /usr/sbin/groupdel %g 
add user to group script = /usr/sbin/usermod -G %g %u
add machine script = \
 /usr/sbin/useradd -s /bin/false -d /dev/null \
 -g machines %u

logon script = logon.bat
logon path = \\%L\Profiles\%U
logon drive = H:
logon home = \\%L\%U
domain logons = Yes
os level = 99
preferred master = Yes
domain master = Yes
idmap uid = 15000-20000
idmap gid = 15000-20000

[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No
writable = Yes

[public]
comment = Data
path = /export
force user = nobody
force group = nobody
guest ok = Yes

[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon/scripts
admin users = ed, john, sam
guest ok = No
browseable = No
writable = No

[Profiles]
comment = Roaming Profile Share
path = /var/lib/samba/profiles
read only = No
browseable = No
guest ok = Yes
profile acls = Yes

# Other resource shares
...
...

]]></programlisting></informalexample>


</para>


    </sect2>
    <sect2>
      <title>Serveur d'impression</title>
      <para>Le fichier <filename>smb.conf</filename> suivant montre un extrait du fichier de configuration nédcessaire pour implémenter un serveur d'impression anonyme. Comme nous l'avons montré, le fait de donner à <varname>browsable</varname> la valeur <varname>no</varname>, n'inclut pas l'imprimante dans la liste Voisinnage réseau de Windows. Bien que n'apparaissant pas lors de la navigation, la configuration explicite de l'imprimante est possible.lE serveur Samba n'a aucune responsabilité quant au partage de pilotes d'impression avec le client.

<informalexample>
<programlisting><![CDATA[
[global]
workgroup = FREMENS
netbios name = PRINT_SRV
security = share
printcap name = cups
disable spools= Yes
show add printer wizard = No
printing = cups

[printers]
comment = All Printers
path = /var/spool/samba
guest ok = Yes
printable = Yes
use client driver = Yes
browseable = Yes
]]></programlisting></informalexample>

L'imprimante est donc en accès anonyme. Sécuriser l'accès se ferait en mettant <varname>security = user</varname> dans la section <varname>global</varname>.
</para>
    </sect2>
 </sect1>




<!-- ============================== CHAPITRE 3 =================================== -->
  <sect1>
    <title>Configuration de Samba</title>
    <sect2>
      <title>Le fichier de <filename>smb.conf</filename></title>
      <sect3>
	<title>La section <filename>global</filename></title>
	<para>La section <varname>global</varname> du <filename>smb.conf</filename> permet de définir le rôle et le comportement du serveur samba dans le réseau, en positionnant un certain nombre de paramètres. La liste qui suit n'est pas exhaustive, la lecture du <command>man</command> et de la documentation est un passage obligé.  

<itemizedlist>
	    <listitem>
	      <para><varname>workgroup</varname> : indique le groupe de travail dans lequel Samba est intégré</para>
	    </listitem>
<listitem>
	      <para><varname>server string </varname> : le nom NetBIOS du serveur tel qu'il apparaîtra dans le réseua</para>
	    </listitem>
<listitem>
	      <para><varname>security </varname> : prend une valeur parmi <varname>share, user, server, domain, ads</varname>. 

<itemizedlist>
		  <listitem>
		    <para><varname>share</varname> permet un accès aux ressources en se basant uniquement sur les droits des fichiers Unix</para></listitem>
		  <listitem>
		    <para><varname>user</varname> correspond à l'identification par login/motdepasse. Si l'iauthenfication réussit,  l'attribution d'un GID/UID permet de contrôler l'accès aux ressources pour toute la session</para></listitem>
 <listitem>
		    <para><varname>server</varname> permet d'indiquer à Samba de faire partie d'un domaine NT en tant que serveur membre (ancienne utilisation, obsolète)</para></listitem>
 <listitem>
		    <para><varname>domain</varname> permet d'indiquer à Samba de faire partie d'un domaine NT en tant que serveur membre. Toutes les demandes d'authentification seront relayées au contrôleur de domaine.</para></listitem>
 <listitem>
		    <para><varname>ads</varname> fait du serveur Samba un  membre actif d'un domaine Active Directory et ainsi accepter des tickets Kerberos.</para></listitem>
</itemizedlist>

</para>
	    </listitem>
<listitem>
	      <para><varname>hosts allow</varname> : permet de donner les plages d'adresses IP pouvant accèder au serveur</para>
	    </listitem>
<listitem>
	      <para><varname>printing</varname> : indique le système d'impression à utiliser </para>
	    </listitem>
<listitem>
	      <para><varname>guest account</varname> : indique éventuellement la compte utilisé lors de connexion anonymes. Par défaut il s'agit de <varname>nobody</varname></para>
	    </listitem>
<listitem>
	      <para><varname>log file</varname> : dans le cas d'une valeur de type  <varname>/var/log/samba/log.%m</varname>, permet de spécifier un fichier de journalisation par machine</para>
	    </listitem>
<listitem>
	      <para><varname>passdb backend</varname> : indique le <foreignphrase>backend</foreignphrase> des mots de passe samba. Par défaut il s'agit de <varname>tdbsam</varname>.</para>
	    </listitem>
<listitem>
	      <para><varname>interfaces</varname> : spécifie la liste des interfaces réseau sur lesquelles Samba peut accepter les connexions</para>
	    </listitem>
<listitem>
	      <para><varname>os level</varname> : une valeur élevée augmente les chances d'élection de Samba en temps que maître explorateur dans un Workgroup &win;. </para>
	    </listitem>
<listitem>
	      <para><varname>preferred master</varname> : augmente les chances d'élection de Samba en temps que maître explorateur dans un Workgroup &win;.</para>
	    </listitem>
<listitem>
	      <para><varname>logon script, logon path</varname> : indique les différents scripts et leur emplacements pour des exécutions au démarrage des machines membres d'un domaine NT, ou au login des utilisateurs. </para>
	    </listitem>
<listitem>
	      <para><varname>wins supprt, wins server</varname> : indique si samba peut être serveur Wins, et dans le cas contraire quel est le serveur Samba sur le réseau. </para>
	    </listitem>

<listitem>
	      <para>Les différents scripts permettant la gestion des utilisateurs et des groupes depuis des stations clientes sur le domaine.</para>
	    </listitem>
	  </itemizedlist>

</para>

	<informalexample>
<programlisting><![CDATA[
 [global]
workgroup = FREMENS
server string = FRE_PDC
hosts allow = 172.17.9 
security = user
socket options = TCP_NODELAY
local master = yes
os level = 99
domain master = yes
preferred master = yes
domain logons = yes
logon script = login.bat
logon home = \\serveur\profil\%U
name resolve order = host wins lmhosts bcast
wins support = yes
dns proxy = yes add user script = /usr/sbin/useradd %u
add group script = /usr/sbin/groupadd %g
add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u
delete user script = /usr/sbin/userdel %u
delete user from group script = /usr/sbin/deluser %u %g
delete group script = /usr/sbin/groupdel %g
]]></programlisting></informalexample>

      </sect3>

      <sect3>
	<title>Les partages</title>
	<para>Chaque ressource SMB sur le serveur est spécifiée dans une section de <filename>smb.conf</filename> portant son nom. Les principales options sont les suivantes :
<itemizedlist>
<listitem>
	      <para><varname>path</varname> : chemin du répertoire à partager</para>
	    </listitem>
<listitem>
	      <para><varname>comment</varname> : texte visible dans le voisinage réseau client</para>
	    </listitem>
<listitem>
	      <para><varname>guest ok</varname> :  si <varname>yes</varname> partage en accès libre sans authentification</para>
	    </listitem>
<listitem>
	      <para><varname>valid users</varname> :  liste des utilisateurs autorisés à se connecter à la ressource</para>
	    </listitem>
<listitem>
	      <para><varname>printable</varname> :  partage d'un service d'impression et non d'un répertoire</para>
	    </listitem>
<listitem>
	      <para><varname>writeable</varname> :  permet ou non l'écriture sur le répertoire, contraire de read only</para>
	    </listitem>
<listitem>
	      <para><varname>write list</varname> : tous les utilisateurs autorisés à écrire</para>
	    </listitem>
<listitem>
	      <para><varname>browseable</varname> : visibilité du partage par tous, même les utilisateurs non autorisés</para>
	    </listitem>
<listitem>
	      <para><varname>create mode | mask</varname> :  droits maximum accordés à un fichier créé dans la ressource</para>
	    </listitem>
<listitem>
	      <para><varname>directory mode | mask</varname> : droits maximum accordés à un répertoire créé dans la ressource</para>
	    </listitem>
<listitem>
	      <para><varname>force directory mode</varname> : droits imposés lors de la création du répertoire </para>
	    </listitem>
<listitem>
	      <para><varname>force group </varname> : Impose un groupe propriétaire d'un fichier lors de sa création dans le partage</para>
	    </listitem>
<listitem>
	      <para><varname>hide dot files</varname> :  cache les fichiers cachés</para>
	    </listitem>

<listitem>
	      <para><varname>hosts deny, allow </varname> : toutes les stations interdites, autorisées à accéder à la ressources</para>
	    </listitem>
<listitem>
	      <para><varname>max connections </varname> : nombre maximum de connexions simultanées à la ressources</para>
	    </listitem>
</itemizedlist>
</para>


	<informalexample>
<programlisting><![CDATA[
 [homes]
comment = Domiciliation
browseable = no
writable = yes
force create mode = 0775
force group = resp

[stagiaires]
path = /export/stagiaires
comment = Groupe
writable = yes
browseable = yes
force create mode = 0777

[netlogon]
comment = LogonService
path = /export/netlogon
writable = yes
browseable = no
write list = admin

[profil]
path = /export/profil
browseable = no
writable = yes

[document]
comment = Document
path = /export/document
writable = yes
browseable = yes

[appli]
comment = Applications
path = /export/appli
writable = yes
browseable = yes
write list = admin  
]]></programlisting></informalexample>

      </sect3>
    </sect2>

    <sect2>
      <title>La gestion des comptes</title>

      <sect3>
	<title>Gestion des utilisateurs</title>
	<para>Nous allons nous intéresser à la gestion des utilisateurs utilisant le <foreignphrase>backend</foreignphrase> par défaut, <filename>tdbsam</filename>. L'outil le plus communément utilisé pour ajouter des utilisateurs Samba est <command>smpasswd</command> : 
 
	<informalexample>
<programlisting><![CDATA[
 smbpasswd  [-a]  [-c <config file>] [-x] [-d] [-e] [-D debuglevel] [-n]
                 [-r <remote machine>]     [-R <name resolve order>]      [-m]
                 [-U username[%password]]  [-h]  [-s] [-w pass] [-W] [-i] [-L]
                 [username]
]]></programlisting></informalexample>

<command>smbpasswd</command> permet de faire la correspondance entre les utilisateurs Unix et les utilisateurs Samba. Les informations relatives aux comptes sont stockées dans le fichier <filename>/usr/local/etc/samba/smbpasswd</filename> alors que les mots de passes sont stockés dans <filename>/usr/local/etc/samba/secret.tdb</filename>. 
</para>
	<para>Il n'est donc pas possible de créer un compte samba n'existant pas à priori dans Unix ! L'authentification sur le serveur Samba aura donc pour conséquence de chercher dans les fichiers précédemments cités une correspondance. Si l'utilisateur est correctement authentifé, alors chaque accès à une ressource du système hôte  Samba passera par la vérification des droits Unix correspondant à son compte et à ses <emphasis>groupes</emphasis> unix. </para>

      </sect3>
      <sect3>
	<title>Gestion des comptes  dans un domaine</title>
	<sect4>
	  <title>Avantages d'un domaine</title>
	  <para>La gestion d'un réseau via un domaineamène plusieurs avantages non négligeable : 
<itemizedlist>
	      <listitem>
		<para>SSO</para>
	      </listitem>
	      <listitem>
		<para>Tous les accès réseau et les droits sont gérés depuis le gestionnaire SAM (<foreignphrase>Security Account Manager</foreignphrase>)</para>
	      </listitem>
	      <listitem>
		<para>Les configurations de sécurité des postes &win; peuvent être gérées via les fichiers de stratégie sytème.</para>
	      </listitem>
	      <listitem>
		<para>L'exécution de scripts de démarrage permet de connecter des ressources réseau et d'automatiser certaines tâches.</para>
	      </listitem>
	      <listitem>
		<para>La centralisation des comptes dans une base de données sur un serveur du domaine</para>
	      </listitem>
	    </itemizedlist>
</para>
	  <para>Pour arriver à ce niveau d'intégration des fonctionnalités &win;,  Samba intègre quelques utilitaires complémentaires, permettant par exemple l'ajout des postes &win; au domaine, le <emphasis>mappage</emphasis> entre les groupes &win; et Unix, etc ... </para>
	</sect4>
	<sect4>
	  <title>Ajout d'un poste au domaine</title>
	  <para>L'intégration d'un poste &win; à un domaine passe par sa configuration (<varname>Poste de Travail</varname>). Une demande est alors envoyée au contrôleur de domaine, qui doit ajouter le poste dans sa base (et particulièrement affecter un SID au poste). Dans le cas d'un serveur Samba, le service doit alors soit avoir un compte utilisateur représentant la machine à intégrer, soit créer le compte correspondant automatiquement. </para>
	  <para>La création manuelle d'un compte pour un machine consiste à ajouter un compte Unix standard, n'ayant pas de <varname>Shell</varname> ni de répertoire de domiciliation, et appartenant au groupe <varname>machine</varname>. Ceci est possible en utilisant les utilitaires classiques des distributions Linux ou des systèmes *BSD. </para>
	  <para>La deuxième méthode consiste à prévoir dans le fichier de configuration la commande qui sera exécutée au moment de l'intégration d'un poste dans le domaine. 
	<informalexample>
<programlisting><![CDATA[
add machine script = /usr/sbin/useradd -d /var/lib/nobody -g 100 -s /bin/false -M %u
]]></programlisting></informalexample>

La ligne précédente ajoutée dans la section globale de <filename>smb.conf</filename> permet d'exécuter la ligne de commande <command>/usr/sbin/useradd -d /var/lib/nobody -g 100 -s /bin/false -M %u</command>lors de l'intégration d'un poste au domaine. Bien sûr, il faut adapter la commande à chaque cas précis. 
</para>
	  <para>De la même manière, il est possible de spécifier les différentes commandes à lancer lors de la manipulation  des groupes et des utilisateurs. Ainsi,il devient possible de manipuler les comptes du domaine depuis un poste distant, à condition de disposer des autorisations <varname>root</varname> sur le serveur. </para>
	</sect4>

	<sect4>
	  <title>Mappage des comptes Windows avec les comptes Unix</title>
	  <para>Dans le cas d'une configuration de Samba en PDC, il peut être intéressant de <emphasis>mapper</emphasis> les comptes prédéfinis des domaines  &win; avec les comptes Unix. Par exemple, le groupe <varname>Domain Admins</varname> est automatiquement ajouté au groupe <varname>Administrateurs</varname> dans les clients  &win; lors de leur connexion au domaine. Ceci permet par exemple de définir des utilisateurs sur le domaine faisant partie du groupe <varname>Domain Admins</varname>, et qui seront de fait <varname>Administrateur</varname> de chaque poste du domaine. </para>
	  <para>La correspondance entre les groupes Unix et les groupes Windows permet de regrouper la gestion des groupes dans un même environnement, et se fait via la commande <command>net</command>. Cette commande va permettre de tenir à jour un fichier de mappage entre les SID des groupes  &win; et les groupes Unix. 

	<informalexample>
<programlisting><![CDATA[
arrakis# net groupmap add ntgroup="Domain Admins" unixgroup=admin rid=512 type=d
]]></programlisting></informalexample>

La commande précédente permet donc de mapper le groupe unix <varname>admin</varname> avec le groupe NT <varname>Domain Admins</varname>. Ainsi, tous les membres du groupe Unix <varname>admin</varname> seront administrateur de tous les postes du domaine NT. Bien entendu, le principe peut-être étendu à l'ensemble des groupes &win;.
</para>

	</sect4>
      </sect3>
    </sect2>
  </sect1>


<!-- ============================== EXERCICES =================================== -->
  <sect1>
    <title>Exercices</title>
    <sect2>
      <title>Concepts, réflexions, installation</title>
 
      <orderedlist>
	<listitem>
	  <para>Samba est le premier mot d'un dictionnaire contenant les lettres S, M et B. Si le dictionnaire était un fichier texte nommé <filename>spell.txt</filename>, donnez la ligne de commandes permettant d'en sortir tous les mots comprenant S, M et B.</para>
	</listitem>
	<listitem>
	  <para>Samba 3 ne supporte pas <foreignphrase>Active Directory</foreignphrase>. Il est cependant possible d'appliquer des stratégies aux ordinateurs et aux utilisateurs, d'utiliser un annuaire LDAP, de faire des profils intinérants, etc ...  . Qu'apporterait de plus le support d'<foreignphrase>Active Directory </foreignphrase>? </para>
	</listitem>
	<listitem>
	  <para>Pourquoi Kerberos est-il nécessaire dans un environnement <foreignphrase>Active Directory</foreignphrase> ? </para>
	</listitem>
	<listitem>
	  <para>Dans quel cas conseillez vous l'emploi de LDAP comme <foreignphrase>backend</foreignphrase> ?</para>
	</listitem>
	<listitem>
	  <para>Installation : en utilisant la méthode vue plusieurs fois en cours, installer en prenant soin de justifier les options de configuration choisies. Indiquer les différentes méthodes pour être sûr que votre service samba tourne.</para>
	</listitem>
      </orderedlist>
 </sect2>

    <sect2>
      <title>Samba : "simple serveur de fichier"</title>
      <para>Cet mise en application  est à réaliser <emphasis>seul</emphasis>, en installant un serveur Samba sur chaque poste FreeBSD. Chaque point doit être mis en oeuvre,  puis testé et démontré devant le formateur.</para>
<orderedlist>
	  <listitem>
	  <para>Vous devez réaliser un serveur de fichiers partageant un répertoire <filename>public</filename> accessible en contrôle total par tout le monde, permettant de déposer et de lire des fichiers.</para>
	  </listitem>
	  <listitem>
	  <para>Ajoutez un répertoire <filename>partage</filename>, qui soit accessible en lecture par tous les utilisateurs authentifiés. Vous prendrez soin de créer deux comptes utilisateurs : <filename>formateur1/F0rM@TeUr_1</filename> et <filename>stagiaire1/St@Gi@ire1</filename> pour que d'autres postes puissent tester vos partages.</para>
	  </listitem>
	<listitem>
	  <para>Ajoutez le partage de votre lecteur CD-ROM, accessible par tous.</para>
	</listitem>
	<listitem>
	  <para>Ajoutez un partage <filename>web</filename> permettant (seulement) à un <foreignphrase>user</foreignphrase> <filename>(login=webadmin/mot de passe=apache</filename>) d'administrer le site web, à partir d'une station quelconque.</para>
	</listitem>
	<listitem>
	  <para>Ajoutez  deux groupes d'utilisateurs à Samba, <filename>FORMATEURS</filename> et <filename>STAGIAIRES</filename>. Ajoutez des utilisateurs formateurs et stagiaires en respectant les <foreignphrase>login/passwords</foreignphrase> dont la forme est donnée dans le point 2. Créez deux partages pour chaque groupe d'utilisateurs.</para>
	</listitem>

	<listitem>
	  <para>Testez la configuration de votre voisin en montant tous les partages décrits dans les points précédents, depuis une machine BSD. Contrôlez en même temps les différentes connexions à votre propre serveur Samba. </para>
	</listitem>
	<listitem>
	  <para>Configurez Samba pour garder trace de toutes les connexions aux ressources, classées par machine.</para>
	</listitem>
	<listitem>
	  <para>Par groupe de deux, un serveur Samba et un client &win; XP, vérifiez et optimisez le parcours du voisinage réseau. Vous prendrez soin de vous être placés dans des sous-réseaux distincts des autres groupes. </para>
	</listitem>
	</orderedlist>
 </sect2>
    <sect2>
      <title>Samba : contrôleur de domaine</title>
      <para>Cette mise en application est à réaliser par groupe de deux : un serveur Samba PDC, un client &win; . </para>
      <orderedlist>
	<listitem>
	  <para>Configurer Samba en tant que contrôleur de domaine. Ajoutez le poste &win; XP au domaine.</para>
	</listitem>
	<listitem>
	  <para>Réalisez un script de connexion permettant de monter le lecteur réseau personnel d'un utilisateur et un lecteur réseau public et qui met à l'heure le système</para>
	</listitem>
	<listitem>
	  <para>Il existe des outils &win; permettant de gérer les comptes Utilisateurs et Ordinateurs dans un domaine depuis une station &win;.  SRVTOOLS.EXE permet de les installer. Essayer de gérer votre domaine depuis les outils graphiques de &win; : ajout, suppression d'utilisateurs, de groupes, etc ...</para>
	</listitem>

      </orderedlist>
    </sect2>


    <sect2>
      <title>Samba et &win; : utilisation avancée</title>
      <para>Cet mise en application est à réaliser par groupe de deux ou trois, en prolongement des manipulations précédentes. Si vous avez besoin d'outils spécifiques, demandez au formateur ... </para>
      <orderedlist>
	<listitem>
	  <para>Vous devez, via le déploiement de stratégies systèmes, supprimer du menu démarrer de vos client &win; les menus "<filename>Panneau de configuration</filename>" et "<filename>Exécuter ...</filename> ".</para>
	</listitem>
	<listitem>
	  <para>Comment obtenir une gestion des permissions sur les ressources aussi fine que sous &win; ? Mettez en oeuvre une ressource partagée, accessible depuis deux utilisateurs Samba ne faisant pas partie des mêmes groupes Unix. </para>
	</listitem>

	<listitem>
	  <para>Les OS &win; possèdent un grand nombres de groupes utilisateurs prédéfinis. Comment faire pour mapper ces groupes &win; avec les groupes Unix ? Mettez en oeuvre la solution en mappant le groupe <emphasis>administrateur</emphasis> avec le groupe <emphasis>wheel</emphasis>, puis le compte <emphasis>Administrateur</emphasis> avec le compte <emphasis>sysop</emphasis>.</para>
	</listitem>
	<listitem>
	  <para>Configurer Samba comme serveur de fichier membre de Active Directory, et utilisant l'authentification Kerberos d'un serveur 2003 de votre réseau.</para>
	</listitem>
	<listitem>
	  <para>----- TO DO ----------</para>
	</listitem>

      </orderedlist>
    </sect2>
  </sect1>
</article>
