Configuration de Samba sur une machine UNIX

Le fichier smb.conf

C'est par ce fichier que l'on va établir la configuration des démon smbd et nmbd. Il existe un fichier d'exemple de configuration nommé "smb.conf.default", situé dans le répertoire $(BASEDIR)/samba-1.9.18p7/examples.
Mais laissons un peu ce fichier de coté, et vérifions que la compilation s'est bien déroulée.
Pour cela, créer un fichier (Un peu sophistiqué pour un exemple) smb.conf dans le répertoire $(BASEDIR)/lib, en recopiant les données ci-après, et en modifiant les données entre guillemets par les données du serveur.

[global]
workgroup = "Mon_Workgroup"
server string = (Samba %v)
browseable = yes
printing = bsd
printcap name = /etc/printcap
load printers = yes
log file = "Repertoire_source_samba"/var/%m.log
max log size = 100
lock directory = "Repertoire_source_samba"/var/locks
locking = yes
strict locking = no
share modes = yes
security = SHARE
null passwords = yes
socket options = TCP_NODELAY

# Permet au serveur Samba de devenir serveur de domaine
os level = 33
domain master = yes

# Facilite la gestion des noms longs
preserve case = yes
short preserve case = yes
character set = iso8859-1

[homes]
comment = Home Directories
preexec = /bin/sh -c 'echo "Repertoire_source_samba"/bin/smbclient -M %m -I %I'&
browseable = yes
read only = no
writable = yes
create mode = 0750
public = yes

["Nom_De_Partage"]
comment = "Commentaire"
path = /"Chemin_Acces_Repertoire_Partage"
browseable = yes
hide dot files = yes
read only = no
public = yes
writable = yes
create mode = 0775
printable = no

Pour tester un fichier de configuration, le mieux est d'utiliser la commande testparm. Lorsque le programme testparm s'execute, il affiche les sections définissant les partages, puis vous demande d'appuyer sur entrée pour visualiser la définition des services.
Pour visualiser correctement les résultats, l'idéal est de faires une redirection de la commande dans un fichier texte. Tapez la commande suivante : "testparm > /tmp/testparm.txt"
Le programme semble alors bloqué. De fait, il attend que vous appuyez sur entrée. Editez le fichier /tmp/testparm.txt. Voilà la liste des paramètres par défaut, ainsi que ceux qu'il nous faut configurer ...
Vérifiez au passage qu'il n'y a pas trop d'erreurs dans ce résultat avant de continuer. Si tel est le cas, il nous faut revoir le fichier smb.conf.

Lancer smbd et nmbd.

Qu'est-ce que SMB ?

Le protocol SMB est utilisé par les stations Microsoft pour partager des disques et des imprimantes.
Ce protocole est aussi appelé LanManager, et utilise la couche NetBios de Microsoft.
Vous pouvez faire quatre choses avec Samba :

  1. Partager un disque Unix pour des machines Windows;
  2. Accéder à disque Windows depuis une machine Unix;
  3. Partager une imprimante Unix pour des machines Windows;
  4. Utiliser une imprimante Windows à partir d'un hôte Unix.

Les deux daemons SMB sont situés dans votre répertoire $(BASEDIR)/bin ou $(BASEDIR)/sbin, selon la déclaration que vous avez pu faire dans le fichier Makefile avant compilation.

Méthode d'execution des daemons SMB.

Vous pouvez lancer les daemons Samba depuis l'inetd ou en tant que processus indépendants.
Si vous souhaitez configurer un serveur de fichier, l'idéal est de lancer les daemons SMB via l'inetd, et ce afin de pouvoir les redémarrer facilement via la commande "inetd -c".
Si vous souhaitez utiliser occasionnellement les services SMB, vous pouvez démarrer les démons depuis un script installé dans le répertoire "/etc/rc.config.d", ou même les lancer à la main lorsque vous en avez besoin.

Les Options du daemon smbd.

La syntaxe du daemon smbd est la suivante :

smbd [ -D ] [ -a ] [ -d debuglevel ] [ -l log file ] [ -p port number ] [ -O socket options ] [ -s configuration file ]

  1. Si le paramètre [-D] est spécifié, le serveur opérera comme un daemon. Par défaut, le serveur n'opère pas comme tel.
  2. Si le paramètre [-a] est indiqué, les fichiers de logs référençés dans le répertoire "$(BASEDIR)/var" seront écrasés à chaque nouvelle connexion. Sinon, les logs seront ajoutés en fin de fichier.
  3. Le paramètre [-d debuglevel] permet d'indiquer le niveau de détail des erreurs répertoriées dans le fichier log. Si ce paramètre n'est pas spécifié, il vaut 0 par défaut, soit l'indice minimal de report des erreurs. debuglevel est un entier allant de 1 à 10, 10 étant l'indice maximal de report des erreurs.
  4. Le paramètre [-l log file], permet d'indiquer un nom de fichier log.
    Le nom des fichiers de log par défaut sont indiqués au moment de la compilation ( Cf Makefile).
    Si ce paramètre est spécifié, les logs seront redirigés vers ce fichier.
  5. Le paramètre [-O socket options] permet d'optimiser le type de connexion.
    Cette option est aussi définie dans le fichier smb.conf.
  6. Le paramètre [-p port number] permet de modifier le numéro de port utilisé pour une connexion.
    Le numéro de port par défaut est le port 139. Si vous souhaitez changer de port, utilisez un numéro supérieur à 1024.
  7. Le paramètre [-s configuration file] permet de changer le nom du fichier de configuration.
    Par défaut, le nom utilisé est celui spécifié lors de la compilation (Cf Makefile).
    Si vous n'avez pas modifié le nom dans le fichier Makefile, il s'agit alors du fichier smb.conf.

Les Options du daemon nmbd.

La syntaxe du daemon nmbd est la suivante :

nmbd [ -D ] [ -H netbios hosts file ] [ -d debuglevel ] [ -l log basename ]
          [ -n netbios name ] [ -p port number ] [ -s configuration file ]

  1. Si le paramètre [-D] est spécifié, le serveur opérera comme un daemon. Par défaut, le serveur n'opère pas comme tel.
  2. Le paramètre [-H netbios hosts file] permet d'indiquer l'emplacement du fichiers contenant les noms NetBios.
    Ce fichiers est structuré exactement de la même façon que le fichier "/etc/hosts", et indique au serveur le nom des clients utilisant NetBios pour se connecter.
    Par défaut, ce nom est celui spécifié dans le fichier Makefile avant de compiler. Si vous n'avez apporté aucune modification au fichier Makefile, le fichier utilisé est situé dans "$(LIBDIR)/lmhosts".
  3. Le paramètre [-d debuglevel] permet d'indiquer le niveau de détail des erreurs répertoriées dans le fichier log. Si ce paramètre n'est pas spécifié, il vaut 0 par défaut, soit l'indice minimal de report des erreurs. debuglevel est un entier allant de 1 à 10, 10 étant l'indice maximal de report des erreurs.
  4. Le paramètre [-l log basename], permet d'indiquer un nom de fichier log.
    Le nom des fichiers de log par défaut sont indiqués au moment de la compilation ( Cf Makefile).
    Si ce paramètre est spécifié, les logs seront redirigés vers ce fichier.
  5. Le paramètre [-n netbios name] permet de modifier le nom NetBios utilisé par le serveur Samba.
  6. Le paramètre [-p port number] permet de modifier le numéro de port utilisé pour une connexion.
    Le numéro de port par défaut est le port 139. Si vous souhaitez changer de port, utilisez un numéro supérieur à 1024.
  7. Le paramètre [-s configuration file] permet de changer le nom du fichier de configuration.
    Par défaut, le nom utilisé est celui spécifié lors de la compilation (Cf Makefile).
    Si vous n'avez pas modifié le nom dans le fichier Makefile, il s'agit alors du fichier smb.conf.

Lancer les daemons depuis l'inetd.

Editez le fichier "/etc/services". Vérifiez qu'il existe les lignes suivantes, sinon ajoutez les :

netbios_ns     137/tcp    # NetBIOS Name Service
netbios_ns     137/udp   #
netbios_dgm  138/tcp    # NetBIOS Datagram Service
netbios_dgm  138/udp   #
netbios_ssn    139/tcp    # NetBIOS Session Service
netbios_ssn    139/udp   #

Editez à présent le fichier "/etc/inetd.conf", et ajoutez les lignes suivantes, en remplaçant les noms des variables entre guillemets par le chemin d'accès complet :

# SAMBA NetBios services.
netbios_ssn stream tcp nowait root "$(BASEDIR)"/bin/smbd -d2 smbd
netbios_ns dgram udp wait root "$(BASEDIR)"/bin/nmbd -d2 nmbd

Nous pouvons à présent relancer le daemon inetd avec la commande suivante :

inetd -c

Comme les services SMB ne s'executent que sur une requète d'un PC Client, il est inutile pour le moment d'executer la commande "ps -ef | grep nmb" pour vérifier la présence des daemons. C'est justement là l'avantage de passer par inetd.

Lancer les daemons manuellement .

Le principal avantage a faire fonctionner smbd et nmbd en tant que daemons, c'est qu'ils réponderont légèrement plus vite lors de la connexion initiale d'un client.
Créer un nouveau fichier nommé smb_start dans le répertoire "$(SBINDIR)".
Ajoutez y les lignes suivantes, en prenant soin de remplacer les noms entre guillemets par un chemin absolu :

#!/sbin/sh
"$(SBINDIR)"/smbd -D -d2
"$(SBINDIR)"/nmbd -D -d2

Enregistrez les modifications, puis changez les droits de ce fichier pour en faire un executable (chmod +x smb_start).
Vous pouvez lancer le programme manuellement, ou bien l'executer depuis "/etc/rc.config.d".

Tester le serveur Samba.

Dans un premier temps, essayons de visualiser si le serveur est capable de "prendre" des informations concernant un client distant. Pour cela, tapez la commande "smbclient -U UserName -L NetBios_Name", sachant que UserName doit être le nom d'un utilisateur déclaré sur la machine référencée par NetBios_Name. Supposons que je souhaite réaliser un test sur une machine nommée PC_Client1 fonctionnant sous Windows NT. La commande pourrait être :

smbclient -U Administrateur -L PC_Client1

Il vous sera demandé le mot de passe de l'Administrateur de PC_Client1, puis le programme doit afficher le résultat suivant :

Added interface ip=192.0.1.3 bcast=192.0.1.255 nmask=255.255.255.0
Server time is Mon Jun 15 13:08:12 1998
Timezone is UTC+2.0
Password:
Domain=[WrkGrp] OS=[Windows NT 4.0] Server=[NT LAN Manager 4.0]
security=user

Server=[PC_Client1] User=[] Workgroup=[WrkGrp] Domain=[]
This machine has a browse list:

    Server                 Comment
    ---------              -----------
    PC_Client1
    PC_Client2
    PC_Client3

This machine has a workgroup list:

    Workgroup    Master
    ------------    -------
    WrkGrp         PC_Client1
Ceci nous indique que le client PC_Client1 est membre d'un Workgroup nommé "WrkGrp", que l'adresse IP du serveur Samba est 192.0.1.3, qu'il existe d'autres stations membres du Workgroup "WrkGrp" nommées PC_Client2, et PC_Client3.
Notez aussi que Samba a reconnu le type d'OS utilisé sur le Client : Windows NT 4.0.

Le programme smbclient permet aussi d'envoyer des messages. Editez un petit fichier texte (1 à 2 lignes) puis executer la commande suivante :

cat "fichier_texte" | smbclient -M PC_Client1

Sur l'écran de la station PC_Client1 doit s'afficher le contenu du fichier texte.
Attention, cette option necessite que le service de messagerie soit actif sur la station PC_Client, sans quoi vous risquez d'avoir un message du genre : "Called name not present. Try to connect to another name (instead of PC_Client1)".

Voyons à présent si l'on peut se connecter en FTP_Like à la station PC_Client1 via Unix.
Supposons que la station PC_Client1 ait une ressource partagée nommée "Public".
Pour cela, il suffit d'utiliser la commande smbclient avec les paramètres suivants:

smbclient '\\PC_Client1\public'

Après la demande de confirmation d'un mot de passe de l'un des utilisateurs déclaré sur la station PC_Client1, vous tomberez sur un prompt du type "smb: \> ", indiquant que vous êtes connecté a la machine distante. Les commandes sont les mêmes que pour FTP, et pour s'en souvenir, il suffit de taper ?.

Dès lors que tout cela est en place, il ne reste plus qu'au client Windows de se connecter au serveur samba, pour la ressource partagée indiquée dans le fichier smb.conf. Dans notre exemple, il s'agit du nom que vous avez pû indiquer a la place de "Nom_De_Partage". Pour se connecter à un serveur Samba depuis un client Windows NT, il est necessaire de faire une petite manipulation sur le registre, car la gestion des mots de passe Windows NT est différente de celle d'UNIX.
Pour cela, aller dans le menu démarer, cliquez sur Executer, puis saisir regedit dans la ligne de commande. Validez afin d'ouvrir l'editeur de la base de registre Windows NT.
Se positionner sur la clé [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rdr\Parameters], puis dans la partie droite ajoutez (s'il elle n'existe pas déjà) la valeur DWord "EnablePlainTextPassword", et affectez lui la valeur 00000001.
Fermer toutes les applications, puis redémarrer l'Ordinateur. Ensuite ouvrez une fenetre "Invite de commande", puis tapez la commande NET USE "Lettre_Lecteur_Disponible": \\"Nom_Serveur_Samba"\"Nom_De_Partage", en prenant soin de remplaçer les mots entre guillemets par leur équivalence.
Vérifiez la connection en tapant "Lettre_Lecteur_Disponible": , puis en effectuant un DIR du lecteur.

Nous allons pouvoir nous interesser de plus près aux arguments du fichier smb.conf, afin d'en modifier les paramètres.