Samba

Je vais essayer de vous exposer ici le travail que nous avons réalisé dans la mise en place d'un serveur linux-samba comme contrôleur de domaine d'un réseau Windows. La gestion des restrictions utilisateurs, les profils itinérants ... seront exposés en détails. Ce document est basé sur une Debian GNU/Linux 2.2, ce qui fait que le fichier smb.conf par défaut sur votre distribution risque d'être légèrement différent. Pour ce qui est de la version de samba utilisée : Samba 2.0.7

Installation de Samba

On part du principe que vous connaissez un minimum samba et qu'il est déjà installé sur votre serveur de test. Si jamais ce n'etait pas le cas, pour installer samba rapidement, regardez du côté de :

Debian: apt-get install samba
Red Hat (Mandrake): rpm -ivh /mnt/cdrom/RedHat(Mandrake)/RPMS/samba*

Le fichier de configuration : informations générales

Samba utilise un fichier de configuration unique dans lequel se trouvent des blocs comme par exemple le bloc [global].

<fichier smb.conf minimal>

[global]
   printing = bsd
   printcap name = /etc/printcap
   load printers = yes
   guest account = pcguest

   log file = /usr/local/samba/log.%m

[tmp]
  comment = Temporary file space
  path = /tmp
  read only = yes
  public = yes

</fichier>

Si samba est lancé avec ce fichier de configuration, les postes windows du réseau local pourront voir dans le voisinage réseau qu'un ordinateur nommé (le nom de votre machine Linux) partage un répertoire temp dans lequel vous avez le droit d'écrire.

Le fichier de configuration : paramètres "avancés"

Voyons maintenant les paramètres suivants :

Les variables de Samba

Variable

Definition

Variables du client
%a Architecture du client
Exemple: Win95, WfWg, WinNT, Samba ...
%I Adresse IP du client
%m Nom NetBios du client
%M Nom DNS du client
Variables utilisateur
%g Groupe primaire de l'utilisateur %u
%H Répertoire home de l'utilisateur %u
%u Nom de l'utilisateur Unix courant
Variables de partage
%P Racine du partage actuel
%S Nom du partage actuel
Variables du serveur
%h Nom DNS du serveur Samba
%L Nom NetBios du serveur Samba
%v Version de Samba
Variables diverses
%T La date et l'heure courantes

Résultat : notre fichier de configuration

<fichier smb.conf> 

[global]
   printing = bsd
   printcap name = /etc/printcap
   load printers = yes
   guest account = nobody
   invalid users = root

; on "fixe" son nom netbios
   netbios name = pantoufle

; le réseau à écouter n'est que celui çi
; (sur l'autre interface on a la connexion internet,
: pas la peine d'avoir du samba de ce côté !)
   interfaces = 192.168.0.1/255.255.255.0

; security user implique que tout utilisateur DOIT
; avoir un compte unix sur ce serveur :)
   security = user

; Le nom du groupe de travail dont ce serveur est membre
   workgroup = rycks

; La description du serveur, visible lorsque on affiche les détails
; %h étant le nom DNS du serveur et %v la version de samba
   server string = %h server (Samba %v)

; On utilise encore le fichier de log de samba, et pas que celui
; de syslog
   syslog only = no

; Le minimum d'informations importantes dans le syslog,
; le reste étant toujours dans /var/log/smb(nmb)/
   syslog = 0;

; Vive le tuning !
   socket options = IPTOS_LOWDELAY TCP_NODELAY \
                    SO_SNDBUF=4096 SO_RCVBUF=4096

; On utilise les mots de passe encrypté. Attention tous les clients
; W95 devront être upgradé par le patch sécurité SMB de MS.
; De même NT4 devra être patché par le SP3 ou mieux ... Pour le W3.11
; je ne sais plus, ils ne doivent probablement pas supporter les passwords
; encrypté :(
   encrypt passwords = yes

; Ce serveur fait aussi serveur WINS.
; WINS permet à deux réseaux qui utilisent des plages d'IP différentes
; (par exemple 192.168.0.0/255.255.255.0 et 192.168.0.1/255.255.255.0)
; de voir les ressources partagées dans "l'autre" réseau, si la passerelle
; est active.
   wins support = yes

; Niveau de l'OS. Comme notre serveur se charge d etre le maitre du domaine,
; local logons etc. Il est donc au dessus du serveur NT si y en a un !
   os level = 34

; On fait la gestion du domaine 
   domain master = yes
   local master = yes
   preferred master = yes

; On assure la centralisation des connexions du domaine
   domain logons = yes

; Quel script à lancer lorsque un client se connecte ?
; %g correspond au nom du groupe primaire dont fait partie cet utilisateur.
   logon script = %g.bat

; Dans quel répertoire se trouvent les fichiers de démarrage ?
; %L est le nom netbios du serveur samba
   logon path=\\%L\netlogon

; Ou faudra t-il stoquer les profils itinérants des
; utilisateurs ?
; %U est le login de l'utilisateur
   logon home=\\%L\%U\winprofile

; Dans que ordre on fait appel aux ressources pour trouver le nom
; d'une machine ? Notez le broadcast en FIN ... pas comme les windows
; classique qui balancent régulièrement des broadcasts.
   name resolve order = lmhosts host wins bcast

; Samba doit il faire proxy DNS ?
   dns proxy = no

; Respect des nom de fichiers et de leur casse
   preserve case = yes
   short preserve case = yes

; Faut-il synchroniser les mots de passe windows et linux ?
   unix password sync = yes

; Que faut il mettre en place pour la synchronisation des mots de passes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\sUNIX\spassword:* \
%n\n *Retype\snew\sUNIX\spassword:* %n\n .

; La taille maximum du fichier de log, évite de saturer son /var :p
   max log size = 1000

; On fait office de serveur de temps, c'est pratique que toutes les machines
; du réseau soient un tant soit peu synchronisées. On utilisera cette
; fonctionnalité dans le fichier .bat de loggon
   time server = yes

; On spécifie ou se trouve le netlogon. Il ne sera utilisé que lors
; de la connexion, c'est pour cela que ce n'est pas nécessaire
; qu'il soit publique etc.
[netlogon]
   path = /home/netlogon/%g
   public = no
   writeable = no
   browseable = no

; Le répertoire Home de chaque utilisateur
[homes]
   comment = Home Directories
   browseable = no

; Il a quand même le droit d'y écrire !
   read only = no

; Le masque Unix de création de fichier par défaut
   create mask = 0700

; Pour des raisons de sécurité, on met un masque de répertoire à 700 aussi !
   directory mask = 0700


; On partage le FTP, c plus pratique de l'avoir dans le voisinage réseau
; que de devoir lancer un utilitaire spécial.
 [ftp]
   path = /home/ftp/pub
   public = yes
   printable = no
   guest ok = yes

; Le répertoire temporaire
 [tmp]
   path = /tmp
   public = yes
   printable = no
   guest ok = yes
   writable = yes

; un autre temporaire spécial pour un utilisateur qui est bien éxigeant en place !
 [bigtemp]
   path = /home/bigtemp
   public = yes
   printable = no
   guest ok = yes
   valid users = erics
   writable = yes

</fichier> 

Ce qu'on a sur le serveur

En bref, sur le serveur, on doit avoir :

  • un compte par utilisateur
  • le fichier smb.conf
  • un répertoire /home/netlogon (dans mon exemple)
  • un fichier .bat par groupe d'utilisateur dans ce répertoire (un exemple suit)
  • un fichier CONFIG.POL de statégie sécurité système dans ce répertoire également

    <fichier /home/netlogon/admin.bat>
    net use P: \\pantoufle\homes
    net use T: \\pantoufle\tmp
    net time \\pantoufle /SET /YES
    </fichier admin.bat>
    
    <fichier /home/netlogon/professeurs/professeurs.bat>
    net use P: \\pantoufle\homes
    net use T: \\pantoufle\tmp
    net time \\pantoufle /SET /YES
    regedit /s \\pantoufle\netlogon\professeurs.reg
    </fichier professeurs.bat>
    
    <fichier /home/netlogon/eleves/eleves.bat>
    net use P: \\pantoufle\homes
    net use T: \\pantoufle\tmp
    net time \\pantoufle /SET /YES
    regedit /s \\pantoufle\netlogon\eleves.reg
    </fichier eleves.bat>
    
    <fichier /home/netlogon/professeurs/professeurs.reg>
    [HKEY_CURRENT_USER\Software\Microsoft\Windows
    \CurrentVersion\Explorer\User Shell Folders]
    "Personal"="P:\\"
    </fichier professeurs.reg>
    
    <fichier /home/netlogon/eleves/eleves.reg>
    [HKEY_CURRENT_USER\Software\Microsoft\Windows
    \CurrentVersion\Explorer\User Shell Folders]
    "Personal"="P:\\"
    </fichier eleves.reg>
    

    Ce fichier permet au lancement, de monter automatiquement le repertoire perso de l'utilisateur en P: et le repertoire temporaire sur T:. De même, on règle l'horloge système sur celle du serveur Samba.

    Remarque : les retrours à la ligne du fichier .bat doivent être en "mode DOS", le plus simple est de créer ce fichier sous Windows avec Notepad par exemple et de l'envoyer sur le serveur ensuite.

    Création de la politique de sécurité du système (C) (TM) (R)

    Un titre ronflant ... Normal, je l'ai trouvé dans une doc MS à propos de leur outil de politique système ! Donc, pour créer une politique système Windows, c'est-à-dire par exemple interdire à certains utilisateurs (tous ?) de lancer Regedit, un programme DOS, etc. il faut utiliser PolEdit qui se trouve sur le CD-Rom de Windows 98.

    Lancez PolEdit, regardez son aide, notez les informations, cette documentation n'a pas pour but de vous expliquer comment marche un logiciel propriétaire. Une fois que vous avez votre fichier .pol de fait, copiez le sur votre serveur Samba, dans le repertoire pointé par la directive PATH du groupe [netlogon].

    Attention : Pour des clients Win 9x, le fichier de stratégie système doit être CONFIG.POL ... pour les Windows NT, ce n'est pas le même nom, et comme je n'ai pas de NT, je ne peux pas vous en parler (non, ce n'est pas la peine de m'offrir un Windows NT pour que je teste. Merci quand même c'était sympa de votre part :o)

    Remarque : PolEdit Permet de créer des groupes d'utilisateurs et des utilisateurs. Nous n'avons pas encore réussi à faire en sorte que ca marche. Seul l'utilisateur par défaut est pris en compte.

    Par exemple, si dans PolEdit je crée un groupe d'utilisateurs "admin" qui aura le droit de lancer Regedit, je me connecte en tant que "erics" (dont le groupe primaire est "admin" et je n'ai quand même pas le droit de lancer Regedit :( Par contre, si j'avais créé un utilisateur "erics" dans Poledit, ça aurait marché. Comme nous n'avons pas envie de créer les 1056 utilisateurs dans PolEdit, et que la gestion globale des utilisateurs et plus intéressante, nous vous proposons l'astuce suivante :

    Pour faire face à cela, nous avons rusé : on a fait 3 fichier config.pol avec seulement des utilisateurs par défaut, et sur le serveur Linux, on a :

    /home/netlogon/professeurs/CONFIG.POL
    /home/netlogon/professeurs/professeurs.bat
    /home/netlogon/eleves/CONFIG.POL
    /home/netlogon/eleves/eleves.bat
    /home/netlogon/admin/CONFIG.POL
    /home/netlogon/admin/admin.bat

    Et on a modifié le smb.conf pour que cela soit pris en compte :

    <fichier smb.conf>
    
    [netlogon]
       ; on a rajouté le %g pour que selon le groupe de l'utilisateur,
       ; netlogon pointe vers un répertoire différent, dans lequel le config.pol
       ; correspond à chaque groupe de profil utilisateurs.
       path = /home/netlogon/%g
       public = no
       writeable = no
       browseable = no
       
    </fichier smb.conf>
    

    Notez l'utilisation de la variable %g de Samba ... les variables de Samba sont très très partiques !

    Configuration des postes Windows

    Pour un poste client type Win 98 :
    Cliquez sur Démarrer/Paramètres/Panneau de configuration puis double cliquez sur Réseau :

    Installez :

  • Client pour les réseaux MS
  • Driver de votre carte réseau
  • Support TCP/IP, et que le TCP/IP (pas d'IPX ou de NetBios)
  • Partage de fichiers et d'imprimantes

    Config client Windows

    Cliquez ensuite sur l'onglet "Identification" et renseignez le nom de l'ordinateur ainsi que le groupe de travail. dans lequel vous voulez être.

    Config client Windows

    Cliquez sur "Contrôle d'accès" et cochez la case de contrôle d'accès au niveau utilisateur.

    Config client Windows

    Revenez sur l'onglet configuration et double cliquez sur "Client pour les réseaux MS"

    Config client Windows

    N'oubliez pas de configurer votre support TCP/IP :
    Double cliquez sur TCP/IP

    Adresse IP :

  • L'adresse IP que vous voulez pour cette station (ex: 192.168.0.2)
  • Masque de sous réseau (ex: 255.255.255.0)

    Configuration WINS :

  • Activer la résolution WINS
  • Ajouter un serveur WINS, IP 192.168.0.1 (si le serveur Samba a cette IP)

    Passerelle : Si vous avez une passerelle, configurez la ici.
    Configuration DNS : configurez votre accès DNS.

    Remarques "tuning/performances/bon sens ?"

    Apparaît très rapidement à l'usage un engorgement du réseau dû à l'utilisation des profils itinérants de Windows. En effet, on "trimbale" dans le profil plein de trucs que MS a décidé comme étant importants, comme par exemple, le cache de IE, celui de Outlook, etc. En bref, cela implique par exemple que 10 Mo de fichiers seront téléchargés lors de la connexion à un poste (mon profil est "classique", une image de fond, IE et Outlook ...) et 10 Mo seront envoyés sur le serveur lorsque je me déconnecte. 10 Mo par utilisateurs ! Prenons comme exemple une salle de 15 machines (taille "normale" d'une salle de TP informatique), 150 Mo, et 10 salles dans un bâtiment donné ... Calculez le temps de déconnexion des utilisateurs lorsque la sonnerie de la pause se déclenche ! Mieux vaut anticiper le mouvement et se délogger à -5 ... (heu, j'avoue que lors des TP VC++ c'est ce que je faisais à tous les coups) ... plutôt que à pile ou à 5 ! Comme pour les bouchons sur le périf, il faut passer soit 10 minutes avant, soit 2 heures après !

    Donc, au vu de ce problème important, et selon la politique que vous mettez en place, il serait parfois astucieux de monter pour tout le monde un répertoire home sur P: (par exemple, P comme Perso) et de former les utilisateurs : "Sauvegardez vos documents sur P et pas dans "Mes documents" sinon vous ne les retrouverez pas". Reste ensuite à trouver les logiciels qui peuvent être configurés de manière à avoir leur bookmark sur P:\bookmarks.html et ainsi de suite pour les parametres. Je ne sais tout simplement pas si ca existe dans le monde Windows ! Si jamais vous avez une solution miracle, faites en un article, c'est un savoir qu'il faut partager !

    Questions et ouverture vers une suite à cet article

    Il est possible d'avoir plusieurs WorkGroups sur un même domaine : comment cela est-il géré, peut on répartir les problèmes entre plusieurs GNU/Linux Samba ? Comment faire cohabiter des serveurs NT et Samba ?

    Configurer des clients NT : le CONFIG.POL équivalant sous NT porte un autre nom. Un problème concret de n'avoir qu'un serveur Samba (et pas de NT) est qu'étant sur un poste Windows (98), je souhaite partager une ressource locale, mon imprimante par exemple :

    Affichage du partage de l'imprimante de mon poste

    Config client Windows

    Après le clic sur le bouton Ajouter...

    Config client Windows

    HOT NEWS : La solution à ce petit problème m'a été donnée; il suffit en effet de sélectionner "Contrôle d'accès niveau ressource" à l'étape 3 de la configuration de votre poste Windows.

    Liens

    * How-to français sur SMB
    * Samba
    * Samba : le fichier de configuration

    Eric Seigne erics@rycks.com
    Linux Magazine France n°27 - Avril 2001