Problème LDAP après ajout au sso de yunohost d'utilisateurs déjà enregistrés dans Nextcloud avec Registration

Bonjour,

Suite à une longue discussion sur la faisabilité de permettre à des utilisateurs de s’inscrire sur une instance Nextcloud sans avoir de compte Yunohost, donc suite à ces discussions: Nextcloud et utilisateurs non ajoutés à Yunohost et Ajout utilisateurs nextcloud sans inscription yunohost me voici dans un cas où je désire ajouter des utilisateurs inscrits via le plugin Registration aux utilisateurs Yunohost avec le LDAP et le SSO.

Par contre, même si le fait de créer un utilisateur Yunohost avec le même nom de user et le même mot de passe utilisé lors de son inscription marche, cela fonctionne, mais plus au moins après constat.

Ces utilisateurs Yunohost sont bien créés et retrouve toutes leurs données dans Nextcloud, ils peuvent se connecter au SSO et aller dans Nextcloud directement.

Pourtant un autre utilisateur est créé dans Nextcloud de la forme user_XXXX où XXXX correspond à une suite de 4 chiffres.

Est-ce bien normal ?

Ils n’ont pas leur dossier utilisateur créé dans /home/yunohost.app/nextcloud/ comme les autres utilisateurs qui ont été créé directement avec un compte SSO (ceci dit ces dossiers ont l’air juste d’être ici pour les stockages externes qui ne sont pas utilisés), leurs dossiers (utilisateur et utilisateur_XXXX) reste dans /home/yunohost.app/nextcloud/data, mais ils ont bien un dossier /home/user/, dossier contient un fichier (vide) media, et un lien Multimedia.

Le nouveau dossier qui est créer bizarrement est un dossier /home/yunohost.app/data/nom_utilisateur_XXXX où il n’y a rien…
par exemple:

~# ls -l /home/yunohost.app/nextcloud/data/user_7590/
total 0
~# ls -la /home/yunohost.app/nextcloud/data/user_7590/
total 8
drwxr-xr-x  2 nextcloud nextcloud 4096 Sep 14 15:47 .
drwxr-x--- 36 nextcloud nextcloud 4096 Sep 18 12:27 ..

D’ailleurs dans l’onglet utilisateurs, je vois pour ces utilisateurs usser_XXXX (0 GB utilisé)
Bizarre, en fait ces dossiers semblent vides et je ne sais pas si je dois les supprimer tout simplement…

Ce n’est pas si simple, quand je regarde dans la base de données, les utilisateurs avaient une autre adresse mail (leur adresse mail) pour s’inscrire. Si je me connecte à mysql et regarde dans les tables oc_accounts_data
MariaDB [nextcloud]> SELECT * FROM oc_accounts_data;
il se passe un truc chelou !
Par exemple

| 10418 | user             | displayname     | User Name                                                                                                                                                                               |
| 10419 | user             | address         |                                                                                                                                                                                             |
| 10420 | user             | website         |                                                                                                                                                                                             |
| 10421 | user             | email           | user@foo.tld                                                                                                                                                                    |
| 10422 | user             | phone           |                                                                                                                                                                                             |
| 10423 | user             | twitter         |                                                                                                                                                                                             

et plus bas l’utilisateur bizarre, pourtant avec le mail du serveur yunohost !

| 11879 | user_7590        | displayname     | User Name                                                                                                                                                                               |
| 11880 | user_7590        | address         |                                                                                                                                                                                             |
| 11881 | user_7590        | website         |                                                                                                                                                                                             |
| 11882 | user_7590        | email           | user@nom_domaine_yunohost.tld                                                                                                                                                                           |
| 11883 | user_7590        | phone           |                                                                                                                                                                                             |
| 11884 | user_7590        | twitter         |                                                                                                                                                                                             |
| 11885 | user_7590        | organisation    |                                                                                                                                                                                             |
| 11886 | user_7590        | role            |                                                                                                                                                                                             |
| 11887 | user_7590        | headline        |                                                                                                                                                                                             |
| 11888 | user_7590        | biography       |                                                                                                                                                                                             |
| 11889 | user_7590        | profile_enabled | 1                                                                                                     

J’ comprends absolument rien à ce mic-mac !!

Avec mysql, dans les bases de données, si je fais un
MariaDB [nextcloud]> SELECT * FROM oc_users;
Je ne vois que les noms des utilisateurs avec leur nom (et pas de utilisateur_XXXX), pareil pour
MariaDB [nextcloud]> SELECT * FROM oc_user_status;

Par contre si je regarde cette table
MariaDB [nextcloud]> SELECT * FROM oc_ldap_user_mapping;
là j’ai une liste des utilisateurs yunohost et ceux qui ont été rajoutés après ont leur identifiant bizarre en user_XXXX au lieu du user
| user_7991 | uid=user,ou=users,dc=yunohost,dc=org

Zut, ça se complique !! plus que je ne le croyais !!

En effet sur Nextcloud => utilisateurs => groupe all_users, donc les utilisateurs Yunohost, ceux ajoutés après coup ont un nom utilisateur_XXXX. Les utilisateurs avec leur ID user ne sont pas dans le groupe all_users

Pas très clean tout ça, à ne rein y comprendre…

Et pourtant, ça n’existe pas de se connecter avec un utilisateur utilisateur_XXXX, l’utilisateur se connecte bien avec son ID utilisateur ou via le SSO,
sauf son mail dans son profil qui est resté celui utilisé lors de son inscription et pas celui avec le nom de domaine [at] nom_domaine_yunohost.tld ! par contre ce mail yunohost est dans cet utilisateur fantôme user_XXXX

Bref, c’est très embêtant, même si ça marche tout de même…

Comment puis-je régler ce problème sans tout casser, dans l’idéal, sans devoir supprimer le compte et ses données (partages, calendriers, etc…)

Ou est-ce que je peux laisser fonctionner ainsi ??

Oups, je crois avoir trouvé une solution !! Mais non !!
Dans les paramètres de l’extension Registration (Inscription), en cochant Adresse mail facultative
Capture d’écran du 2022-09-20 14-01-21

Du coup dans les utilisateurs actifs, je ne vois plus d’utilisateur user_XXXX et le user est bien dans le groupe all_users !!

Hum, fausse joie !! je ne sais pas si je l’ai rêvé…
Les utilisateurs user_XXXX n’existent pas dans les utilisateurs actifs, ils sont dans le groupe all_users

Je crois crois voir une piste de ce qui a pu ce passer ici: User authentication with LDAP — Nextcloud latest Administration Manual latest documentation

Internal Username:

The internal username is the identifier in Nextcloud for LDAP users. By default it will be created from the UUID attribute. The UUID attribute ensures that the username is unique, and that characters do not need to be converted. Only these characters are allowed: [a-zA-Z0-9_.@-]. Other characters are replaced with their ASCII equivalents, or are simply omitted.

The LDAP backend ensures that there are no duplicate internal usernames in Nextcloud, i.e. that it is checking all other activated user backends (including local Nextcloud users). On collisions a random number (between 1000 and 9999) will be attached to the retrieved value. For example, if “alice” exists, the next username may be “alice_1337”.

The internal username is the default name for the user home folder in Nextcloud. It is also a part of remote URLs, for instance for all *DAV services.

You can override all of this with the Internal Username setting. Leave it empty for default behavior. Changes will affect only newly mapped LDAP users.

When configuring this, be aware that the username in Nextcloud is considered immutable and cannot be changed afterwards. This can cause issues when using an attribute that might change, e.g. the email address of a user that will get changed during name change.

Là j’essaie de comprendre cette phrase : You can override all of this with the Internal Username setting. Leave it empty for default behavior. Changes will affect only newly mapped LDAP users. C’est à dire ? Qu’est-ce que je peux tenter de laisser vide et chez quel utilisateur ??

Bon, j’ouvre aussi sur le forum aide de Nextcloud ce sujet: Having trouble with user authentification LDAP on Yunohost adding an existing user not included in LDAP to Yunohost LDAP - ℹ️ Support - Nextcloud community

En fait, je ne sais pas si c’est vraiment un problème, c’est à dire quand je lis ceci: On collisions a random number (between 1000 and 9999) will be attached to the retrieved value. For example, if “alice” exists, the next username may be “alice_1337”. Je crois comprendre que les utilisateurs user et user_XXXX sont bien «attachés». Est-ce que je peux laissé comme cela ?? C’est ma question, ça me semble pas terrible, d’où mon inquiétude…

Salut.

Nextcloud n’a pas de mécanisme pour transformer un utilisateur local en utilisateur LDAP, un utilisateur local reste local à jamais. Donc quand il voit l’utilisateur avec le même login dans le LDAP, il ajout un suffixe pour éviter la collision et crée un utilisateur séparé.

Tu ne pourras pas facilement transformer tes utilisateurs locaux en utilisateurs LDAP, à moins de triffouiller la BdD à la main mais je déconseille.

Admettons que je laisse cette configuration.
Car au final, j’ai bien des utilisateurs qui peuvent se connecter à Yunohost, ils se connectent bien avec le SSO à Nextcloud, leur dossier est intact. C’est juste que le compte LDAP devient un utilisateur «attché» user_XXXX. Je ne comprends pas bien comment, mais c’est ce que je crois comprendre…
Puis-je laissé comme cela ? Est-ce qu’il y a un risque ?

Sinon, même si c’est plus long… C’est un peu galère, mais si pas le choix…

  1. créer un autre utilisateur via Yunohost avec un autre nom.
  2. transférer l’ancien utilisateur occ files:transfer-ownership user1 user2 (mais là j’imagine qu’il ne s’agit que des fichiers (sauvegarde avant des contacts et calendriers…)
  3. reconfigurer à la mano les différents partages etc…
  4. supprimer l’ancien utilisateur

Si je peux éviter, je préfère, en fait il faut que je sache si en laissant ainsi j’ai des risques de compromission ou autre ??

Oui c’est mieux de faire un autre utilisateur et de transférer les données.
De ce que je comprends c’est ce que tu as fait, il faut bien comprendre que pour nextcloud les comptes user et user_XXXX sont deux utilisateurs différents.

Pour migrer calendrier et configuration tu peux essayer l’application user_migration pour faire un export de l’ancien utilisateur et l’importer dans le nouveau (si ya trop de fichiers ne séléctionne pas l’exporteur de fichier, exporte/importe le reste et utilse transfer-ownership pour les fichiers).

Pour moi tant que tu as pas modifié la base de données à la main a priori tu as une configuration qui ne devrait pas poser de problème, à part la confusion possible à avoir des utilisateurs avec des noms proches.