[Plugin] kzOtPHP pour double authentification (2FA, TOTP, QR-Code)

bazooka07bazooka07 PluXml Lead Developer, Moderator
mars 2018 modifié dans Plugins
Bonjour,

Ce plugin permet de sécuriser davantage l'accès au back office de votre site (le côté admin) avec la double auhentification.

En plus de l'habituel couple "compte utilisateur / mot de passe", il vous sera demandé un code PIN ( courte série de chiffres ) généré sur votre smartphone avec une application d'authentification.

On considère aujourd'hui que le couple ci-dessus est insuffisant pour garantir un accès sécurisé à un compte.
Pour améliorer cela, une tentative a été faite avec les images de mots mais cela n'est plus fiable maintenant.
On a donc remplacé cela par un code PIN qui change toutes les 30 secondes et est calculé à partir d'une clé secrète partagée entre votre site et votre smartphone.

Si vous ne connaissez pas la double authentification, je vous encourage à lire l'article suivant :
Numérama : Comment sécuriser facilement ses comptes avec la double authentification

Pour utiliser ce plugin, lire l'aide en ligne depuis les listes de plugins.

Télécharger la dernière version du plugin

2018-03-14 : version 0.9.0 - QR-code embarqué dans la page de profil au format data-uri si généré en interne (voir billet #28)
2018-03-13 : version 0.8.1 - Fix dans .htaccess pour free.fr
2018-03-12 : version 0.8 - 1ère version publiée.
«1

Réponses

  • a166a166 Member
    Merci pour ce plugin !
    J'ai un soucis pour générer le qrcode localement (il ne s'affiche pas), solution que je préfère à celle qui consiste à passer par google.
    Quelle dépendance dois-je installer pour cela ?
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Bonjour,

    Je l'ai testé en local sur mon PC avec Ubuntu 17.10 - PHP 7.1 et Apache
    J'ai fait également le test sur un petit Odroid C1 avec Ubuntu 16.04 LTS - 7.0
    Test aussi chez OVH avec un hébergememt Kimsufi et PHP 7.0
    Jusqu'à là aucun souci.

    J'ai voulu fait un essai chez Free.fr avec PHP5.6 et là ça coince. Le QR-code ne s'affiche. On a droit au texte alternatif "QR-code". Et le serveur m'envoie une erreur 500.
    Dommage le reste a l'air de fonctionner sans souci. Donc, je suis obligé de passer par Google pour générer le QR-code.

    Il faut que je pousse mes investigations un peu plus loin.

    De toute façon je conseille d'avoir un PHP 7.0 minimum.

    Dis-moi sous quel environnement tu travailles ?
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Problème résolu pour Free.fr
    La directive FilesMatch n'est pas acceptée dans le fichier .htaccess
  • niqnutnniqnutn Member
    mars 2018 modifié
    à l'enregistrement de la configuration, j'ai eu une erreur parce que le dossier "plugins" n'existait pas
    PluXml/data/configuration/plugins

    quand je mets oui pour Activer la double authentification ça ne semble pas être enregistré.

    j'ai pas de QR code et quand je me connecte à la page d'authentification, forcément on me demande un PIN que je ne peux pas avoir.

    pour FreeOTP, je rajouterai également ce lien : https://f-droid.org/packages/org.fedorahosted.freeotp/
  • trentaneltrentanel Member
    mars 2018 modifié
    Bonjour,
    Si j'ai bien compris le code QR devrait s'afficher sur la page d'édition du profil, après avoir mis à "oui" la zone "activer la double authentification".
    A la place, j'ai ceci, mais pas de code :
    sha256 - 6 digits
    QR-Code
    Scannez le QR-code

    EDIT : je suis repassé à "non" et j'ai bien enregistré, mais après déconnexion, le code pin est réclamé :P
    Une restauration de user.xml et plugins.xml et je suis de retour à l'état antérieur.

    C'est un hébergement perso Free.fr
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @niqnutn,
    Avec PluXml 5.6, le dossier data/configuration/plugins est créé à l'installation.
    N.B. le dossier peut être renommé, le plugin récupère le paramètrage enregistré par PluXml

    Après avoir activé la double authentification dans la page de profil, il faut cliquer sur le bouton modifier le profil. Au retour un QR-code s'affiche. Si le QR-code n'a pas pu être généré en interne ou par Google, le texte alternatif "QR-Code" doit s'afficher. Le QR-Code est une image au format png.
    L'emploi du générateur interne de QR-code exige au minimum PHP version 5.4. Sinon Google peut vous aider :P
    La plus vieille version de PHP maintenue est la 5.6.34. Je ne ressens aucune vocation pour les antiquités :mad:
    Si l'écran n'est pas assez large (smartphone), le QR-Code s'affiche à la fin de la page.

    Sur la page d'authentification, le champ "code pin" s'affiche dès que le plugin est activé. Si la double authentification n'est pas activé pour le profil, la valeur du champ n'est pas prise en compte. Dans le cas de plusieurs utilisateurs, chacun peut activer la double authentification à sa convenance. Mais cela peut être plus restrictif dans les futures versions du plugin. A étudier.

    J'ai refait une installation neuve de PluXml 5.6 en installant kzOtPHP comme premier plugin. Aucun souci ( Version de PHP : 7.1.11-0ubuntu0.17.10.1 Apache/2.4.27 (Ubuntu) )
    Ce matin j'ai fait une install avec une image Docker basée sur Debian/Jessie (version PHP 5.6). Marche aussi bien.

    @trentanel,
    Cela veut dire que l'image PNG du QR-code ne s'est pas générée correctement en interne Tu dois avoir une erreur 404 ou 500 dans l'onglet réseau de l'inspecteur Web.
    Il faut au minimum PHP version 5.4 - version 5.6 conseillée. Désactive le générateur interne de QR-code dans le panneau de config et Google générera le QR-Code. Mais bon...

    Le plugin ne modifie pas le fichier users.xml. il n'utilise que son propre fichier de config kzOtPHP.xml. Si on désactive le plugin, les clés secrètes sont conservées tant qu'on efface pas le fichier de config.
    En restaurant le fichier plugins.xml tu désactives le plugin. Tu peux aussi supprimer la ligne concernant le plugin dans ce fichier.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @niqnutn,

    Oups, j'ai zappé F-Droid. Il semble qu'il y a plus de choix de FreeOTP, abandonné par Redhat.
    Rechercher TOTP sur f-droid.
  • pour le dossier, je sais pas ce qui c'est passé mais j'ai vu le message (c'est pas impossible que j'ai supprimé le dossier).
    bazooka07 a écrit:
    Après avoir activé la double authentification dans la page de profil, il faut cliquer sur le bouton modifier le profil. Au retour un QR-code s'affiche.
    ça enregistre et ça me mets "Enregistrement des données effectué avec succès" mais "Activer la double authentification" reste à non :/

    dés que j'active le plugin, la 2FA est activé sans que je passe par le profil.

    honnêtement, je vois pas ce que je peux faire de travers.
    c'est sur une nouvelle install de PluXml et j'ai re-testé mais sans changement.

    Version de PHP : 5.6.33
    PluXml version 5.6 (encodage UTF-8)
    kzOtPHP - Version 0.8.1 (13/03/2018)
    sur un mutu OVH
  • a166a166 Member
    Je suis hébergé sur OVH, avec php 7/nginx, mais le QR code ne s'affiche pas en interne.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    mars 2018 modifié
    J'ai un hébergement Kimsufi chez OVH.

    Déjà, OVH préconise d'utiliser PHP 7.0.

    [list=*]
    [*]Je crée un dossier pour faire un test[/*]
    [*]J'upload kzInstall.php[/*]
    [*]j'ouvre la page kzInstall.php dans mon navigateur préféré[/*]
    [*]J'attends que la page finisse de s'afficher[/*]
    [*]rechargement de la page pour installer PluXml[/*]
    [*]connexion au site[/*]
    [*]activation du plugin kzUploader[/*]
    [*]upload du plugin kzOtPHP avec kzUploader[/*]
    [*]activation du plugin kzOtPHP[/*]
    [*]sélection du générateur interne de QRcode dans le panneau de config[/*]
    [*]enregistrement de la config[/*]
    [*]activation de la double authentification dans le panneau de profil + enregistrer la modif[/*]
    [*]scan du qrcode avec mon smartphone.[/*]
    [*]déconnexion [/*]
    [*]lecture du code pin sur le smartphone et saisie sur le nouveau site[/*]
    [*]Et c'est prêt[/*]
    [/list]

    En 2mn, l'affaire est pliée.
    C'est difficile de faire plus simple.

    J'attends encore quelques retours pour intégrer ce plugin dans kzInstall.php. J'ai juste une ligne à rajouter.
  • Je confirme que sur un perso Free.fr le code ne s'affiche pas. J'ai contourné comme tu as décrit plus haut.
    Pour le reste ça fonctionne bien.
    Merci pour ce plus.
  • pour php et ovh: https://docs.ovh.com/fr/hosting/configurer-le-php-sur-son-hebergement-web-mutu-2014/
    de toute façon, tu indiques qu'il faut au mini la 5.4 donc c'est pas le problème.

    sinon, pour l'install j'ai fait exactement la même chose que toi jusqu'à la configuration du plugin.
    si jamais tu veux constater par toi même, je te déposes kzInstall.php chez moi et tu pourras tester.
  • a166a166 Member
    J'avais téléchargé l'archive du zip et l'avais décompressée dans le dossier plugins, avant de l'activer, mais je ne savais pas qu'il y avait un fichier "kzInstall.php".

    Du coup, quand je passe par l'upload de ce fichier, j'ai cette erreur :
    The following libraries are required :
    - ZipArchive

    Et quand je cherche le paquet correspondant, j'ai seulement ça :
    android-libziparchive/stable 1:7.0.0+r33-1 amd64
    bibliothèque pour les archives ZIP
    android-libziparchive-dev/stable 1:7.0.0+r33-1 amd64
    bibliothèque pour les archives ZIP – fichiers de développement
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    mars 2018 modifié
    @a166,

    Non, cela n'a rien à voir.
    ZipArchive est le nom d'une class PHP.

    Sous Ubuntu 17.10, il faut faire :
    [== bash ==]
    $ apt search php zip
    En train de trier... Fait
    Recherche en texte intégral... Fait
    libjs-edit-area/artful,artful 0.8.2-1 all
      Un éditeur libre pour le code source javascript
    
    php-bz2/artful,artful 1:7.1+54ubuntu1 all
      bzip2 module for PHP [default]
    
    php-http-request2/artful,artful 2.3.0-1 all
      Provides an easy way to perform HTTP requests
    
    php-pclzip/artful,artful 2.8.2-4 all
      ZIP archive manager class for PHP
    
    php-text-figlet/artful,artful 1.0.2-4 all
      Engine for use FIGlet fonts to rendering text
    
    php-zip/artful,artful,now 1:7.1+54ubuntu1 all  [installé, automatique]
      Zip module for PHP [default]
    
    php7.1-bz2/artful-updates 7.1.11-0ubuntu0.17.10.1 amd64
      bzip2 module for PHP
    
    php7.1-zip/artful-updates,now 7.1.11-0ubuntu0.17.10.1 amd64  [installé, automatique]
      Zip module for PHP
    
    
    il s'agit du paquet php-zip
    [== bash ==]
    sudo apt install php-zip
    

    Le principal intérêt de kzInstall.php est quand on a un serveur distant perdu sur Internet. Cela évite de pâtir de la vitesse catastrophique en upload d'une ligne ADSL.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    mars 2018 modifié
    @trentanel,

    On peut afficher le QR-code avec le générateur interne. Pour cela, il faut modifier le fichier .htaccess dans le dossier du plugin comme suit. La directive FilesMatch n'est pas prise en compte chez Free.fr.
    [== .htaccess ==]
    <Files "*">
            Order Deny,Allow
            Deny from all
    </Files>
    <Files "*.png">
            Allow from all
    </Files>
    <Files "qrcode.php">
            Allow from all
    </Files>
    <Files "test.php">
            Allow from all
    </Files>
    

    Et à la racine du site, le .htaccess suivant force PHP à passer en version 5.6:
    [== .htacces ==]
    <IfDefine Free>
       php56 1
    </IfDefine>
    
    
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @niqnutn

    Je préfère passer par l'espace client pour configurer PHP.
    Voir copie d'écran

    Que dit le fichier error.log ?
  • a166a166 Member
    bazooka07 a écrit:
    @trentanel,

    On peut afficher le QR-code avec le générateur interne. Pour cela, il faut modifier le fichier .htaccess dans le dossier du plugin comme suit. La directive FilesMatch n'est pas prise en compte chez Free.fr.
    [== .htaccess ==]
    <Files "*">
            Order Deny,Allow
            Deny from all
    </Files>
    <Files "*.png">
            Allow from all
    </Files>
    <Files "qrcode.php">
            Allow from all
    </Files>
    <Files "test.php">
            Allow from all
    </Files>
    

    Et à la racine du site, le .htaccess suivant force PHP à passer en version 5.6:
    [== .htacces ==]
    <IfDefine Free>
       php56 1
    </IfDefine>
    
    
    kzInstall.php m'a installé PluXml dans mon PluXml existant... Pas grave, c'est un détail.
    Toujours pas de QR code en vue. Il faudrait sans doute que j'ai des directives similaires à celles-ci dans un .htaccess pour nginx ?
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    mars 2018 modifié
    @a166,

    Le fichier .htaccess ne marche que pour les serveurs Apache. Il juste là pour interdire l'accès du dossier du plugin aux petits curieux sur le net.

    il faut regarder les erreurs enregistrées dans le fichier /var/log/nginx/error.log.
    Tu peux regarder comment est installé PHP en mettant sur ton serveur un fichier phpinfo.php avec ceci et en l'affichant dans Firefox ou autre
    [== PHP ==]
    <?php phpinfo(); ?>
    

    Pour kzInstall, il faut le mettre dans un dossier vide.

    Comment tu fais pour avoir un serveur Nginx chez OVH, C'est un VPS ?
  • bazooka07 a écrit:
    @trentanel,

    On peut afficher le QR-code avec le générateur interne. Pour cela, il faut modifier le fichier .htaccess dans le dossier du plugin comme suit. La directive FilesMatch n'est pas prise en compte chez Free.fr.
    Le fichier .htaccess téléchargé avec le plugin a déjà ce même contenu, pas de " FilesMatch ".

    Quand au php il est lui aussi déjà en PHP Version 5.6.8.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @trentanel,

    Crée sur ton serveur un fichier, nommé par exemple variables.php, contenant simplement la ligne suivante et affiche la page dans ton navigateur préféré :
    [== PHP ==]
    <?php phpinfo(INFO_VARIABLES); ?>
    
    Et vérifie que la variable $_SERVER contient au moin "fr", la langue d'administration de PluXml.
    1521040312.png
  • Et bien non, pas de fr ! On peut l'ajouter chez Free ?
    phpinfo a écrit:
    _SERVER["HTTP_ACCEPT_LANGUAGE"] en-US,en;q=0.5
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Donc tu as une erreur 404 quand tu veux afficher le QR-code avec le générateur interne

    Cela se configure dans ton navigateur .
    Pour Firefox, cliquer sur le burger (tri-barre en haut à droite, choisir préférences, général et langues et apparences, langue

    Sous Debian, Firefox est configuré par défaut pour n'accepter que l'anglais, même si le reste est en français
    Je vais rajouter un message d'avertissement pour ceux qui configurent mal leur navigateur :P

    Sinon pour faire sauter le test de sécurité dans le fichier qrcode.php il faut modifier la ligne n°18 comme suit, mais c'est mal !
    [== PHP ==]
    if(true or substr($set1[2], 0, 2) == $_SESSION['admin_lang']) {
    ....
    }
    
    
    1521043392.png
  • trentaneltrentanel Member
    mars 2018 modifié
    Chez moi, ce sont les mêmes langues dans le même ordre.

    Par contre, si je choisi "non" pour le générateur local, alors j'ai bien le code QR qui s'affiche. Avec "oui" c'est comme signalé plus haut.
  • a166a166 Member
    bazooka07 a écrit:
    @a166,
    Le fichier .htaccess ne marche que pour les serveurs Apache. Il juste là pour interdire l'accès du dossier du plugin aux petits curieux sur le net.

    Ah oui c'est vrai.
    bazooka07 a écrit:
    il faut regarder les erreurs enregistrées dans le fichier /var/log/nginx/error.log.

    Je n'ai pas trouvé de piste en examinant les logs de ce site, malheureusement.
    bazooka07 a écrit:
    Comment tu fais pour avoir un serveur Nginx chez OVH, C'est un VPS ?

    Oui :D
  • a166a166 Member
    bazooka07 a écrit:
    @a166
    Regarde avec phpinfo si tu as la librairie iconv installée

    A priori oui :
    ma config iconv
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Nouvelle version 0.9.0

    * Si le QR-code est généré en interne, l'image est embarquée au format binaire dans la page HTML. Le fichier qrcode.php des versions précèdentes est suprimé et il n'y pas de controle de langue (protection anti-hacking)
    * Si les librairies Iconv ou ctype ne sont pas installées, le QR code sera généré directement par Google ( nécessaire pour Alpinelinux )
    * Il y a 4 icones supplémentaires pour télécharger un logiciel d'authentification chez F-Droid
    * il y 2 icones supplementaires qui pointent sur F-Droid et PlayStore pour rechercher le mot-clé TOTP.
    * Testé chez Free.fr ( téléchargé avec kzUploader )

    Même adresse de téléchargement.
  • j'ai toujours le même problème avec la dernière version du plugin.
    je sais pas pourquoi ça marche pas;
    si tu veux regarder, je peux te donner un accès pour tester.
  • Nouvelle version installée, testée et adoptée. Merci bazooka07.
  • a166a166 Member
    Merci pour cette nouvelle version, qui fonctionne bien sans google :-D
Connectez-vous ou Inscrivez-vous pour répondre.