Cet article décrit l'installation d'un serveur NIS sous Linux. Un serveur NIS permet de déporter la gestion des utilisateurs sur un serveur. Avec l'utilisation des services réseau de Linux, il est alors facile de localiser tous les répertoires personnels des utilisateurs sur un serveur, et de les exporter sur le réseau. Ainsi les utilisateurs peuvent changer de machines et retrouveront toujours leurs paramétrages personnels (bureau, paramétrage personnels des logiciels etc....).
Je décris aussi dans cet article comment gérer une parc de machines avec l'utilisation de ssh de perl et du module perl-expect de perl. Ces outils permettent de gérer un grand parc de machines, de manière automatique, et sans avoir à se déplacer physiquement sur les machines (à condition tout de même qu'elles soient démarrées sous Linux).
Un grand merci à Olivier Hoarau dont le site m'a servi pour mettre connaître le système NIS.
Je vais supposer que vous avez une machine que vous pouvez utiliser comme serveur (machine standard, avec assez de RAM, par exemple 256Mo ou plus). Nous allons installer Linux sur cette machine, que nous appellerons le serveur. On y placera la distribution, ensuite on utilisera une méthode pour installer Linux sur les autres machines à partir du serveur.
Ici on va effectuer une installation classique à partit des CD. Dans mon cas le serveur sert au moins pour stocker la distribution et les répertoires communs de tous les utilisateurs. Si vous avez deux disques durs je conseillerai de mettre le /home qui contiendra tous les utilisateurs sur ce disque. Bien sur, on a ici un serveur, donc s'il y a un autre OS installé, on reformate tout. Si l'ordinateur vous est livré avec windows, ne démarrer pas sur l'OS et penser peut-être a vous le faire rembourser : http://www.linux-center.org/detaxe/.
Je suppose évidemment que le serveur dispose d'une carte ethernet.
Commencer par bouter sur le Cd et démarrer l'installation. Ensuite (de mémoire)
On suppose ici qu'il existe un utilisateur autre que root nommé toto.
On se logue en tant que utilisateurs toto (si vous n'avez pas modifié les paramètres initiaux de votre installation, le login doit être graphique). Je vais considérer qu'on a démarré avec le gestionnaire de fenêtre par défaut de mandrake qui est KDE. Je préfère me loguer en tant que toto, et ensuite travailler en tant que root dans l'environnement graphique de toto, cela évite d'avoir à taper à chaque moment un mot de passe dans l'écran de veille de root, et puis c'est la bonne démarche. On va donc ouvrir une console d'autre disent un terminal.
Pour ouvrir une console, dans la barre des tâches, cliquer sur K,
et dans le menu, il doit y avoir terminaux, et en l'activant
vous pouvez alors ouvrir konsole, qui ouvre un console.
Je vous conseille au passage de rajouter dans la barre des tâches
un lien direct vers le programme konsole. Dans la barre des
tâches, cliquer sur le bouton droit de la souris, puis
ajouter -> bouton d'application -> terminaux -> konsole
On devient root, qui est le superutilisateur en tapant dans la konsole :
$ su
on tape alors le mot de passe de root, et ça y est, toutes les applications que l'on va maintenant lancer à partir de la console auront les droits de root. Si vous voulez un gestionnaire de fichiers graphique, vous pouvez par exemple taper
$ konqueror &
Vous devriez alors voir s'ouvrir konqueror, qui est le gestionnaire de fichier de KDE. Mais là il est ouvert en tant que root. Vous auriez pu l'ouvrir en tant que toto, en cliquant sur votre maison dans la barre des tâches, mais cela ne nous intéresse pas pour le moment. Au passage remarquer le &, qui dit à konqueror de démarrer en arrière plan, ce qui permet de continuer à utiliser la console root. Pour la suite, je vais tout faire en mode console, vous pouvez donc fermer konqueror (ou faire la même chose avec si vous savez l'utiliser).
On va mettre la distribution sur le serveur. On va donc par exemple créer, si vous lui avez réservé assez de place un répertoire dans /var
$ mkdir /var/distro
$ mkdir /var/distro/9.2
On dispose maintenant de /var/distro/9.2, qui est un répertoire et dans lequel on va pouvoir placer le contenu des trois CDs de la distribution.
On va vider tout le premier CD dans /var/distro/9.2. Ensuite il va falloir copier les deux autres. Là on ne recopie que les répertoires RPMS2 et RPMS3 qui sont dans le répertoire Mandrake des CD2 et CD3 de la distribution. On les copie /var/distro/9.2/Mandrake. Ça y est la distribution est installée.
On va maintenant autoriser l'exportation de ce répertoire sur le réseau.
On modifie le fichier /etc/exports pour exporter le répertoire en nfs sur le réseau local.
$ kwrite /etc/exports
si votre réseau est du type 255.255.0.0, on ajoute la ligne
/var/distro 192.168.0.0/255.255.0.0(ro)
si il est du type 255.255.255.0 avec IP de la forme 192.168.x. avec x qui est votre nombre on ajoute
/var/distro 192.168.x.0/255.255.255.0(ro)
on sauvegarde le fichier on quitte kwrite et on revient en mode konsole. Quelquefois, il y a des messages de kde qui se rajoutent dans la console, n'en tenez pas compte et faites ``enter'' jusqu'à avoir une ligne propre.
Vous pouvez éventuellement régler les fichiers /etc/hosts.deny et /etc/hosts.allow pour les droits d'exportations. Au passage, vous pouvez utiliser en tant que root, l'outil webmin, pour exporter votre répertoire en nfs, et en même tant régler les droits d'exportations. Tapez webmin dans la console et loguez vous, mais ceci est une autre histoire...
on valide les changements avec
$ exportfs -a
A ce stade, la distribution est chargée et elle peut être montée en nfs à partir des autres postes. Si par exemple l'IP du serveur est 192.168.0.1, on peut faire en root sur un autre poste
$ mkdir /mnt/nfs
$ mount -t nfs 192.168.114.155://var/distro/9.2 /mnt/nfs
dans /mnt/nfs, on a alors la distribution de Mandrake. Ceci permet maintenant l'installation réseau des autres postes.
Remarque : Comme la distribution est maintenant disponible sur le serveur, on peut dire au système de ne plus utiliser que la distribution placé sur le disque dur. Pour ce faire, dans la console en mode root, taper
$ drakconf
et ensuite, dans voir ou sont récupérer les logiciels, vous donner un nom pour les paquetages de RPMS, par exemple 9.2_RPMS, vous dites que c'est en local, et vous donnez le lien vers le répertoire, ça devrait être ici /var/distro/9.2/Mandrake/RPMS, puis on indique le de-scripteur des paquetages de RPMS dans chemin vers hdlist. On met ../base/hdlist1.cz . Ça veut dire que avec .. on revient dans /var/distro/9.2/Mandrake, puis ensuite avec ../base on est dans /var/distro/9.2/Mandrake, et c'est la qu'il faut prendre le fichier hdlist1.cz. on recommence avec les deux autres. Après, vous pouvez décocher les CDs dans voir ou sont récupérés les logiciels. Maintenant quand vous ferez urpmi pour installer des paquetages de la distribution, le système ira les chercher sur le disque au lieu de vous demander les CD. Bien sur tout ceci peut aussi être fait avec urpmi.addmedia.
$ man urpmi.addmedia
et en exercice, faire la même chose en mode console, et avec urpmi.removemedia enlever les CDs de la distribution.
Dans ce paragraphe on retrouve comme paramètres
mondomainenis qui est le nom de domaine de votre serveur NIS, choisissez ce que vous voulez, par exemple lyceeNIS.
serveur qui est le nom de votre serveur (ça peut être son nom HOSTNAME si vous avez un serveur de nom ou son adresse IP si elle est fixe, je préfère la deuxième solution pour un serveur).
$ urpmi ypserv mawk.
on vérifie qu'il contient ou on le modifie de la sorte pour qu'il
contienne
#pas de slave pour les maps
NOPUSH=true
MINUID=500
MINGID=500
MERGE_PASSWD=false
MERGE_GROUP=false
all: passwd group shadow
$ domainname mondomainenis
$ service ypserv restart
$ service yppasswdd restart
$ cd /var/yp
$ make
il se crée un répertoire mondomainenis
$ 192.168. : passwd.byname : port : yes
$ 192.168. : passwd.byuid : port : yes
$ kwrite /etc/exports
s'il est du type 255.255.255.0 avec IP de la forme 192.168.x. avec x qui est votre nombre vous ajouterez la ligne
/home 192.168.x.0/255.255.255.0(rw)
vous sauvegardez, et éventuellement vous réglez les fichiers /etc/hosts.deny et /etc/hosts.allow pour les droits d'exportations.
on valide les changements avec
$ exportfs -a
$ touch /home/aquota.user
$ chmod 600 aquota.user
/dev/hda7 /home ext3 defaults 1 2
devient
/dev/hda7 /home ext3 defaults,usrquota 1 2
$ webmin
on le démarre donc en root sinon on génère une erreur dans
la console. Il faut que les cookies soient activés sur le navigateur.
Dites que vous acceptez une authentification pour cette cession seulement.
Ensuite on se logue en tant que root et il y a le mot de passe
à entrer pour entrer sur la machine (c'est normal, c'est un outil
d'administration distant) et regarder quel bel outil nous avons là.
Aller ensuite dans system et cliquer sur disk quotas.
Vous devez alors voir les utilisateurs. On va juste mettre des quotas
pour un utilisateurs, après on va les recopier. Enregistrer et quitter
webmin.
On suppose maintenant que user est un utilisateur avec quota.
Dans la distribution on va se placer dans le répertoire /images. Ici sur le serveur on va donc dans /var/distro/9.2/Mandrake/images. Il y a un fichier nommé network.img qui permet une installation par réseau (non automatique). On va copier ce fichier sur une disquette bits à bits.
$ dd if=network.img of=/dev/fd0
Ça y est, si vous bootez un ordinateur sur votre disquette, il vous
demandera une IP, puis où chercher votre distribution. Dans notre
exemple, c'est un réseau nfs et la distribution se trouve sur
192.168.114.115://var/distro/9.2
Si le serveur à le droit d'exporter sur cette IP, il va commencer
l'installation standard (comme sur les CD). Après il vous faudra passer
au paragraphe Configuration des postes clients sur une installation
existante pour configurer l'ordinateur en client NIS. Vous n'aurez
cependant plus besoin des CDs, car il y dira directement rechercher
les paquetages sur le serveur.
On va automatiser tous les processus d'installation, définir les paquetages
à l'avance, les services, et faire une post-installation. Tout ceci
est bien expliqué dans le paquetage
drakx-autoinstall-doc-9.0.1-2mdk.noarch.rpm.
Suivant votre distribution, il faut le récupérer sur le net et l'installer. Il peut ensuite se lire localement à l'URL
/usr/share/doc/drakx-autoinstall-doc-9.0.1/AutoInstall-9.0.1.html
Il va falloir construire pour chaque machine un fichier de configuration
qu'on mettra sur le serveur et une disquette.
Voici un exemple de fichier de configuration d'une machine d'où j'ai retiré les mots de passes cryptés en md5 des utilisateurs qui sont configurés autoamtiquemsnt sur les postes.
auto_inst.cfg ../../script/auto_inst.cfg
Vous pouvez remarquer qu'à la fin du fichier, il y a une post-installation qui lance des scripts de configuration supplémentaire sur la machine que l'on installe. Les scripts sont regroupés dans un répertoire sur le serveur, mais sont notamment démarrés les scripts de configuration NIS et de sécurités :
Voici le script perl d'installation du client NIS
NIS client ../../script/NIS_client.pl
Voici le script de sécurisation de lilo0 pour empécher que des paramètres ne soient envoyés au noyau. Je vous conseille d'ailleurs d'utiliser grub qui permet le codage md5 pour les mots de passe.
securisation de lilo ../../script/sec_lilo.pl
Voici un un script pour générer automatiquement des fichiers de configuration à partir d'un fichier type, de modifier les IP et les noms des machines, et de préparer automatiquement des disquettes.
script pour disquettes et configurations ../../script/make_autoconfig.pl
En voici un autre pour réinstaller les distributions : en mettant une disquette dans chaque machine à réinstaller et en démarrant Linux, on va balayer les machines à installer, préparer la disquette sur la machine et la redémarrer ce qui commencera l'installation de la machine.
réinstallation automatique ../../script/make_autodisket_distant.pl
$ kwrite /etc/auto.master
on doit avoir les lignes
/misc /etc/auto.misc -timeout=60
/net /etc/auto.net -timeout=60
on peut enlever ces lignes si on ne s'en sert pas et on rajoute
/export /etc/auto.home -timeout=60
$ mkdir /export
$ mkdir /etc/auto.home
home -fstype=nfs serveur:/home
où serveur est ici le nom du serveur NIS ou son IP
NISDOMAIN=mondomainenis
où mondomainenis et le nom de votre domaine NIS
domain mondomainenis server serveur
avec mondomainenis et serveur à remplacer par vos noms.
on peut rajouter des serveurs esclaves si on à un serveur de secours....
ypserver nom-du-serveur-slave
mais ça je n'ai pas encore essayé....
passwd: files nis
group: files nis
hosts: files nis dns
$ service portmap start
$ service ypbind start
$ ypwhich
on devrait récupérer une réponse de la forme serveur ou IP du serveur NIS. Il m'est déjà arrivé de ne rien avoir à ce stade, mais je crois que j'avais démarré ypbind avant de lancer ou relancé portmap.
Voir le script urpmi.pl, qui supprime la recherche des paquetages sur les cd d'installations et permet d'avoir des installations automatiques des paquetages ( à condition toutes fois de monter en nfs le répertoire distant sur lequel existe la distribution).
Il est maintenant temps de parler de perl-expect :
En simplifiant : le module expect de perl permet de simuler des frappes clavier et donc de simuler des frappes de mots de passes. On peut donc automatiser un certain nombre de choses. L'idée et de balayer le parc de machines, et se connecter à chaque machine, d'y devenir root, d'y copier les scripts à lancer et d'éventuels fichiers, de démarrer ces scripts, et d'effacer ensuite ce dont on ne ce sert plus. Pour cela on utilise bien sur des connexions ssh pour se loguer sur la machine et scp pour copier des fichiers. Ainsi toutes les connexions sont cryptés.
Voici un programme perl utilisant expect qui copie un répertoire entier sur la machine distante, et qui démarre les scripts envoyé sur la machine.
programme perl expect ../../script/dist_expect.pl
Il faudra donc mettre dans le répertoire, les fichiers :
NIS_client.pl ../../script/NIS_client.pl
et
securisation de lilo ../../script/sec_lilo.pl
Sous Mandrake, les utilisateurs sont créés en même temps qu'un groupe qui à le même nom qu'eux. Mais par défaut (en tous les cas au niveau de sécurité standard, il y a lecture par défaut pour tous les utilisateurs). Pour l'enlever je mets un umask de 027 pour tout le monde (sauf root). Ainsi les autres utilisateurs n'ont aucun droit de lecture sur les fichiers créés. Donc sur les clients, mais on peut le faire aussi sur le serveur, je modifie les fichiers
Normalement il faudrait n'autoriser pour portmap que les ordinateurs de votre réseau ce qui se règle dans /etc/hosts.deny et /etc/hosts.allow. Il est de bonne augure aussi de mettre un firewall sur le serveur mais ceci sera peut être l'objet d'un autre article....
Ne pas oublier non plus lilo. Il faut empêcher le passage de paramètre au noyau lors du démarrage sinon la personne peut acquérir les droits root !
Voir le script lilo_sec.pl
lilo_sec.pl ../../script/lilo_sec.pl
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -up_url ../../index.html -up_title 'retour au site' -split 0 -local_icons -dir article1/pagepleine -show_section_numbers installation_NIS.tex
The translation was initiated by marc on 2004-02-12