Apportez votre aide…
Configuration d'un serveur NIS
D'après Wikipedia NIS a pour but « de distribuer les informations contenues dans des fichiers de configuration contenant par exemple les noms d'hôte (/etc/hosts), les comptes utilisateurs (/etc/passwd), etc. sur un réseau ». Un serveur NIS stocke et distribue donc les informations administratives du réseau et qui se comporte ainsi comme un ensemble cohérent de comptes utilisateurs, groupes, machines, etc.
A l'origine, NIS est sorti sous le nom de « Yellow Pages » (YP) ou Pages jaunes mais le nom étant déposé par la compagnie anglaise British Telecom, Sun a renommé son protocole NIS. Cet héritage transparaît dans les commandes NIS commencent toutes par "yp".
De nos jours, NIS est réputé pour être faible en termes de sécurité. C'est pourquoi il est recommandé de se tourner vers des solutions alternatives, comme par exemple :
- Kerberos
- RADIUS
Installation du serveur NIS
- Il sera demandé le nom de votre domaine NIS. C'est un choix arbitraire, il faut juste que ce soit le même pour le serveur et les clients.
Configuration du serveur NIS
Nous partirons du principe que votre serveur et les clients disposent d'adresses IP statiques.
- Si vous utilisez Ubuntu Warty, éditer le fichier /etc/hosts et y ajouter pour chaque nom de client les adresses IP correspondantes. L'adresse IP du serveur devrait déjà être présente. On ne parle pas ici de 127.0.0.1, mais de l'adresse IP assignée au serveur NIS dans son réseau local. Ce faisant, NIS pourra fonctionner même si le serveur DNS est hors-service. Vous pouvez si vous le souhaitez également relayer vers le DNS. Exemple :
192.168.1.1 hostname_client1 192.168.1.2 hostname_client2
- Éditer le fichier le fichier de configuration du serveur NIS /etc/hosts.allow et ajouter la ligne :
portmap ypserv ypbind : "liste d'adresses IP"
… où "liste d'adresses IP" sera la liste de toutes les adresses IP des clients ainsi que celle du serveur. Il faut mettre uniquement des adresses IP. Ceci a devenu obligatoire suite à une limitation de portmap qui ne supporte pas les noms d'hôtes.
- Éditer le fichier /etc/default/portmap et commenter la ligne :
ARGS="-i 127.0.0.2"
- Éditer le fichier /etc/default/nis et définir la ligne NISSERVER à :
NISSERVER=master
- Éditer le fichier /etc/yp.conf et ajouter une ligne de serveur sur la forme :
ypserver 127.0.0.1
- Éditer le fichier /var/yp/Makefile et lire les instructions. Il n'y aura probablement pas besoin de faire beaucoup de modifications. La seule chose que j'ai changé a été la ligne MINGID qui définit si l'appartenance au groupe doit être propagée à travers le domaine. Je l'ai définie à 1.
- Éditer le fichier /etc/ypserv.securenets et ajouter les lignes qui restreindront l'accès aux membres du domaine. Exemple :
host 192.168.1.1 host 192.168.1.2 etc.
sudo /usr/lib/yp/ypinit -m
et suivre les instructions. Cela engendrera certainement des messages d'erreurs disant que le programme n'est pas en mesure de contacter certaines choses. Ce n'est pas grave. (Les autres erreurs le sont probablement).
- Redémarrer les services appropriés :
sudo service portmap restart sudo service nis restart
sudo kill -9 $(pidof portmap)
- Par la suite, en cas de changement de configuration (par exemple, ajouter un utilisateur, etc.), ne pas oublier de lancer :
sudo make -C /var/yp
Sécurité
NIS est un service qui comporte des risques en terme de sécurité. Tout utilisateur malveillant ayant accès a serveur peut récupérer les listes de mots de passe. Qu'ils soient stockés en clair ou chiffrés, cette information reste exploitable. Il suffit d'écrire une application qui présente correctement la version chiffrée du mot de passe au système d'authentification pour qu'elle soit authentifiée.
Pour éviter ce genre d'attaque, il est primordial de contrôler qui a accès à cette information :
- Éditer le fichier /etc/hosts.allow et référencer les clients légitimes pour chaque service. Éditer le fichier /etc/hosts.deny avec ALL afin que cela fonctionne.
- Éditer le fichier /etc/securenets afin de limiter à quels clients membre du domaine le serveur répondra.
Ceci ne suffit cependant pas à prévenir le cas où une machine ennemie prend l'adresse IP d'un client légitime. Pour prévenir ce genre de situation, il faut s'appuyer sur IPSec. L'idéal est de paramétrer tous les membres du domaine de sorte à ce qu'ils ne communiquent que par IPSec. Ceci permet de s'assurer que chaque client est légitime. En effet, le client crypte le trafic à destination du serveur avec la clé du serveur, et le serveur répond à chaque demande en cryptant avec la clé du client. Le trafic est décrypté avec les clés respectives. Ainsi, un client ne disposant pas des clés qu'il est supposé avoir ne pourra ni envoyer ni recevoir de données. Le fichier contenant les clés est raisonnablement protégé (il n'est lisible qu'avec des droits root). Les clés peuvent être obtenues sans compromettre le client.
Toutefois, si un client légitime est compromis, l'attaquant peut obtenir la liste de mots de passe (ce qui est une faille dans la plupart des systèmes d'authentification de domaine).
Installation du client NIS
- Il sera demandé le nom de votre domaine NIS. C'est un choix arbitraire, il faut juste que ce soit le même pour le serveur et les clients.
Configuration du client NIS
- Éditer le fichier /etc/hosts et y ajouter le serveur, afin de rendre le client robuste aux pannes de serveur DNS.
- Éditer le fichier /etc/hosts.allow une ligne pour portmap
portmap : adresse_du_serveur_nis
… où adresse_du_serveur_nis correspond à l'adresse du serveur NIS.
- Éditer le fichier /etc/passwd et ajouter la ligne suivante en fin de fichier. Elle indique au système que d'autres utilisateurs (réels, ou associés à des services) que ceux indiqués dans le fichier sont authentifiés grâce au serveur NIS :
+::::::
- Éditer le fichier /etc/group et ajouter à la fin de celui-ci la ligne suivante :
+:::
- Éditer le fichier /etc/shadow et ajouter à la fin de celui-ci :
+::::::::
- Éditer le fichier /etc/nsswitch.conf Cela définit les services qui doivent inclure des entrées NIS si une correspondance n'est pas trouvée dans le fichier. Vous pourriez changer d'autres services de nom, mais ceux-ci sont les plus importants.
passwd: files nis group: files nis shadow: files nis
- Éditer le fichier /etc/yp.conf et ajouter la ligne:
domain domain_name server hostname_serveur
… où domain_name est le nom de votre domaine NIS, et hostname_serveur est le nom de votre serveur NIS.
127.0.0.1 localhost <adresse_du_serveur> <nom_du_serveur> <adresse_d'un_client> <nom_d'un_client> ...
Ce fichier sera retransmis aux clients tel quel, et pourra donc être utilisable quoiqu'il advienne.
- Redémarrer NIS:
service nis restart
Cohabitation SuSe et Ubuntu
Sous SuSE Linux, l'algorithme d'encryptage des mots de passe (mots de passe "blowfish") a été amélioré par rapport à l'encryptage UNIX standard, tout en restant compatible avec celui-ci. Cette évolution se traduit par le remplacement de la bibliothèque pam_unix.so par pam_unix2.so.
Cela signifie concrètement qu'une machine fonctionnant sous SuSE peut s'authentifier sans problème auprès d'un serveur qui utilise pam_unix2.so. Cependant, l'inverse n'est pas vrai : une machine utilisant les algorithmes standard (comme c'est le cas sous Ubuntu) ne peut pas s'authentifier auprès d'un serveur NIS fonctionnant utilisant pam_unix.so. Pour contourner ce problème, il suffit d'installer sur les machines Ubuntu concernées les mêmes bibliothèques que celles utilisées sous SuSE et configurer PAM pour les utiliser.
- Éditer les fichiers /etc/pam.d/common-auth et /etc/pam.d/common-password, puis y remplacer "pam_unix.so" par "pam_unix2.so".