Introduction au serveur SAMBA

ou comment transformer une station sous Windows 9x en client Linux ...
en lui faisant croire qu'elle se trouve sur un réseau NT !


Qu'est-ce que SAMBA ?

SaMBa est un ensemble de programmes qui permettent de connecter à un serveur LINUX, des stations fonctionnant sous des systèmes divers :  Windows 3.11, Windows 9x, Windows Nt, OS/2, Mac....
Le serveur Linux est en mesure de se conduire comme un serveur de fichiers capables d'offrir les services habituels sur un réseau :

Le protocole de communication sous-jacent qui permet cette communication Linux-Dos/Win s'appuie sur NetBios et s'appelle smb=Server Message Block.


Configuration de SAMBA

Sur les stations DOS-Windows

Paramétrage

Samba ne permet d'accéder à à la station Windows qu'à travers le protocole TCP/IP, ce qui semble bien normal .
Il a besoin aussi du protocole NETBIOS
Sur chaque machine cliente, il faut tout d'abord ajouter TCP/IP et NETBIOS si ces protocoles sont absents. Bien vérifier que NetBios est activé avec TCP/IP (Voisinage réseau/Propriétés TCP/IP, onglet NetBios).
Il faut affecter une adresse IP à chaque station dans le même sous-réseau que le serveur Samba-Linux.

Par exemple, on peut choisir d'affecter une adresse IP statique en établissant un plan d'adressage :

Après l'inévitable redémarrage, et l'exigence d'accéder au CD Windows, l'utilisateur devrait :


Installer l'imprimante Linux sur les stations

Remarque : ainsi , une même station peut imprimer sur une imprimante Linux, et une imprimante Windows.


Sur le serveur Linux

Installation

Il est recommandé de demander sa mise en place lors de l'installation.
Sinon il faut monter le cdrom : mount /dev/cdrom, chercher le package samba et l'installer par :
rpm -ivh samba-*
Tous les paramétrages sont ensuite effectués dans un seul fichier : /etc/smb.conf

Paramétrage de smb.conf

Vérifier et activer les changements

  1. Important : lancer l'utilitaire testparm permet de tester la syntaxe du fichier de configuration et de déceler les erreurs. Il est recommandé de le lancer systématiquement lors de la mise au point de smb.conf. Il diagnostique des erreurs de syntaxe et des incohérences dans les choix des clauses.

  2. Ne pas oublier à chaque changement effectué dans smb.conf à relancer les processus ! Si les processus "démons" sont actifs, il faut les arrêter puis les relancer par :
    # conseillé plutôt que la commande globale smb restart
    /etc/rc.d/init.d/smb stop
    /etc/rc.d/init.d/smb start
    
  3. L'écriture d'un petit script shell est le bienvenu pour cette relance ...
    Le placer dans un répertoire inclus dans le PATH.
    Par exemple :
    vi /usr/sbin/smb
    #!/bin/bash
    if [ $# = 0 ]
    then 
    echo "Argument : stop | start | restart | status"
    exit 1 
    else
    /etc/rc.d/init.d/smb "$1"
    fi
    :wq (pour sauvegarder)
    chmod 700 /usr/sbin/smb (droit d'exécution pour root)
    

    Les principaux paramètres

    paramètre  valeur par défaut description
    path =   chemin du rep à partager
    comment =   texte visible dans le voisinage réseau client
    guest ok = yes|no
    (ancien nom : public)
    no partage en accès libre sans authentification
    valid users = tous liste des users autorisés à se connecter à la ressource
    printable = true|false false partage d'un service d'impression et non de rép.
    writeable = yes|no no permet ou non l'écriture sur le rép., contraire de read only
    write list = tous les utilisateurs liste des users autorisés à écrire
    browseable = yes visibilité du partage par tous, même les users non autorisés
    create mode | mask = 0744 droits maxi accordés à un fichier créé dans la ressource
    ces droits seront en intersection (and) avec les droits Linux (umask)
    directory mode | mask = 0755 droits maxi accordés à un répertoire créé dans la ressource
    ces droits seront en intersection (and) avec les droits Linux (umask)
    force directory mode = 000 droits imposés lors de la création du rép.
    composé par un opérateur OR avec les droits usuels
    force group =   Impose un groupe propriétaire d'un fichier lors de sa création dans le partage
    hide dot files = yes cache les fichiers cachés au sens Linux, commençant par un point
    hosts allow
    hosts deny =
    toutes les stations
    aucune
    ressource réservée|interdite à la liste des stations (adresses IP)
    max connections = 0 nb de connexions à la ressource illimité, sinon maxi

    La section globale

    [global]
        # donner le même nom de groupe de travail
    que celui des stations Windows 95/98 (Voisinage réseau/identification)
    workgroup = FCTICE77
    
        # compte à utiliser pour les accès invités aux partages
    guest account = nobody ; 
    
        # accès multi utilisateur 
    share modes = yes ; 
    
        # restreindre par sécurité les sous-réseaux autorisés à se connecter au serveur
        # ici on se limite aux adresses réseau privé 10.194.2.0
    et à l'interface "loopback"
    hosts allow = 10.177.200.    127.
        # on peut exclure des machines de l'accès au réseau 
    hosts allow = 10.177.200.  EXCEPT 10.177.200.125 
        # d'autres possibilités existent : voir le manuel man smb 
    
        # indique l'adresse IP de l'adaptateur du serveur et le masque de sous réseau
    interfaces = 10.177.200.110/255.255.255.0 
    
        # indique l'emplacement du fichier printcap, récapitulant
    toutes les imprimantes installées sur le serveur Linux
    printcap = /etc/printcap
        # partage toutes les imprimantes définies dans le fichier printcap
    load printers = yes
    
        # utiliser un fichier de trace pour chaque machine qui se connecte
    log file = /var/log/samba/log.%m
    
        # choisir le mode de sécurité : user ou share
    security = user
    

    Le répertoire personnel

    [homes]
    # accès au rép. personnel de chaque utilisateur.
    # la valeur du champ comment apparaitra dans le voisinage réseau
    # inutile pour cette section de préciser le path, c'est celui de l'utilisateur, en fait /home/%u

    comment =Répertoire personnel
    browsable = no
    writable = yes
    create mode = 0700

    Rendre un répertoire public

    L'objectif est de rendre un répertoire partagé totalement ( lecture/écriture) à tous les users
    D'abord, le créer ou vérifier qu'il  existe.
    En règle générale, le gestionnaire le crée dans le répertoire /home/, lieu de regroupement des  répertoires personnels:

    mkdir /home/tmp
    ls -l
    renvoie les droits par défaut drwxr-xr-x
    chmod 777 public
    pour y ajouter les permissions d'accès et d'écriture pour tous

    Pour permettre le partage de ce répertoire commun /home/tmp, il suffit de modifier la section [public] déjà présente et d'enlever les symboles ; pour dé-commenter les lignes en ajoutant des commentaires.

    [public]
    # Ce répertoire aura donc pour nom de partage " public "([public]),
    # la valeur du champ comment apparaitra dans le voisinage réseau

    # Le répertoire à partager est /home/samba
    comment =Répertoire public
    path = /home/tmp

    # il pourra être accessible par tous les utilisateurs
    public = yes

    # il est accessible en écriture
    writeable = yes
    # les fichiers créés sont en lecture seule, sauf pour le propriétaire

    create mode = 0755

    Partager un répertoire pour un groupe

    Il s'agit ici de configurer un partage de répertoire pour un groupe.
    Dans la section [HOMES] sont définis l'accès au rép. personnel de chaque utilisateur.
    Pour permettre le partage d'un rép commun  /home/rep-stagiaire,  les lignes suivantes doivent être rajoutées :

    [stagiaire] # Ce répertoire aura donc pour nom de partage stagiaire
    comment =Partage pour le groupe stagiaire exclusivement

    # Le répertoire à partager est /home/partage
    path = /home/rep-stagiaire

    # il ne pourra pas être accessible par tous les utilisateurs
    public = no

    # liste des utilisateurs autorisés (avec ou sans virgule)
    valid users = stage1 stage2 stage3 ...
    # ou mieux, indication du groupe autorisé
    valid users = @stagiaire jean

    # on pourra y écrire (bien sûr par ceux qui peuvent y accéder..)
    writeable = yes

    # les permissions par défaut des fichiers créés (le mot mode peut être remplacé par mask
    create mode = 0640

    Partager des applications

    [logiciels]
    comment = Applications partagées sur le serveur
    # root doit créer ce répertoire et déléguer sa gestion à un groupe d'utilisateurs. # Dans la suite, ce groupe sera appelé admin (contenant au moins l'utilisateur admin/admin) des droits de propriété et permissions
    path = /appli
    public = yes
    # le rép. ne doit pas être en lecture seule pour tous
    writeable =no
    # le groupe admin peut seul installer les applications
    write list = @admin

    Partager le lecteur de cd-rom

    On crée dans le fichier smb.conf une section cdrom et on indique le chemin d'accès path = /mnt/cdrom.
    Bien sûr la présence d'un Cd n'est pas suffisante, il doit être monté sur le serveur !
    [cdrom]
    # chemin d'accès au pseudo-répertoire de montage du CD
    path = /mnt/cdrom
    # accessible à tous les utilisateurs
    public = yes
    # l'écriture sera interdite
    writeable = no
    


    Exercice

    1. Supposons que le serveur Linux possède un lecteur ZIP dont le pilote est installé et dont le point de montage est /mnt/zip.
      Ecrire la section [zip] définissant le partage de cette ressource en lecture pour tous, et en écriture seulement pour jean.
    2. Ecrire la section [web] permettant (seulement) à un user (login=webadmin/mot de passe=apache) d'administrer le site web, à partir d'une station Win9x quelconque.
    Réponses


    Paramétrage avec Linuxconf 1.16

    Config réseau / tâches serveur / serveur de fichier samba /
    Administration de Samba / 
    	Conf par défaut [global]
    	Conf par défaut pour un rep utilisateur [homes]
    	Partage de disques
    		tmp 	Rép. remporaire
    		public 	Rép. public  
    		stagiaire ...
    


    Station Linux, cliente d'un serveur Windows9x

    Un client SMB pour Linux est aussi inclus dans Samba.
    On peut alors à l'inverse connecter un client Linux à un "serveur" Windows. Le client pourra alors monter une ressource Windows déclarée partagée.

    Montage de répertoire Windows


    Problèmes rencontrés

    Pas de visibilité du serveur dans le "voisinage réseau" de la station Win9x

    Visibilité du serveur SMB, mais erreur à la connexion

    Difficulté de résolution des noms Netbios

    • Le serveur Samba doit pouvoir "résoudre", c'est-à-dire trouver le N° IP correspondant à un nom NetBios envoyé par une station, en quête d'un serveur ...
    • Lorsqu'on paramétre une station, en effet, on lui donne un nom personnel et un nom de workgroup, pas de nom ni d'adresse IP de serveur ! Il faut aider Samba ! Si on indique rien la recherche s'effectue par broadcast dans le même sous-réseau et apparemment cela ne fonctionne pas toujours bien.
    • Il est préférable d'indiquer au serveur, dans /etc/smb.conf, une méthode explicite de résolution.
      1. La méthode "host"
        Le serveur utilise le nom NetBios comme nom Linux, et fait appel à un serveur DNS. Par défaut, il s'agit du fichier /etc/hosts.
        En cas de problème de connexion d'une station, aller voir et si nécessaire compléter ce fichier.

      2. La méthode "wins"
        • C'est celle qui semble recommandée ...
          Le serveur Samba est configuré pour être aussi serveur wins. Il enregistre alors les correspondances : nom netbios <--> adresse IP
        • Sur chaque station de travail, dans voisinage réseau renseigner l'onglet Configuration Wins en indiquant l'adresse IP du serveur.
        • Dans smb.conf, section [global], décommenter la ligne
          wins support = yes
          SANS modifier la ligne wins server = w.x.y.z


    Compléments et références

    Références