Par Eugene Blanchard blanchas@cadvision.com
J'utilise un laboratoire de routage pour enseigner les concepts fondamentaux du routage sur des équipements propriétaires. Il peut accueillir 18 personnes sur 9 PC. Il y a également 1 serveur et une imprimante HP LaserJet 4050N avec une carte serveur d'impression HP Jetdirect. Le serveur tourne sous une Slackware 4.0 avec Linux 2.2.6. Huit des PC tournent sous WinNT 4.0 SP5 et un PC tourne sous Win95a.
Mes besoins pour le serveur Linux sont les suivants :
Il y avait la possibilité d'utiliser NFS et de configurer chaque client pour se connecter au serveur Linux, ou d'utiliser SAMBA et de configurer seulement le serveur. En fonctionnement normal du labo, les clients sont régulièrement rebâtis, redémarrés et re-configurés. On imaginait qu'en exécutant les services SAMBA, le serveur Linux serait transparent aux clients et permettrait une installation très simple des clients.
Cet article décrira comment j'ai utilisé SAMBA pour :
NOTE : ceci n'est pas un article du genre "HOWTO", mais un exemple de configuration éprouvé et le processus utilisé pour configurer SAMBA
Le processus d'installation dépendra de la distribution de Linux que vous utilisez. Sous la Slackware, sélectionnez SAMBA pendant l'installation, ou si vous ajoutez SAMBA à un système existant, utilisez l'utilitaire pkgtool.
Positionnez-vous sur le CD de la Slackware, répertoire /slakware/N11. Tapez pkgtool puis "Install packages from current directory" (installation des paquetages depuis le répertoire courant). Pour toutes les autres distributions, cet article se basera sur le fait que vous avez SAMBA correctement installé sur votre système.
Sous Slackware, SAMBA est démarré par le script rc "/etc/rc.d/rc.samba":
# # rc.samba: démarrage du serveur samba # if [ -x /usr/sbin/smbd -a -x /usr/sbin/nmbd ]; then echo "Starting Samba..." /usr/sbin/smbd -D /usr/sbin/nmbd -D fi
Le démon smbd fournit les services SMB/CIFS aux clients. SMB (Server Message Block) est l'ensemble des services utilisés par des clients win95 et winNT pour se connecter au travers du réseau. Le nouveau nom d'SMB est CIFS ("Common Internet File System", système de fichiers commun pour l'internet).
Le démon nmbd est un serveur de noms NETBIOS pour permettre la résolution de noms NETBIOS au dessus d'IP.
Taper "ps -aux" permettra de visualiser les processus qui tournent actuellement et de voir si smbd et nmbd sont bien présents :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 220 128 ? S Oct21 0:02 init root 2 0.0 0.0 0 0 ? SW Oct21 0:00 [kflushd] root 3 0.0 0.0 0 0 ? SW Oct21 0:00 [kpiod] root 4 0.0 0.0 0 0 ? SW Oct21 0:00 [kswapd] root 101 0.0 0.5 1544 380 ? S Oct21 0:00 /usr/sbin/smbd -D root 103 0.0 0.9 1196 584 ? S Oct21 0:03 /usr/sbin/nmbd -D root 8113 0.4 0.9 1164 616 ttyp0 S 11:14 0:00 -bash root 8120 0.0 1.1 2272 744 ttyp0 R 11:14 0:00 ps -aux
Le fichier de configuration pour SAMBA est /etc/smb.conf, et il y a de nombreux exemples de configurations sous /usr/doc/samba-2.0.3/examples.
Le fichier /etc/smb.conf peut être divisé en 3 sections générales :
# paramètres globaux workgroup = E328 # nom du groupe de travail netbios name = E328-00 # nom netbios du server Linux server string = %h - Linux Samba server # commentaire affiché dans "voisinage réseau" interfaces = 192.168.1.3/24 # NICs + subnet mask (24 = 255.255.255.0)~ encrypt passwords = Yes # requis pour NT (Win95 ) null passwords = No # mot de passe obligatoire log file = /var/log/samba. # ou ranger les (nombreux!) fichiers de log max log size = 50 # taille maxi des fichiers de log socket options = TCP_NODELAY # accélère la convergence de netbios os level = 33 # donne une "priorité" au navigateur maître plus importante preferred master = Yes # ce serveur est le navigateur maître guest account = pcguest # nom du compte "invité" hosts allow = 192.168.1. 127. # réseaux autorisés à accéder à ce serveur par SMB
La section Shares s'occupe du partage des répertoires. Par exemple :
[homes]<!--ici--> comment = Home Directories # commentaires affichés dans la vues détaillée du Voisinage Réseau de Windows path = %H # affiche automatiquement le répertoire de l'utilisateur en tant que partage SMB valid users = %S # seul l'utilisateur est autorisé à accéder à ce répertoire read only = No # possibilité de lecture/écriture create mask = 0750 # permissions données aux nouveaux fichiers crées browseable = No # montre uniquement le répertoire de l'utilisateur, pas de répertoire "homes" [public] comment = Public Files # commentaires affichés dans la vues détaillée du Voisinage Réseau de Windows path = /home/ftp/pub # chemin d'accès au répertoire public guest ok = Yes # tout le monde peut accéder à ce répertoire [cdrom] comment = Cdrom on E328-00 # path = /cdrom # chemin d'accès à la platine CD guest ok = Yes # tout le monde peut accéder au CD-ROM, partage public
La section Printers s'occupe du partage des imprimantes. Par exemple :
[lp] comment = E328-Laser # commentaires affichés dans la vues détaillée du Voisinage Réseau de Windows path = /var/spool/samba # chemin du répertoire de spool print ok = Yes # permission d'ouvrir, d'écrire et de proposer une entrée dans le répertoire de spool
Vous pouvez créer le fichier /etc/smb.conf manuellement si vous savez ce que signifie chaque entrée, ou vous pouvez utiliser l'interface web appelée SWAT (SAMBA Web Administration Tool, Outil Web d'administration SAMBA). Les petits plus de SWAT sont les fichiers d'aide en ligne qui décrivent chaque choix disponible. Je comprends que SWAT soit installé automatiquement avec toutes les versions récentes de SAMBA, à partir de la 2.0 et supérieures.
Les instructions suivantes sont prises directement dans le fichier /usr/doc/samba-2.0.3/swat/README :
Exécution via inetd ------------------- Vous devez ensuite éditer vos fichiers /etc/inetd.conf et /etc/services pour permettre à SWAT d'être lancé via inetd. Dans /etc/services il vous faut ajouter une ligne comme celle-ci~: swat 901/tcp le choix du numéro de port n'est pas vraiment important excepté qu'il doit être inférieur à 1024 et ne pas être en cours d'utilisation (l'utilisation d'un port supérieur à 1024 présente un obscur trou dans la sécurité, en fonction des détails d'implémentation de votre démon inetd). Dans /etc/inetd.conf vous devrez ajouter une ligne comme~: swat stream tcp nowait.400 root /usr/local/samba/bin/swat swat Une fois que vous aurez édité /etc/services et /etc/inetd.conf vous devrez envoyer un signal HUP à inetd. Sur beaucoup de systèmes "killall -1 inetd" suffira, sur d'autres il faudra utiliser "kill -1 PID" où PID est le numéro de process du démon inetd. Lancement --------- Pour lancer SWAT, faites juste pointer votre navigateur préféré sur http://localhost:901 Notez que vous pouvez accéder à SWAT depuis n'importe quelle machine connectée via un réseau IP, mais une connexion distante ouvre la possibilité de se faire "sniffer" son mot de passe, étant donné qu'il passe en clair sur la ligne. Un nom d'utilisateur et mot de passe devraient vous être demandés à la connexion. Vous aurez besoin de l'utilisateur "root" et de son mot de passe réel.
Une fois SWAT démarré et actif, vous devriez voir ceci.
Les boutons de menus sont plutôt auto-explicatifs, et il y a d'excellents écrans d'aide. Voici un résumé rapide des menus :
Tout changement de configuration dans les sections Global, Shares et Printers doit être validé en utilisant le bouton/icône "commit" sur leur page respective. Sinon le fichier /etc/smb.conf n'est pas modifié.
Une fois les modifications prises en compte (/etc/smb.conf modifié), les serveurs smbd et nmbd doivent être redémarrés. Le menu Status a des options qui permettent d'arrêter et de mettre en marche ces serveurs.
Je trouve qu'un bon moyen de comprendre ce qui est fait est de regarder le fichier /etc/smb.conf au fur et à mesure des changements par le bouton View de SWAT.
Il est très important que les noms d'utilisateurs et les mots de passe soient les mêmes pour les deux environnements Linux et Windows. La synchronisation des mots de passe sous Linux avec les mots de passes cryptés par SMB est faite par le script shell mksmbpasswd.sh qui se trouve dans le répertoire /usr/lib/samba/private.
Note : Pour la Slackware, le répertoire de SAMBA est /usr/lib et non le répertoire standard /usr/local.
Les informations suivantes sont extraites du fichier /usr/doc/samba-2.0.3/docs/textdocs/ENCRYPTION.txt :
Le fichier smbpasswd -------------------- Pour permettre à SAMBA de prendre part au protocole ci-dessus, il doit être capable de retrouver les valeurs sur 16 octets hachées à partir d'un nom d'utilisateur. Malheureusement, (ndt : Je dirais l'inverse !) comme la valeur du champs mot de passe est également une fonction de hachage à sens unique (ie. il est impossible de retrouver le texte en clair, c.a.d le mot de passe, à partir du hachage qu'UNIX en fait), on doit garder un fichier de mots de passe séparé contenant ces valeurs sur 16 octets. Pour minimiser les problèmes avec 2 fichiers de mots de passe, comme le déphasage, un utilitaire, mksmbpasswd.sh, est fournit pour générer un fichier smbpasswd depuis le fichier /etc/passwd d'UNIX. Pour générer le fichier smbpasswd depuis votre fichier /etc/passwd, utilisez la commande suivante : cat /etc/passwd | mksmbpasswd.sh >/usr/local/samba/private/smbpasswd
Le problème que j'ai rencontré à cette étape est que je m'attendais à ce qu'il reconnaisse automatiquement les mots de passe "fantômes" (shadow) et les place dans le fichier smbpasswd. Malheureusement, il ne l'a pas fait et j'ai du entrer les mots de passe manuellement avec la commande smbpasswd. Heureusement, je n'ai eu qu'une dizaine de mots de passe à rentrer. Il y a probablement une méthode pour le faire en automatique, mais je n'en suis pas informé.
Une fois ceci accompli, j'ai été capable d'utiliser le Voisinage Réseau, et d'ouvrir les partages des répertoires Linux sans devoir entrer un nom d'utilisateur et mot de passe.
Faire marcher la carte HP JetDirect sous Linux fut étonnamment simple. La carte HP JetDirect est un serveur d'impression qui s'installe dans l'imprimante HP 4050N. Le premier pas est de configurer la carte HP Jetdirect et l'imprimante. La disquette d'installation standard ne contient pas de support pour Linux mais il y a un outil d'administration par le Web que vous pouvez télécharger depuis le site HP : http://www.hp.com/support/net_printing. J'ai choisi de le faire manuellement en utilisant telnet et le serveur web inclus sur la carte HP JetDirect.
Pour accéder par telnet à la carte JetDirect, il vous faut configurer l'adresse IP de l'imprimante. L'adresse par défaut est 192.0.0.192, qui n'est certainement pas une adresse valide sur votre réseau . L'imprimante HP 4050N vous permet de configurer une adresse IP par le panonceau de commande : sélectionnez "JetDirect Menu" avec le bouton Menu et suivez les indications pour configurer le réseau. Après avoir entré l'adresse IP, configurez le masque du sous-réseau de manière similaire.
Connectez-vous par telnet sur l'adresse IP de l'imprimante. Vous avez deux choix lors de la connexion : voir la configuration courante en tapant "/", ou voir le menu d'aide en tapant "?", comme décrit ci-dessous :
Please type "?" for HELP, or "/" for current settings >/ ===JetDirect Telnet Configuration=== Firmware Rev. : G.07.20 MAC Address : 00:10:83:1b:41:c7 Config By : USER SPECIFIED IP Address : 192.168.1.10 Subnet Mask : 255.255.255.0 Default Gateway : 192.168.1.1 Syslog Server : Not Specified Idle Timeout : 120 Seconds Set Cmnty Name : notachance Host Name : E328-LASER DHCP Config : Disabled Passwd : Enabled IPX/SPX : Disabled DLC/LLC : Enabled Ethertalk : Disabled Banner page : Disabled >? To Change/Configure Parameters Enter: Parameter-name: value <Carriage Return> Parameter-name Type of value ip: IP-address in dotted notation subnet-mask: address in dotted notation default-gw: address in dotted notation syslog-svr: address in dotted notation idle-timeout: seconds in integers set-cmnty-name: alpha-numeric string (32 chars max) host-name: alpha-numeric string (upper case only, 32 chars max) dhcp-config: 0 to disable, 1 to enable ipx/spx: 0 to disable, 1 to enable dlc/llc: 0 to disable, 1 to enable ethertalk: 0 to disable, 1 to enable banner: 0 to disable, 1 to enable Type passwd to change the password. Type "?" for HELP, "/" for current settings or "quit" to save-and-exit. Or type "exit" to exit without saving configuration parameter entries
La première chose à faire est de taper "passwd" et de mettre un mot de passe administrateur à l'imprimante. Ensuite, configurez une passerelle par défaut puis le nom d'hôte. Le reste sera configuré avec le serveur web intégré à l'imprimante.
L' outil d'administration a six entrées de menus disponibles :
Pour pouvoir imprimer depuis Linux sur le serveur d'impression JetDirect, une entrée a été ajouté dans le fichier /etc/printcap. J'ai créé un nouveau répertoire de spool appelé /usr/spool/lj4050n mais le défaut /usr/spool/lpd devrait plutôt être utilisé. Le répertoire /usr/spool est un lien dynamique vers /var/spool.
Ce qui suit est un listage du fichier /etc/printcap qui fut utilisé pour communiquer avec le serveur d'impression JetDirect :
# HP Laserjet 4050n lp|lj4050n:\ :lp=/dev/null:sh:\ :mx#0:\ :sd=/usr/spool/lj4050n:\ :rm=e328-laser.domainname.com:rp=text:
Où :
Depuis le Voisinage Réseau, double-cliquez sur l'icône de l'imprimante partagée par le serveur Linux. Windows demandera alors de configurer l'imprimante. J'ai partagé le CD de configuration de l'imprimante sur le serveur Linux et parcouru le dossier disk1 pour trouver le fichier .INF de l'imprimante. L'installation/configuration de l'imprimante s'arrêtera en affichant un message dans le genre "Ne peut trouver le disque 2" : passez juste dans le répertoire supérieur et sélectionnez le dossier disk2, cela terminera l'installation, et vous aurez fini. En général, j'envoie la page de test pour s'assurer que tout fonctionne bien.
La procédure d'installation normale est d'exécuter le setup depuis le CD, mais en général cela installe plusieurs méga octets de données sur le client, ce qui n'est pas ce que je désirais. Je voulais juste le pilote d'impression, et j'ai trouvé que la méthode ci-dessus donne une configuration rapide, propre et simple de l'imprimante.
Il fut étonnamment simple de configurer SAMBA et de le voir s'accorder avec les objectifs du labo. La première fois que j'ai lancé SAMBA, ça ne m'a pas pris plus de dix minutes pour le faire communiquer avec Win95. Ce fut très étonnant, car je n'avais aucune expérience de SAMBA. Lors de la configuration de l'environnement informatique du labo, j'ai rencontré quelques problèmes ; certains embêtants, certains nécessitant un peu de recherche pour en venir à bout, mais tous furent résolus.
Un exemple de problème embêtant était d'avoir le répertoire [home] qui s'affichait comme un partage, sur un poste client. Il était identique au répertoire "home" du poste client. Ce fut résolu en ajoutant "Browseable = No" dans la section "Global" du fichier /etc/smb.conf.
Le problème le plus frustrant fut de constater que le fichier smbpasswd ne pouvait pas être automatiquement constitué d'après le fichier shadow. La machine me demande toujours un nom de compte et mot de passe chaque fois que j'essaye de me connecter sur un partage réseau ; toute la documentation m'indiquait que je faisais tout bien comme il fallait. L'utilisation du programme smbpasswd pour entrer manuellement les mots de passe de chaque utilisateur résolu le problème. Je suis sûr qu'il y a un moyen de faire cela automatiquement, car ça ne serait pas acceptable s'il y avait plus que mes 10 comptes utilisateurs génériques.
Tout compte fait, je fut capable de configurer le réseau plus rapidement et plus facilement que si j'avais utilisé un serveur NT, et le serveur Linux est totalement transparent à l'utilisateur. Un détail intéressant : ça m'a pris plus de temps pour écrire cet article que pour configurer le réseau.
Copyright 1999, Eugene Blanchard. Paru dans le numéro 48 de la Linux Gazette de Décembre 1999.
Traduction française de Christophe Pernod.