Où l’on continue la mise en place de notre serveur avec l’installation d’élément de confort, la mise en place de snapshots régulier et la configuration de OpenLDAP
Changement de /usr/local
La configuration locale d’un FreeBSD se trouve dans /usr/local, /etc étant réservé au système de base. Par défaut, il s’agit d’un répertoire. Nous allons nous en servir comme point de montage d’un dataset1 ZFS. Nous pourrons ainsi bénéficier des snapshots2. Le zpool que nous utilisons s’appelle zroot et c’est sur lui que nous allons créer le dataset :
|
|
Ce qui signifie :
- zfs create → création d’un dataset zfs (zfs est la commande principal, create est le premier paramètre) ;
- -o → suivent les options
- mountpoint=/usr/local → le point de montage sera /usr/local
- zroot/usr/local → le dataset est créé dans le zpool zroot dans l’arborescence usr/local
On peut vérifier que la commande a bien été exécutée :
|
|
Mise à jour
Il est fort probable qu’entre la constitution de l’image d’installation que nous avons utilisée et maintenant, un nombre important de logiciels soit mit à jour. Nous allons donc récupérer les nouvelles versions de ces logiciels, mais également de l’intégralité des ports3 disponible. Nous allons tout d’abord télécharger une nouvelle base de données de la collection des paquets (les ports) disponibles :
|
|
Puis nous allons extraire un snapshot de ce que nous venons de télécharger :
|
|
Par la suite nous pourrons utiliser les commandes suivantes :
|
|
Il est même possible de coupler cela en une seule commande :
|
|
Utilisation de pkg pour la gestion des paquets binaire
La mise en place de l’outil se fait facilement :
|
|
Mise en place des snapshots automatique
Afin de commencer au plus tôt à nous protéger par des snapshot zfs, nous allons installer un port qui met en place une série de scripts qui réalise des snapshots régulier et purge les plus anciens de manière automatisée. Ce port se nomme zfs-periodic. Nous allons utiliser la commande pkg pour faire cette installation :
|
|
L’installation de zfs-periodic nous donne des instructions pour finir la mise en place de cet outil. Nous devons modifier le fichier /etc/periodic.conf et y ajouter les lignes qui sont décrites.
Attention, il ne faut pas les reprendre tels quels, notre pool n’a pas forcément le même nom.
Nous devons également ajouter une ligne dans le fichier /etc/crontab afin que les scripts soient lancés périodiquement.
Un peu plus tard, nous pourrons vérifier que cela fonctionne avec la commande :
|
|
Confort
Je suis un utilisateur de vi, mais comme les améliorations apportées par vim (VI Improved) me manquent rapidement. C’est pourquoi je vais dès à présent installer ce produit et le configurer un minimum.
|
|
De nombreux autres paquets sont nécessaires, ils seront tous installés automatiquement par pkg.
Je vais créer dans le répertoire “HOME” de root (/root) un fichier .vimrc. Celui est lu à chaque lancement de vim et conporte des instructions de personnalisation :
|
|
C’est-à-dire :
- set nu → numérotation des lignes
- syn on → coloration syntaxique
Gestion des utilisateurs
Un certain nombre (dont root) existent par défaut dans le système. Mais nous allons avoir besoin d’autres utilisateurs sur notre système. Nous pourrions les gérer à l’ancienne, dans le fichier /etc/passwd, mais nous allons opter pour une gestion centralisée en utilisant le protocole LDAP avec l’outil OpenLDAP.
Installation des outils
Nous avons besoin de openldap-server et de openldap-client. En effet notre machine est serveur LDAP et cliente d’elle même. Heureusement, l’installation du serveur installe également le client (et une bibliothèque nécessaire au bon fonctionnement de l’ensemble). Une fois de plus, des instructions nous sont données à la fin de l’installation.
|
|
Configuration du serveur
La configuration du serveur se fait dans le fichier /usr/local/etc/openldap/slapd.conf. Le programme principal du serveur openldap se nomme slapd.
Étudier toutes les lignes de ce fichier serait fastidieux et d’autres le feront mieux que moi. Je ne vais parler que des lignes qui changent, en quoi elles changent et pourquoi.
Les schémas
Sans entrer dans les détails, les données du LDAP sont organisées selon des schémas codifiés. Chaque schéma étant un peu plus les possibilités du LDAP et les champs disponibles. Les schémas décrivent ces champs, ceux qui sont obligatoires, ceux qui sont obligatoires entre eux (si l’un existe alors un autre doit exister), ceux qui sont facultatifs. Celui qui est déjà présent est le schéma de base, core.schema. Nous aurons besoin d’autres schémas pour stocker les données que nous désirons. Nous allons donc ajouter des schémas, à la suite de la ligne déjà présente.
|
|
Les modules
Les modules permettent d’étendre ou de préciser certains paramètres de LDAP. Par exemple la synchronisation de la base sur deux machines (que nous n’exploiterons pas) est régie par le module syncrepl. Ici nous avons besoin de préciser le module qui servira au stockage des données.
Nous allons décommenter les deux lignes suivantes :
|
|
Le suffix
Le suffix est l’un des éléments constants des attributs de notre base LDAP. Il permet de rendre uniques les enregistrements. En général, on utilise le nom de domaine décomposé. Mon nom de domaine est foucry.net, mon suffixe est donc :
|
|
Le rootdn
Le DN, pour distingued name est une façon unique de retrouver les enregistrements. Le rootdn est celui de l’utilisateur administrateur de la base LDAP
|
|
Autres éléments (et pas des moindres)
Nous allons définir le type de base de données que nous allons utiliser pour stocker les objets de notre LDAP. Cet élément doit être conforme au module correspondant :
|
|
Le rootpw est le mot de passe du rootdn que nous avons défini plus haut. Nous allons mettre un mot de passe offusqué que nous allons créer maintenant avec quelques commandes. Nous allons tout d’abord générer un mot de passe aléatoire, avec la commande openssl puis le transformer en quelque chose qui n’est pas compréhensible par les humains, avec la commande slappasswd.
|
|
C’est le résultat de slappasswd que nous mettons dans le fichier en face de rootpw
|
|
Attention, sauvegarder dans un coin le mot de passe, openssl ne vous le redonnera jamais.
Nous allons également définir le répertoire dans lequel openldap va stocker ses fichiers.
|
|
Le fichier /etc/rc.conf
Ce fichier est extrêmement important pour le système, c’est lui qui indique quels sont les services qui seront lancés au démarrage de la machine. On trouve également les paramètres que ces services devront utiliser pour démarrer.
Nous allons indiquer comment le service LDAP doit démarrer et avec quels paramètres :
|
|
Démarrage du service
Normalement tout est prêt et le service devrait fonctionner (sans données) correctement. Il est temps de le démarrer :
|
|
On a un avertissement au moment du démarrage, slapd ne trouve pas la socket que nous lui avons indiqué dans le fichier /etc/rc.conf
Vérification du bon démarrage du service
Nous allons faire une requête au service et vérifier que sa réponse est conforme à ce que l’on attend :
|
|
Nous avons une réponse de notre serveur. Certes, il indique qu’il n’a rien trouvé (No such object), mais c’est normal puisque notre base est vide.
Peupler notre LDAP
Il est maintenant temps de peupler notre LDAP avec un début d’arborescence. Nous allons voir comment créer les premiers niveaux de cette arborescence.
Il faut éditer un fichier, que nous appellerons addstuff.ldif :
|
|
Une fois ce fichier sauvegardé, nous allons ajouter les données qu’il contient dans LDAP à l’aide de la commande ldapadd :
|
|
mon fichier addstuff.ldif est issue de la sauvegarde d’un autre serveur LDAP. La mise en place des données se fait de la même manière, avec ldapadd.
Ajouter des enregistrements
Vous aurez sans doute besoin d’ajouter des enregistrements dans votre LDAP. Il suffit de faire un fichier de description et d’utiliser ldapadd pour les ajouter.
Voici un exemple pour un utilisateur :
|
|
Une autre possibilité est d’utiliser ldapvi, une version spéciale pour éditer les informations d’une base LDAP. L’outil vérifie la conformité avec les schémas présents dans la configuration de slapd.
Configuration du client
Le logiciel client est déjà installé, nous l’avons fait au début de cet article. Il faut maintenant le configurer.
Le fichier de configuration est /usr/local/etc/openldap/ldap.conf
Dans celui-ci nous allons indiquer la base de recherche, l’url vers laquelle faire les requêtes.
|
|
Cette configuration ne permet pas encore la connexion des utilisateurs (via ssh ou autre). Il manque quelques logiciels que nous devons installer :
- pam_ldap
- nss_ldap
|
|
Configuration de pam_ldap
La configuration se fait dans le fichier /usr/local/etc/ldap.conf.
Attention : ce fichier n’est pas le même que /usr/local/etc/openldap/ldap.conf
Le contenue de ce fichier est simple et reprend l’autre fichier ldap.conf en le complétant. Nous allons donc commencer par recopier /usr/local/etc/openldap/ldap.conf.
|
|
Nous ajoutons dans ce nouveau fichier la ligne :
|
|
Qui indique que à pam, l’autre logiciel que nous venons d’installer, de rechercher dans la base LDAP, l’attribut uid pour la connexion des utilisateurs.
uid est l’un des attributs des utilisateurs que nous ajoutons à notre LDAP. Regardez à nous l’extrait de fichier plus haut dans cette page.
PAM
PAM signifie Pluggable Authentification Modules. Il s’agit de la méthode utilisé par de nombreux Unix (dont Linux et FreeBSD) pour authentifier les sessions.
La plus grande partie de la configuration se fait dans le répertoire /etc/pam.d. Dans se répertoire on trouve un fichier par module d’authentification possible (sshd, ftp, imap, pop3,…) Pour ce qui est des connexions distantes via ssh, c’est le fichier /etc/pam.d/sshd qui est concerné.
Chaque fichier peut contenir plusieurs sections, pour l’authentification (auth), le compte utilisateur (account), les sessions (sessions) et les mots de passe (password).
je ne détaillerais pas ici les différentes sections ni comment elles fonctionnent, vous trouverez sur Internet de quoi étancher votre soif de savoir.
Dans le fichier /etc/pam.d/sshd nous allons ajouter une ligne dans la section auth afin de d’indiquer que l’authentification se fait en interrogeant le serveur LDAP.
|
|
Nous allons aussi ajouter une ligne dans la section account afin que PAM vérifie l’existence effective du compte (et que celui-ci n’est pas bloqué). Pour éviter de bloquer les utilisateurs qui ne sont pas dans le LDAP (root par exemple) et que vous ne soyez bloquer si le serveur LDAP devient injoignable nous allons ajouter les lignes suivantes :
|
|
NSS
NSS signifie Name Service Switch. C’est le service qui est chargé de faire la corrélation entre l’uid d’un utilisateur son nom. Cette information était historiquement stockée dans le fichier /etc/passwd. Elle est désormais dans le LDAP. Il est donc nécessaire d’indiquer à nss d’aller la chercher dans ce service. C’est dans le fichier /etc/nsswitch que se fait cette configuration. Nous allons modifier les lignes passwd et group :
|
|
deviennent :
|
|
Il faut également indiquer à nss sur quel serveur trouver les informations. Cela se fait dans le fichier /usr/local/etc/nss_ldap.conf. Il suffit d’y mettre l’adresse IP du serveur et la base de recherche :
|
|
Normalement vous devriez avoir un LDAP en étant de fonctionnement.
Un dernier point
N’oubliez pas de créer un dataset ZFS pour le répertoire home de chacun de vos utilisateurs :
|
|
De mon côté cette nouvelle machine remplaçant une machine excitante, je vais migrer les dataset ZFS de l’ancienne machine vers la nouvelle. C’est l’une des fonctionnalités absolument géniales de ZFS :
|
|
La première machine envoie (zfs send) le dataset à travers ssh vers la nouvelle machine qui reçois les données et les ranges dans le zpool désigné en créant le dataset voulu (zfs receive zroot/usr/home/jacques). Epoustouflant n’est-ce t-il pas ?
-
ZFS est un système de fichier créé par Sun Microsystem (racheté par Oracle) qui possède des fonctionnalités très intéressantes. Sa capacité, les snapshot, la compression et la déduplication à la volée, l’absence de formatage. L’entité de base est le ZPOOL constitué d’un ou plusieurs disques physiques, organisés en “stripe”, “mirror”, “raid”, etc. Chaque zpool peut porter un nombre important de dataset. Chaque dataset comporte un certain nombre de paramètres, dont le point de montage ce qui les apparentes à des systèmes de fichiers sur des partitions. Pour plus de précisions sur ZFS, lisez la page wikipédia qui lui est consacrée. ↩︎
-
les snaphosts de ZFS (ou d’autres systèmes de fichiers) sont de photographies à l’instant T. Ils sont figés et même si le système de fichier dont ils sont issus continue à vivre, les données qu’ils contiennent ne changent plus. Ils peuvent ensuite être utilisés pour faire des sauvegardes sur des supports externes (bandes magnétiques, disque dur, cloud), mais également pour revenir à un état précédent une manipulation importante, typiquement la mise à jour d’un logiciel ou du système. ↩︎
-
les ports constituent les logiciels préparés pour être utilisés sous FreeBSD. Ils ont été validés, compilés, traités avec leurs dépendances pour une installation facilitée. ↩︎