Table des matières



Description générale

Introduction

Le Cahier-03: NethServer, Self Service Password & Active Directory du “Cours NethServer-301” décrit l'ajout d'un greffon au fichier de configuration de Self Service Password afin que ce dernier puisse être utilisé sous Active Directory.

Self Service Password

Pour l'installation de l'application Self Service Password sur un Serveur NethServer, veuillez consulter le Cahier-201-08 Self Service Password du “Cours NethServer-201”.

Annuaire Active Directory

Pour migrer un Serveur NethServer de LDAP vers Active Directory, veuillez consulter le Cahier-301-02 Migration de LDAP vers Active Directory du “Cours NethServer-301”.

But de ce cahier

Configurer Self Service Password pour une utilisation par un Serveur NethServer roulant avec un fournisseur de comptes Active Directory.

Nous allons utiliser la machine virtuelle du Cahier-301-02: , NethServer et migration de LDAP vers Active Directory du “Cours NethServer-301”.

Les procédures sont exactement les mêmes pour un Serveur NethServer physique directement branché ou non à l'Internet.


Cours NethServer-101

Le Cours NethServer-101, se voulant une base solide pour la création d'un site de Commerce en ligne, comprend plusieurs cahiers:

  1. Cahier-01: → Les bases de Linux.
  2. Cahier-02: → Installation et configuration des logiciels prérequis sur le poste de travail.
  3. Cahier-03: → Création d'un Serveur NethServer virtuel.
  4. Cahier-04: → Serveur NethServer LOCAL & Let's Encrypt.
  5. Cahier-05: → FAI, modem VDSL, domaine FQDN1) et Serveur NethServer physique.
  6. Cahier-06: → Installation de WordPress.
  7. Cahier-07: → Installation de l'extension de sécurité Wordfence.
  8. Cahier-08: → WooCommerce, comptes chez Stripe et PayPal pour les paiements en ligne.
  9. Cahier-09: → Sauvegarde/restauration ou migration d'un site avec l'extension Duplicator.
  10. Cahier-10: → Serveur mandataire inversé.
  11. Cahier-11: → Sauvegarde/restauration avec BackupPC.

Cours NethServer-201

Le Cours NethServer-201 décrit l'installation et la configuration d'applications sur un Serveur NethServer.

  1. Cahier-201-01: → Dolibarr.
  2. Cahier-201-02: → Odoo-12.
  3. Cahier-201-03: → MediaWiki.
  4. Cahier-201-04: → DokuWiki.
  5. Cahier-201-05: → Moodle.
  6. Cahier-201-06: → Proxmox.
  7. Cahier-201-07: → Flectra.
  8. Cahier-201-08: → Self Service Password.

Cours NethServer-301

Le Cours NethServer-301 décrit l'annuaire Active Directory roulant sur un Serveur NethServer.

  1. Cahier-301-01: → RSAT (Remote Server Administration Tools).
  2. Cahier-301-02: → NethServer et migration de LDAP vers Active Directory.
  3. Cahier-301-03: → Active Directory & Self Service Password.
  4. Cahier-301-04: → Active Directory & jonction de stations.

Logiciels

Tous les logiciels nécessaires sont du domaine public ou LIBRE sous licence GPL; ils ne coûtent pas un sou. Le seul achat nécessaire est l'obtention d'un nom de domaine au prix initial de $15 CAD et son renouvellement annuel d'environ $30 CAD.

But final du Cours NethServer-101

Après avoir suivi le Cours NethServer-101, vous posséderez un site de Commerce en ligne fiable et hautement sécuritaire. De plus, vous pourrez utiliser un clone de votre site, sur un Serveur NethServer virtuel roulant sur votre poste de travail, pour tester de nouvelles extensions et applications sans compromettre la sécurité ou l'intégrité de votre site en ligne.

Particularités de ce document

Notes au lecteur

* Les captures d'écrans ne sont que des références.
** Les informations écrites ont préséance sur celles retrouvées dans les captures d'écrans. Veillez vous référer aux différents tableaux lorsque ceux-ci sont présents.
*** Une capture d'écran avec une accentuation en magenta indique qu'il faut remplacer cette distinction par vos propres paramètres ou implique un choix laissé à votre appréciation.

Conventions

Manipulation, truc ou ruse pour se tirer d'embarras.
Une recommandation ou astuce.
Une note.
Une étape, note ou procédure à surveiller.
Paragraphe non complété ou non vérifié.
Danger pour la sécurité du système.

Toutes les commandes à la console ou à travers PuTTY sont précédées d'une invite qui est toujours présente.

[root@dorgee ~]# ping 10.10.10.75 -c1

PING 10.10.10.75 (10.10.10.75) 56(84) bytes of data.
64 bytes from 10.10.10.75: icmp_seq=1 ttl=64 time=1.63 ms

--- 10.10.10.75 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.639/1.639/1.639/0.000 ms
[root@dorgee ~]#
Commande à exécuter si ce n'est déjà fait.
Commande indiquée à titre d'information seulement.


À savoir


Serveur NethServer-7.6.1810

Le Serveur NethServer-7.6.1810 est un dérivé de la distribution Linux CentOS et est équivalent à CentOS-7.6.1810.

dorgee.micronator.org

  1. Serveur passerelle pour les connexions à l'Internet.
  2. Serveur DHCP pour tout le réseau LOCAL 192.168.1.0/24.

tchana.micronator-dev.org

Serveur virtuel LOCAL sous VirtualBox Version 6.0.4 r128413 (Qt5.6.2).

Poste de travail

Windows-8.1, on utilisera ce poste de travail comme station d'administration pour tout ce document.

Éditeur de texte

Ne modifiez pas les fichiers avec des éditeurs de documents tels Notepad, TextEdit ou autres qui ajoutent une marque d'ordre d'octets (byte order marks) aux fichiers et qui casse le programme PHP. Utilisez plutôt un éditeur de code tel vi, vim, Notepad++, ou Atom. Ces éditeurs gèrent l'encodage des fichiers de manière appropriée; ils peuvent aussi être utilisés pour réparer les fichiers précédemment cassés par les autres éditeurs de documents.

Notepad++

Voir le Cahier-02 : Installations & configurations des logiciels prérequis du “Cours NethServer-101” pour l'installation et la configuration de cet éditeur.

Description

Référence: https://notepad-plus-plus.org/.

Notepad++ est un éditeur de code source qui prend en charge plusieurs langages. Ce logiciel, codé en C++ avec STL et win32 api, a pour vocation de fournir un éditeur de code source de taille réduite mais très performant. En optimisant de nombreuses fonctions, tout en conservant une facilité d’utilisation et une certaine convivialité, Notepad++ contribue à la limitation des émissions de dioxyde de carbone dans le monde; en effet, en réduisant l’utilisation du CPU, la consommation d’énergie des ordinateurs chute considérablement, en conséquence de quoi, la terre est plus verte.

Site de téléchargement: https://notepad-plus-plus.org/downloads/.

Documentation

Guide pratique (1er août 2013): http://nliautaud.developpez.com/tutoriels/web/notepadplusplus-guide-pratique/.
Aide-mémoire des principales commande: https://drive.google.com/file/d/0B86nuTd5nMTKaENHcmliUC1kdnc/edit.

Préparation de l'environnement de travail

On répète ce chapitre pour ceux qui n'auraient pas accès au Cahier-03: NethServer Virtuel du “Cours NethServer-101”.

Configuration du poste de travail

Vérification

Voir le chapitre À savoir du Cahier-03: NethServer Virtuel.

Centre Réseau et partage → Modifier les paramètres de la carte → clac (clic droit) sur la carte Éthernet → Statut → Détails.

● Nos deux adresses IP et nos deux passerelles son présentes.

Fermer toutes les fenêtre.

C:\Windows\System32\drivers\etc\hosts.

Les CNAME de notre Serveur NethServer virtuel LOCAL sont présents.

Installation d'un Serveur NethServer

Voir le Cahier-03: Création d'un Serveur NethServer virtuel du “Cours NethServer-101”.

Pour un serveur virtuel de test, prendre un minimum de 8 Go dynamiquement alloué pour le disque principal.

Mise à jour du Serveur

Avant de commencer quoi que ce soit, il est toujours préférable de mettre à jour le Serveur NethServer.

Fail2ban & ClamAV

Il est fortement recommandé d'installer Fail2ban et ClamAV pour mieux sécuriser notre futur système. L'installation de ces logiciels est décrite dans le Cahier-03: NethServer Virtuel du “Cours NethServer-101”.

Self Service Password & Active Directory

Introduction

Dans le Cahier-201-08: NethServer & Self Service Password du “Cours NethServer-201”, nous avons installé SSP pour un annuaire LDAP. Nous allons modifier son fichier de configuration: /usr/share/self-service-password/conf/config.inc.local.php afin de l'adapter pour un annuaire Active Directory.

Annuaire Active Directory

Sur le Serveur NethServer contrôleur du domaine AD.MICRONATOR-DEV.ORG, on affiche les paramètres relatifs à Active Directory dont certains seront utilisés pour la configuration de SSP.

[root@tchana ~]# account-provider-test dump

{
   "BindDN" : "ldapservice@AD.MICRONATOR-DEV.ORG",
   "LdapURI" : "ldaps://nsdc-tchana.ad.micronator-dev.org",
   "DiscoverDcType" : "ldapuri",
   "StartTls" : "",
   "port" : 636,
   "host" : "nsdc-tchana.ad.micronator-dev.org",
   "isAD" : "1",
   "isLdap" : "",
   "UserDN" : "dc=ad,dc=micronator-dev,dc=org",
   "GroupDN" : "dc=ad,dc=micronator-dev,dc=org",
   "BindPassword" : "OwSvR7Cg_9XbT28w",
   "BaseDN" : "dc=ad,dc=micronator-dev,dc=org",
   "LdapUriDn" : "ldap:///dc%3Dad%2Cdc%3Dmicronator-dev%2Cdc%3Dorg"
}
[root@tchana ~]#

Les mots de passe dans Active Directory ne sont pas gérés comme dans d'autres annuaires LDAP.

  1. Il faut utiliser l'option $ad_mode pour manipuler unicodePwd comme champ de mot de passe.
# Activation du mode "Active Directory"

$ad_mode = true;
  1. On devrait utiliser SSL pour la connexion LDAP, car AD refuse de modifier un mot de passe sous une connexion en clair.
    Pour nous, il n'est pas nécessaire d'activer l'option $ldap_starttls, car nous utilisons déjà une connexion sécurisée.
# Chiffrage de la communication avec le certificat, défaut=false
# On utilise déjà HTTPS avec le certificat Let's Encrypt
# Ne peut être à "true" si on utilise [$ldap_url = "ldaps://nsdc...";]
$ldap_starttls = false;
  1. On doit définir la base de recherche et spécifier un filtre.
## RECHERCHE
# Pour définir la base de la recherche
$ldap_base = "dc=AD,dc=MICRONATOR-DEV,dc=ORG";
# Filtre de recherche
$ldap_filter = "(&(objectClass=user)(sAMAccountName={login})(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";

On peut utiliser les options suivantes:

  1. Forcer le déverrouillage d'un compte lorsque le mot de passe est changé.
# Si "true", force le déverrouillage d'un compte lorsque le mot de passe est changé.
$ad_options['force_unlock'] = true;
  1. Forcer l'utilisateur à changer de mot de passe à la prochaine connexion.
# Si "true", force l'utilisateur à changer de mot de passe à la prochaine connexion.
$ad_options['force_pwd_change'] = false;

Autoriser l'utilisateur à changer de mot de passe s'il est expiré.

# Si "true", autorise l'utilisateur à changer de mot de passe s'il est expiré.
$ad_options['change_expired_password'] = true;

Configuration de l'emplacement de notre serveur LDAP.

# LDAP URI pour configurer l'emplacement de votre serveur LDAP
# La carte réseau de la station foit avoir dans sa configuration:
# 1) une entrée WINS 10.10.10.76 (selon le Cahier-301-04)
# 2) Activer NetBIOS sur TCP/IP
# OBLIGATOIRE Pour utiliser SSL dans l'URI.
$ldap_url = "ldaps://nsdc-tchana.ad.micronator-dev.org";

Login.

## LOGIN
$ldap_login_attribute = "sAMAccountName";
$ldap_fullname_attribute = "cn";

Attribut de messagerie dans Active Directory.

## MESSAGERIE DANS AD
$mail_attribute = "userPrincipalName";


Gestionnaire des mots de passe

Sur le Serveur NethServer, on doit créer un compte utilisateur Active Directory avec le droit de changer le mot de passe des utilisateurs.

Création du compte

On crée un compte utilisateur de base sans aucun privilèges supplémentaires.



Gestion → Utilisateurs et groupes → onglet Utilisateurs → CRÉER NOUVEAU.


- gestionnaire-mdp.
- Gestionnaire de MDP.

- Choisir un mot de passe très robuste et non pas notre exemple.
- SOUMETTRE.

On s'assure du succès de l'opération.


Jonction d'une station de gestion au domaine

On joint la station utilisée dans le Cahier-301-01: RSAT au domaine du Cahier-301-02: NethServer & Active Directory.

Configuration de la carte réseau

On s'assure de la bonne configuration de la carte réseau de la station à joindre à Active Directory.

- Clac sur l'icône réseau.
- Ouvrir le Centre Réseau et partage.


Modifier les paramètres de la carte.

Double-cliquer sur l'icône de la carte réseau.



Détails…

- On s'assure de la bonne configuration de la carte.
- Fermer.



Fermer toutes les fenêtres.

Jonction au domaine

Clac sur le bouton Démarrer → Système → Paramètres système avancés → onglet Nom de l'ordinateur → Identité sur le réseau…

Cet ordinateur appartient à un réseau d'entreprise… → Suivant.

Ma société utilise un réseau comprenant un domaine → Suivant.


Suivant.

- On entre admin/mot de passe.
- Le nom du domaine est AD.MICRONATOR-DEV.ORG.
- Suivant.

- On choisit un nom pour cette station.
- Le nom du domaine est AD.MICRONATOR-DEV.ORG.
- Suivant.

- On entre admin/mot de passe.
- Le nom du domaine est AD.MICRONATOR-DEV.ORG.
- OK.

- Le nom de l'utilisateur admin est déjà entré.
- Le nom du domaine est AD.MICRONATOR-DEV.ORG.
- Suivant.


On veut que l'utilisateur admin soit administrateur de la station de travail.
- Administrateur.
- Suivant.





Terminer.


OK.


Redémarrer maintenant.

Après le redémarrage, l'utilisateur admin se logue à la station.


Délégation de contrôle

Référence: https://ltb-project.org/documentation/self-service-password/latest/config_ldap?s[]=active&s[]=directory.


Nous déléguons le contrôle de la gestion des mots de passe à l'utilisateur gestionnaire-mdp créé au paragraphe Gestionnaire des mots de passe .

Si l'utilisateur admin n'est pas encore logué à la station de gestion WIN-81, il se logue.

Il s'écoulera un certain temps après s'être logué, car le système va créer l'environnement de travail pour l'utilisateur admin, être patient!

Ajout d'un raccourci

Vu que l'utilisateur admin ne s'est jamais logué sur la station de gestion, il n'a pas de raccourci pour lancer le Gestionnaire de serveur RSAT. On lui ajoute donc un raccourci sur la barre des tâches.

On lance la recherche pour trouver servermanager.

Clac sur Gestionnaire de serveur → Épingler à la barre des tâches.

Délégation de contrôle pour les mots de passe

Sur la barre de tâches, on lance le Gestionnaire de serveur en cliquant sur son icône ou on exécute dsa.msc pour se rendre directement à Utilisateurs et ordinateurs Active Directory.

Outils → Utilisateurs et ordinateurs Active Directory.

Clac sur ad.micronator-dev.org → Délégation de contrôle…


Suivant.


Ajouter.

On entre gestionnaire → Vérifier les noms → OK.

- L'utilisateur est ajouté.
- Suivant.


- Créer une tâche personnalisée à déléguer.
- Suivant.

- Seulement des objets suivant dans le dossier:
- Objets Utilisateurs.
- Suivant.


- Générales.
- Spécifiques aux propriétés.
- Réinitialiser le mot de passe.


Écrire lockoutTimes.

- Écrire shadowLastChange.
- Suivant.


Terminer.

Cette délégation de contrôle est terminée.

Vous avez choisi de déléguer le contrôle des objets
dans le dossier Active Directory suivant :

    ad.micronator-dev.org/

Les groupes, utilisateurs ou ordinateurs auxquels
vous avez délégué le contrôle sont :

    gestionnaire-mdp (gestionnaire-mdp@micronator-dev.org)

Ils ont les autorisations suivantes :

    Réinitialiser le mot de passe
    Lire lockoutTime
    Écrire shadowLastChange

pour les types d’objets suivants :

    Utilisateur

Délégation pour l'attribut commentaire

Nous allons choisir de stocker la Question/Réponse dans l'attribut comment (commentaire) dans Active Directory.

## QUESTION DANS AD
# Attribut et classe d'objets.
# Il faut définir l'attribut dans lequel la réponse sera stockée:
# Le nom de l'attribut doit être en minuscule; requis par l'API php-ldap.
# Dans AD "extensibleObject" n'est pas reconnu, il faut utliser:
$answer_attribute = "comment";
$answer_objectClass = "user";

Après avoir cliqué Terminer à la dernière fenêtre de la précédente délégation de contrôle, nous avons été retourné à la fenêtre principale d'Utilisateurs et ordinateurs Active Directory.

Nous devons créer une nouvelle délégation de contrôle pour accorder des droits sur l'attribut commentaire.

Clac sur ad.micronator-dev.org → Délégation de contrôle…


Suivant.


Ajouter.


On entre gestionnaire → Vérifier les noms → OK.


- L'utilisateur est ajouté.
- Suivant.

- Créer une tâche personnalisée à déléguer.
- Suivant.

- Seulement des objets suivants dans le dossier:
- Objets Utilisateur.
- Suivant.

- Spécifique aux propriétés.
- Lire Commentaire.
- Écrire Commentaire.
- Suivant.




Terminer.

Vous avez choisi de déléguer le contrôle des objets
dans le dossier Active Directory suivant :

    ad.micronator-dev.org/

Les groupes, utilisateurs ou ordinateurs auxquels
vous avez délégué le contrôle sont :

    gestionnaire-mdp (gestionnaire-mdp@micronator-dev.org)

Ils ont les autorisations suivantes :

    Lire Commentaire
    Écrire Commentaire

pour les types d’objets suivants :

    Utilisateur

L'utilisateur admin peut se déconnecter de la station de gestion.

Nous avons maintenant les paramètres pour la connexion de SSP à Active Directory.

# Qui peut changer les mots de passe
$who_change_password = "gestionnaire-mdp";

# DN et mot de passe de l'utilisateur gestionnaire-mdp.
# Le DN du compte créé dans AD et qui a le droit de changer les mots de passe.
$ldap_binddn = "gestionnaire@MICRONATOR-DEV.ORG";
$ldap_bindpw = "fghtbgh";


Fichier complet de la configuration de SSP

Attention si vous prenez ce fichier depuis le PDF de ce document. Lors de la copie, les en-têtes et les pieds de page sont aussi inclus. Il faut coller la copie dans NotePad++ et enlever les en-têtes et pieds de page.

Mise en commentaire de la section LDAP

Nous devons mettre en commentaire la section LDAP.
Pour mettre une section en commentaire, nous ajoutons /* au début de la section et */ à sa fin.

...
/*
##### LDAP EN TANT QUE FOURNISSEUR DES COMPTES - DÉBUT
...
##### LDAP EN TANT QUE FOURNISSEUR DES COMPTES - FIN
*/
...

Nouveau fichier /usr/share/self-service-password/conf/config.inc.local.php modifié pour Active Directory.
Modifiez pour votre nom de domaine et vos clés reCaptcha.

<?php

##### FICHIER DE CONFIGURATION: config.inc.local.php

## 2019-11-17, Michel-André.
## 2019-11-18_12h49 - Pour LDAP, $ldap_url, $ldap_binddn et $ldap_bindpw
##                    proviennent du fichier /etc/libuser.conf.
## 2019-11-29_18h28 - Mise en commentaire de la section LDAP.
##                  - Ajout de la section AD.
## 2019-11-29_22h20 - Corrections de typos.
## 2019-11-30_13h23 - Final pour la doc du Cahier-301-03.

##### CONFIGURATION GÉNÉRALE
$lang = "fr";
$show_menu = true;

## Notification d'un changement de mot de passe
# Utilisez cette option pour envoyer un courrier de confirmation à 
# l'utilisateur, juste après une changement de mot de passe par jeton réussi.
# défaut -> false
$notify_on_change = true; 

## Action par défaut
# Par défaut, la page de modification du mot de passe est affichée. Vous pouvez
# configurer quelle page doit être affichée lorsqu'aucune action n'est définie.
# Valeurs possibles:
# change <- défaut
# sendtoken <- tout faire par jeton courriel
# sendsms >- utiliser le courrier SMS
$default_action = "change";

## Utilisation de sms
# Pour activer cette fonctionnalité, il faut que l'usager ait déjà spécifié son numéro de
# mobile dans ses préférences. Disponible avec le module NethServer "WebTop 5 groupware".
# défaut -> false
$use_sms = false;

##### QUESTION DÉBUT
# Vous pouvez activer ou désactiver la fonctionnalité de changement de mot de passe par
# question.
# défaut -> false
$use_questions = true;

# Les mots-clé doivent être en minuscule et sans accents.
$messages['questions']['voiture'] = "Quelle fut votre première voiture?";
$messages['questions']['ecole'] = "L'école primaire de votre 1ère année?";
$messages['questions']['ami'] = "Quel était le mom de votre meilleur ami d'enfance?";
$messages['questions']['datenaissance'] = "Quelle est votre date de naissance: AAAA-MM-JJ?";
$messages['questions']['saison'] = "Quelle est votre saison préférée?";

# Vous devez configurer $keyphrase (Phrase de passe) pour que le chiffrement de la réponse
# fonctionne. À votre choix, mais ne doit pas être modifiée par la suite.
$keyphrase = "ABCdefGHIjkl";

# Chiffrage de la réponse à la question dans l'annuaire.
# défaut -> true
# Pour la compatibilité avec Active Directory -> false 
$crypt_answers = false;
##### QUESTION FIN


##### STRATÉGIE DE MOT DE PASSE LOCAL - DÉBUT    
# Celle-ci est appliquée avant la politique de mot de passe de l'annuaire.
#
# Défaut à -1, le mot de passe n'expire jamais
# $shadow_options['shadow_expire_days'] = -1;
# Longueur minimale.
$pwd_min_length = 7;
# Longueur maximale.
# Définir à 0 pour désactiver le contrôle de la longueur maximale.
$pwd_max_length = 16;
# Nombre minimum de caractères en minuscule.
$pwd_min_lower = 3;
# Nombre maximal de caractères en majuscule.
$pwd_min_upper = 1;
# Nombre minimum de caractères numériques.
$pwd_min_digit = 1;
# Nombre minimum de caractères non-alphanumériques.
$pwd_min_special = 1;
# L'expression employée ci-dessous signifie que les caractères spéciaux sont tous les
# caractères sauf les caractères alphabétiques et numériques.
$pwd_special_chars = "^a-zA-Z0-9";
# Caractères défendus.
# Vous pouvez empêcher certains caractères d'être utilisés dans le mot de passe.
$pwd_forbidden_chars = "@";
# Ne pas réutiliser le même mot de passe qu'actuellement.
# true <- Défaut ** On ne peut pas utiliser le même mot de passe.
# false          ** On peut utiliser le même mot de passe.
$pwd_no_reuse = true;
# Vérifier que le mot de passe est différent de celui du login.
$pwd_diff_login = true;
# Vous pouvez définir le nombre de classes de caractères différentes
# (minuscule, majuscule, chiffre, non-alphanumérique) dans le mot de passe.
$pwd_complexity = 2;
# Permet de vérifier si le mot de passe a déjà été compromis, en utilisant la
# base de données https://haveibeenpwned.com/.
# Défaut -> false.
$use_pwnedpasswords = false;
# Afficher le message des contraintes de la stratégie de mot de passe:
# always <- défaut.
# never
# onerror
$pwd_show_policy = "always";
# Endroit pour affichager le message de la stratégie de mot de passe:
# above - (en haut) <- défaut
# below - (en bas)
$pwd_show_policy_pos = "above";
##### STRATÉGIE DE MOT DE PASSE LOCAL - FIN


##### LOGO
$logo = "images/logo_Micronator_250x65_TB.png";


##### JOURNAL
# Par défaut, les URL générées sont consignées dans le journal des erreurs Apache.
# Ce comportement peut être modifié pour les insérer dans un fichier spécifique.
# L'utilisateur Apache doit avoir le droit d'écriture sur ce fichier.
$reset_request_log = "/var/log/self-service-password";

/*
##### LDAP EN TANT QUE FOURNISSEUR DES COMPTES - DÉBUT
# Adresse du serveur
# Ce paramètre se trouve dans le fichier:  /etc/libuser.conf
# Pour utiliser SSL, définiR ldaps dans l'URL.
$ldap_url = "ldaps://127.0.0.1";

## Justificatif - nom et mot de passe
# Ces paramètres se trouvent dans le fichier:  /etc/libuser.conf
$ldap_binddn = " cn=libuser,dc=directory,dc=nh";
$ldap_bindpw = "kN_7IjCs24FxCrGn";

# Celui qui change les mots de passe.
$who_change_password = "manager";

# Recherche
# Pour définir la base de la recherche et le filtre de recherche.
# Ces paramètres se trouvent dans le fichier:  /etc/libuser.conf
$ldap_base = "dc=directory,dc=nh";
# Filtre pour la recherche
$ldap_filter = "(&(objectClass=person)(uid={login})(!(uid=admin)))";

# Définit l'attribut LDAP où est stockée l'adresse courriel de l'utilisateur.
$mail_attribute = "mail";

# Attribut de la réponse
# Définit l'attribut dans lequel la réponse à la question sera stockée. Le nom
# de l'attribut doit être en minuscule, ceci est requis par l'API php-ldap.
$answer_objectClass = "extensibleObject";
$answer_attribute = "info";
##### LDAP EN TANT QUE FOURNISSEUR DES COMPTES - FIN
*/

##### CONNECTION ACTIVE DIRECTORY - DÉBUT #####
# https://ltb-project.org/documentation/self-service-password/latest/config_ldap?s[]=active&s[]=directory
# You need to have an account on Active Directory with rights to change 
# password of users. To set the minimum rights for this account, do the following:
# 1)Create a basic domain account without any additional privileges
# 2)Use Delegate control wizard within “User and computers”, then
#   a) User Object
#   b) Reset Password
#   c) Write lockoutTime (if unlock is enabled)
#   d) Write shadowlastchange
# 3)If you enabled the reset by questions feature, you also need to give rights
#   on the question attribute:
#   a) Right click the OU where you want delegation of permissions to
#      propagate down from and select “Delegate Control…”
#   b) Add the account to delegate to, click Next
#   c) Create a custom task to delegate
#   d) Select the radio button for “Only the following objects in the folder”, 
#      then select “User objects” at the bottom of the list, click Next
#   e) Select the “Property-specific” checkbox only, then locate the attribute
#      you are using to store the “Reset by questions” answer in.

# Activation du mode "Active Directory"
$ad_mode = true;

# Chiffrage de la communication avec le certificat, défaut=false
# On utilise déjà HTTPS avec le certificat Let's Encrypt
# Ne peut être à "true" si on utilise [$ldap_url = "ldaps://nsdc...";]
$ldap_starttls = false;

## RECHERCHE
# Pour définir la base de la recherche
$ldap_base = "dc=AD,dc=MICRONATOR-DEV,dc=ORG";   
# Filtre de recherche
$ldap_filter = "(&(objectClass=user)(sAMAccountName={login})(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";

# Si "true", force le déverrouillage d'un compte lorsque le mot de passe est changé.
$ad_options['force_unlock'] = true;

# Si "true", force l'utilisateur à changer de mot de passe à la prochaine connexion.
# $ad_options['force_pwd_change'] = true;

# Si "true", autorise l'utilisateur à changer de mot de passe s'il est expiré.
$ad_options['change_expired_password'] = true;

# LDAP URI pour configurer l'emplacement de votre serveur LDAP
# La carte réseau de la station foit avoir dans sa configuration:
# 1) une entrée WINS 10.10.10.76
# 2) Activer NetBIOS sur TCP/IP
# OBLIGATOIRE Pour utiliser SSL dans l'URI.
$ldap_url = "ldaps://nsdc-tchana.ad.micronator-dev.org";

## LOGIN
$ldap_login_attribute = "sAMAccountName";
$ldap_fullname_attribute = "cn";

## QUESTION DANS AD
# Attribut et classe d'objets.
# Il faut définir l'attribut dans lequel la réponse sera stockée:
# Le nom de l'attribut doit être en minuscule; requis par l'API php-ldap.
# Dans AD "extensibleObject" n'est pas reconnu, il faut utliser:
$answer_attribute = "comment";
$answer_objectClass = "user";

## MAIL DANS AD
$mail_attribute = "userPrincipalName";

# Qui peut changer les mots de passe
$who_change_password = "gestionnaire-mdp";

# DN et mot de passe de l'utilisateur gestionnaire-mdp.
# Le DN du compte créé dans AD et qui a le droit de changer les mots de passe.
$ldap_binddn = "gestionnaire-mdp@MICRONATOR-DEV.ORG";
$ldap_bindpw = "fghtbgh";
##### CONNECTION ACTIVE DIRECTORY - FIN #####


##### COURRIELS - DÉBUT
# 1) Tout d'abord, l'utilisateur entrera son identifiant et son adresse
#    adresse courriel. Un courriel lui est alors envoyé.
# 2) Ensuite, l'utilisateur clique sur le lien dans le courriel reçu et peut alors
#    définir un nouveau mot de passe.
# Les sessions PHP sont utilisées pour stocker et récupérer les jetons côté serveur.
# On peut activer/désactiver cette fonction avec le paramètre "$use_tokens" ci-dessous.
# Défaut "false" désactive, et l'icône n'apparaît plus en haut de l'écran.
$use_tokens = true;              

# Adresse courriel
# Vous pouvez également éviter de demander l'adresse courriel de l’utilisateur, seul son
# identifinat lui sera demandé. L'adresse courriel est récupérée depuis LDAP.
# Le défaut "false" demande l'adresse courriel et l'utilisateur doit entrer son adresse
# courriel. La valeur "true" ne la demande pas.
$mail_address_use_ldap = true;

# Chiffrement des jetons
# Vous pouvez chiffrer les jetons pour protéger l'identifiant de session.
# true <- défaut
$crypt_tokens = true;

# Durée de vie des jetons (en secondes)
# Vous devez définir une durée de vie pour les jetons, afin qu'ils soient supprimés s'ils ne
# sont pas utilisés.
# Défaut "3600".
$token_lifetime = "3600";

# De qui le courriel doit-il provenir?
$mail_from = "admin@micronator-dev.org";
$mail_from_name = "Service des mots de passe";
$mail_signature = "";

# Configuration de PHPMailer (voir https://github.com/PHPMailer/PHPMailer)
$mail_sendmailpath = '/usr/sbin/sendmail';
$mail_protocol = 'sendmail';
$mail_smtp_debug = 0;
$mail_debug_format = 'html'; #défaut=error_log
$mail_contenttype = 'text/plain';
$mail_wordwrap = 0;
$mail_charset = 'utf-8';
$mail_priority = 3;
$mail_newline = PHP_EOL;
##### COURRIELS - FIN


##### reCAPTCHA v2 de Google - DÉBUT
## CAPTCHA
# 2019-11-18_16h00 / VotreNomDeCourriel@gmail.com // Indice sur votre mot de passe GooGle
# défaut=false pour ne pas utiliser reCAPTCHA
$use_recaptcha = true;

$recaptcha_publickey = "votre clé publique reCAPTCHA v2 de Google";
$recaptcha_privatekey = "votre clé privée reCAPTCHA v2 de Google";

# Personnalisation (voir https://developers.google.com/recaptcha/docs/display)
$recaptcha_theme = "light";
$recaptcha_type = "image";
$recaptcha_size = "normal";

# Méthode de requête reCAPTCHA
# 'null' <- défaut, mais non-fonctionnel.
# '\ReCaptcha\RequestMethod\CurlPost' <- fonctionnel.
$recaptcha_request_method = '\ReCaptcha\RequestMethod\CurlPost'; 
##### reCAPTCHA v2 de Google - FIN

##### FIN DU FICHIER DE CONFIGUTATION SSP: config.inc.local.php


Sauvegarde du répertoire de SSP

On vérifie si le nom du répertoire /usr/share/self-service-password/ est déjà inclus dans le fichier d'inclusion de la sauvegarde des données /etc/backup-data.d/custom.include, sinon on l'insère.

Prendre tout le contenu de l'encadré pour la commande.

NouvelleInclusion="/usr/share/self-service-password/"
if grep -Fxq "$NouvelleInclusion" /etc/backup-data.d/custom.include
then
    # L'entrée a été trouvée dans custom.include
    echo -e "\nLe fichier custom.include contient déjà l'entrée:\n$NouvelleInclusion \n"
else
    # L'entrée n'a pas été trouvée dans custom.include
    echo -e "$NouvelleInclusion" >> /etc/backup-data.d/custom.include
    echo -e "\nL'entrée: $NouvelleInclusion a été ajoutée\n"
fi

On vérifie.

[root@tchana ~]# cat /etc/backup-data.d/custom.include | grep /usr/share/self-service-password/

/usr/share/self-service-password/
[root@tchana ~]#

Ci-dessus, il n'y a pas de ligne vide avant /usr/share/self-service-password/. Nous en avons insérée une afin de faciliter la copie de la commande.

<html>

<b>Voilà, vous pouvez maintenant utiliser <i>Self Service Password</i> avec <i>Active Directory</i>.</b>

</html>

On se rend à notre page SSP: https://www.micronator-dev.org/ssp
et notre page d'acceuil de Self Service Password s'affiche.


Instantané VirtualBox

À ce stade-ci, on peut prendre un instantané de la machine virtuelle afin de pouvoir y revenir en cas d'une future erreur de manipulation.

Exemples d'utilisation

Référence

Ce chapitre provient de celui du Cahier-201-08: NethServer & Self Service Password du “Cours NethServer-201”. Nous le reproduisons ici au cas où l'étudiant n'aurait pas accès au Cahier-201-08.

Vérification de reCaptcha

On se rend à notre page SSP: https://www.micronator-dev.org/ssp.


On clique Je ne suis pas un robot.

- On sélectionne les images.
- VALIDER.


Notre sélection d'images est validée.


Préparation pour les autres exemples

reCaptcha

Vu que nous venons de vérifier le fonctionnement de reCaptcha, on peut désactiver cette fonction.

[root@tchana ~]# sed -i 's/\$use_recaptcha \= true\;/\$use_recaptcha \= false\;/'  /usr/share/self-service-password/conf/config.inc.local.php

[root@tchana ~]#

On vérifie.

[root@tchana ~]# cat /usr/share/self-service-password/conf/config.inc.local.php | grep "use_recaptcha ="

$use_recaptcha = false;
[root@tchana ~]#

Stratégie de mot de passe

On vérifie l'affichage de la stratégie de mot de passe.

[root@tchana ~]# cat /usr/share/self-service-password/conf/config.inc.local.php | grep "pwd_show_policy"

$pwd_show_policy = "always";
$pwd_show_policy_pos = "above";
[root@tchana ~]#

Nous changeons la stratégie pour l'affichage en cas d'erreur seulement (onerror).

[root@tchana ~]# sed -i 's/show_policy = "always"/show_policy = "onerror"/' /usr/share/self-service-password/conf/config.inc.local.php

[root@tchana ~]#

On vérifie.

[root@tchana ~]# cat /usr/share/self-service-password/conf/config.inc.local.php | grep "show_policy ="

$pwd_show_policy = "onerror";
[root@tchana ~]#


Changement standard du mot de passe

L'utilisateur toto change son mot de passe.

L'opération a réussie.

L'utilisateur toto se connecte à Webmail.

Il a reçu un courriel indiquant que son mot de passe a été changé.


Enregistrement d'une réponse à une question

Question → enregistré une question.

L'utilisateur toto choisit une question et y répond.

La conformité de la réponse à la question n'est pas vérifiée. On peut entrer une réponse bidon très longue, mais lorsqu'on changera son mot de passe par question, il faudra utiliser la même question et donner exactement la même réponse bidon.

Changement par question

L'utilisateur toto répond à sa question et change son mot de passe.


L'opération a réussi.

Changement par jeton

Mail → l'utilisateur toto entre son identifiant → Envoyer.

Un courriel a été envoyé.

Si ce n'est déjà fait, l'utilisateur toto se connecte à Webmail.


L'utilisateur toto clique le lien reçu.

L'utilisateur toto entre son nouveau mot de passe et le confirme → Envoyer.


L'opération a réussi.


Erreur dûe à la stratégie de mot de passe

Au paragraphe Stratégie de mot de passe , nous avons choisi d'afficher la stratégie de mot de passe seulement lors d'un manque de conformité à la stratégie.


L'utilisateur toto entre un mot de passe sans caractères spéciaux.

- L'erreur est signalée.
- La stratégie de mot de passe est affichée.

reCaptcha

On réactive reCaptcha.

[root@tchana ~]# sed -i 's/\$use_recaptcha \= false\;/\$use_recaptcha \= true\;/' /usr/share/self-service-password/conf/config.inc.local.php

[root@tchana ~]#

On vérifie.

[root@tchana ~]# cat /usr/share/self-service-password/conf/config.inc.local.php | grep "use_recaptcha ="

$use_recaptcha = true;
[root@tchana ~]#

Stratégie de mot de passe

On remet l'affichage de la stratégie de mot de passe à always.

[root@tchana ~]# sed -i 's/show_policy = "onerror"/show_policy = "always"/' /usr/share/self-service-password/conf/config.inc.local.php

[root@tchana ~]#

On vérifie.

[root@tchana ~]# cat /usr/share/self-service-password/conf/config.inc.local.php | grep "show_policy ="

$pwd_show_policy = "always";
[root@tchana ~]#

<html>

<b>Notre installation de <i>Self Service Password</i> fonctionne correctement dans son entier.</b>

</html>

Introduction à l'éditeur vi

Référence: http://www.iro.umontreal.ca/~dift3830/vi.html. (Dernière consultation, le 30 mai 2016. Novembre 2018, ce lien n'est plus fonctionnel.)

vi est un éditeur de texte très puissant. Sa convivialité par contre lui fait défaut. Ceci dit, il est toujours utile d'en connaître les rudiments, car son omniprésence est presque garantie sur les systèmes modernes.

La documentation de vi étant très abondante, on se limitera pour cette démo aux commandes les plus usuelles.

Tout d'abord l'invocation. On peut invoquer vi à partir du shell de plusieurs façons dont en voici quelques-unes:

- vi: → ouvre vi avec un contenu vide. - vi nom_de_fichier: → ouvre un fichier et l'affiche à l'écran. - vi +nom_de_fichier: → ouvre un fichier et positionne le curseur à la fin de celui-ci.

Dès son invocation, vi se met en mode commande, dans ce mode il est possible d'entrer les commandes qui seront vues plus bas. Si on tape une commande susceptible de modifier un texte (insertion d'un caractère par exemple), vi bascule en mode édition; dans ce mode tout caractère tapé sera considéré comme faisant partie du texte, tandis que les caractères saisis en mode commande, seront eux interprétés comme étant des commandes et ne seront jamais rajoutés au texte.

Afin de basculer du mode édition au mode commande il suffit de presser la touche [Échap].

Nous allons commencer par invoquer vi à partir du shell en tapant:

vi

Ce qui devrait donner l'affichage ci-contre:

vi est déjà en mode commande, pour le faire passer en mode édition, on tape la commande i (insert) qui nous permet d'insérer du texte.

i

Après avoir tapé le texte suivant:

vi est un éditeur de texte très
 
utile pour la communauté des 
administrateurs.

On obtient l'affichage ci-contre.

Après cela, on pourrait passer en mode commande par simple pression sur la touche [Échap].

Une fois en mode commande, on voudrait par exemple, éliminer la ligne blanche qui se trouve juste après la première. Pour ce faire, on positionne le curseur a la hauteur de la 2e ligne et on tape dd.

Ceci aura pour effet de supprimer la ligne.

Si on est satisfait, il ne nous reste plus qu'à sauvegarder le document sous le nom texte1.txt à l'aide de la commande suivante:

:w texte1.txt

(Pour les sauvegardes ultérieures, il n'est pas nécessaire d'ajouter le nom du fichier).

Afin de quitter vi il suffit de taper la commande:

:q texte1.txt

Les commandes abondent dans vi, on n'en citera que quelques-unes.


Principales commandes de vi

CommandeEffets
i (insert)Insère un texte sur le curseur
IInsère au début de la ligne
a (append)Insère après le curseur
AInsère à la fin de la ligne
Les flèchespour les déplacements
Ctrl-F (forward)Défiler d'un écran vers le bas
Ctrl-B (backward)Défiler d'un écran vers le haut
nG (goto)va à la nième ligne dans le texte
GVa à la fin du texte
xEffacer le caractère courant
ddEffacer la ligne courante
DEffacer depuis la position du curseur jusqu'à la fin de la ligne
db (DeleteBegining)Effacer depuis la position courante jusqu'au début de la ligne
/chaînerechercher la chaîne 'chaîne' dans le texte, on peut taper 'n' pour voir les autres occurrences
:w fichiercopie le texte courant sur le disque sous le nom fichier
:wq (write & quit)écrit le fichier sur le disque et quitte vi.
:q!Quitter sans sauvegarder.
:set nuAffiche le numérotage des lignes.



Victoire totale, hissons la bannière de la victoire.


Crédits

© 2019 RF-232
Auteur: Michel-André.
Remerciement: Tous les contributeurs GNU/GPL.
Intégré par: Michel-André Robillard CLP
Contact: michelandre at micronator.org

Répertoire de ce document: E:\000_DocPourRF232_general\RF-232_NethServer-301\RF-232_Cours_NethServer-301-03_AD-SelfServicePassword_2019-12-25_11h52.odt.

Historique des modifications:

VersionDateCommentaireAuteur
0.0.12019-10-02Début.M.-A. Robillard

<html><hr style=“width:50%; margin: 0 auto;”></html>

AVIS DE NON-RESPONSABILITÉ

Ce document est uniquement destiné à informer. Les informations, ainsi que les contenus et fonctionnalités de ce do­cument sont fournis sans engagement et peuvent être modifiés à tout moment. RF‑232 n'offre aucune garantie quant à l'actualité, la conformité, l'exhaustivité, la qualité et la durabilité des informations, contenus et fonctionnalités de ce document. L'accès et l'utilisation de ce document se font sous la seule responsabilité du lecteur ou de l'utilisateur.

RF‑232 ne peut être tenu pour responsable de dommages de quelque nature que ce soit, y compris des dommages di­rects ou indirects, ainsi que des dommages consécutifs résultant de l'accès ou de l'utilisation de ce document ou de son contenu.

Chaque internaute doit prendre toutes les mesures appropriées (mettre à jour régulièrement son logiciel antivirus, ne pas ouvrir des documents suspects de source douteuse ou non connue) de façon à protéger le contenu de son ordina­teur de la contamination d'éventuels virus circulant sur la Toile.

Toute reproduction interdite Vous reconnaissez et acceptez que tout le contenu de ce document, incluant mais sans s’y limiter, le texte et les images, sont protégés par le droit d’auteur, les marques de commerce, les marques de service, les brevets, les secrets industriels et les autres droits de propriété intellectuelle. Sauf autorisation expresse de RF-232, vous acceptez de ne pas vendre, délivrer une licence, louer, modifier, distribuer, copier, reproduire, transmettre, afficher publiquement, exécuter en public, publier, adapter, éditer ou créer d’oeuvres dérivées de ce document et de son contenu.

Avertissement

Bien que nous utilisions ici un vocabulaire issu des techniques informatiques, nous ne prétendons nullement à la précision technique de tous nos propos dans ce domaine.

1)
FQDN: Dans le DNS, un Fully Qualified Domain Name (FQDN, ou nom de domaine complètement qualifié) est un nom de domaine qui révèle la position absolue d'un nœud dans l'arborescence DNS en indiquant tous les domaines de niveau supérieur jusqu'à la racine. On parle également de domaine absolu, par opposition aux domaines relatifs. Par convention, le FQDN est ponctué par un point final.
Référence: https://fr.wikipedia.org/wiki/Fully_qualified_domain_name.