Nutzerdatenbank irgendwie korrupt?

Hallo zusammen,

Nach dem Update von 7.1 auf 7.2 habe ich plötzlich seltsame Effekte in meiner per LDAP angebundenen Nextcloud.
Ob das nur ein zeitlicher Zufall ist, oder ob eine der Änderungen (Update, Externer zusätzlicher DC) ursächlich für die Probleme ist, kann ich nicht sagen.

Wie äußern sich die Probleme?
Aufgefallen ist da Problem durch massive Ein-/Austragungen aus allen Gruppen, in denen die User sind und damit verbundenem Aktivitäts-Log-Spam und Push-Nachrichten-Spam.

Die Zeitabstände in denen das passiert variieren von stündlich bis zweitäglich.

Bei der Vorbereitung eine Testinstanz aufzubauen, habe ich im Verzeichnis data gesehen, dass manche (viele, aber längst nicht alle) Nutzer mehrfach auftauchen:

drwxr-xr-x  9 www-data www-data      4096 Sep  9  2022  az
drwxr-xr-x  3 www-data www-data      4096 Jul  1 10:41 'az              '
drwxr-xr-x  3 www-data www-data      4096 Jul  2 00:51 'az               '

Manche haben (wie ich) drei Geisterverzeichnisse mit abschließenden Leerzeichen, manche nur eins.

Was mich gerade vollkommen irritiert: in der von occ user:listerzeugten Userliste fehlt mein User, mit dem ich mich aber problemlos anmelden kann.

Soweit mal.
Falls jemand Ideen hat… immer her damit :wink:

LG Jesko

Also ich wuerd mir in der nextcloud datenbank mal die tabelle oc_ldap_user_mapping anschauen, ubd vorallem wie viele zeilen diese tabelle hat.
Das hilft vielleicht zu verstehen was da passiert ist.
Man koennte auch mit occ ldap:reset-user arbeiten und schauen ob da Accounts konsolidiert werden. Allerdings gehen die datenbank eintrage (kalender shares) dadurch verloren.
Nextcloud seitig ist entscheidend was unter ldapeinstellungen im expertenmodus unter uuid drin steht. Wenn man mal da den button oc_ldap_usermapping loescheb drueckt, verliert man die Zuordnungen und es entstehen doppelte accounts weil die alten accoubts in der datenbank noch verwaist da sjnd aber nicht mehr aktiv erreichbar sind.
Das sind so meine ideen; unklar ob das was hilft. Weiss auch gar nicht was das lmn uodaze da veraendert haben koennte…

Ich bin auf der Suche nach der Ursache jetzt mal im Backup zurückgegangen und habe festgestellt, dass diese seltsamen loginplusdiverseleerzeichen homeverzeichnisse erstmalig am 1.Juli angelegt wurden.
Das ist seehr seltsam.
Das Update von lmn71 auf lmn72 hab ich am 22.06. gemacht. Da war also noch über eine Woche Zeit, ohne dass dieses Problem auftrat. Das Update von nextcloud 26.0.1 auf 26.0.3 hab ich am 27.06. gemacht… da sind immer noch vier Tage störungsfreier Betrieb vor dem Beginn der Probleme.

Und tatsächlich ist es so, wenn ich die Beiträge in dem anderen Thread richtig zurückrechne, das ich am 2.Juli die „Rolle Rückwärts“ angekündigt habe.
Das passt also alles zeitlich zusammen, so dass ich relativ sicher sagen kann, dass das Problem weder mit dem externen LDAP noch mit dem Updateder LMN noch mit dem Update der Nextcloud zusammen hängt.

Mir fällt beim besten Willen nichts ein, was am 1.Juli (außer Monatswechsel) war.

Was für’n Kack.

Die hat 679 Zeilen, so wie ich das erwarten würde.
Ich hab sie alle durchgescrollt… da ist keine dabei, die blöd aussieht. Alle nach diesem Stil:

| cn=hirschha,ou=testklasse,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain            | hirschha        | hirschha        | 78d4f05d1688a7737c3c1ffdce0dd21b62e19d17786997ef44a6bd861f8b0215 |

Das probiere ich mal in meiner Test-Kopie der Cloud, um zu sehen, was da passiert…

Da steht samaccountname drin, was sich ja auch mit den Zuordnungen in oc_ldap_usermapping deckt.

Das allerdings habe ich irgendwann mal gemacht und tatsächlich sind in der Tabelle oc_accounts auch noch die verwaisten hirschha_4812 artigen Einträge vorhanden.
Die würde ich mal aus der Tabelle entfernen und sehen, ob die Cloud dann noch funktioniert.

LG Jesko

Also in der Testinstanz sieht alles nach dem Druck auf „Gruppenzuordnung löschen“ viel besser aus:
Die Gruppen haben nicht mehr so dämliche _2 oder gar _3 Anhängsel…

Ich riskier das jetzt und drück den Knopf in der Produktivumgebung.

Bäämmm!

So, ich hab ein gutes Gefühl. An Fakten kann ich das noch nicht festmachen, aber ich habe ein gutes Gefühl.

Was hab ich gemacht:

  1. die Tabelle oc_accounts aufgeräumt, um die verwaisten Einträge loszuwerden, von denen ich nicht weiß, wie und wann diese entstanden sind: SET SQL_SAFE_UPDATES=0; delete from oc_accounts where uid like "%\_%" ;
  2. die überflüssigen Ordner in /pfad/zur/nextcloud/data gelöscht: find ./ -maxdepth 1 -name '* ' -exec rm -rf {} \;
  3. in den Experteneinstellungen der LDAP/AD-Integration auf den Button LDAP-Gruppenzuordnung löschen gedrückt. Dabei mit leicht verkrampften Nackenmuskeln den Fluchtreflex unterdrückt.
  4. in den Einstellungen der GroupFolders alle Zuordnungen kontrolliert und bei (fast) allen die Gruppen p_irgendwas_2 durch p_irgendwas ersetzt.
  5. in den Einstellungen „Benutzer“ stichprobenartig ein paar LDAP-Gruppen kontrolliert. Insbesondere die teachers und die p_kollegium Gruppe. Wollte sichergehen, dass nicht irgendwelche Schüleraccounts da rein gerutscht sind.
    War aber alles in Ordnung!
  6. Eine Mail ans Kollegium geschrieben, dass sie mir Rückmeldung geben sollen, falls irgendwas fehlt oder nicht mehr funktioniert.

Ich bin sehr sehr gespannt, ob der Spuk jetzt vorbei ist.
Jedenfalls hab ich jetzt ganz mutig die Push-Benachrichtigungen bei Gruppenänderungen für mich nochmal aktiviert :wink:

Ich werde berichten…

LG Jesko

Das hoert sich doch gut an!
Ich musste auch mal so auf diese weise mal aufrauemen in unserer nextckoud weil ich anfangs da die experteneinstellungen halt net korrekt gesetzt hatte.
Statt direkt die oc_account eintraege zu loeschen, hab ichs allerdings sk genacht dass ich fuer die verwaisten eibtraege in der oc_ldap_user_mapping einen fake Eintrag gemacht hab der auf den jeweiligen verwaisten eibtrag verwies und dann konnte ich diese accounts per occ delete user loeschen. Vielleicht ist das fuer die datenbank so bissle sauberer, weil es ja zig Einträge in den anderen octabellen gibt zu den jeweiligen accounts. Aber das ist eine langwierige arveit bei mir gewesen und macht kein spass…
Am ende gehts ja nir drum dass es sauber laeuft ubd keine doppelten Accounts da sind…

1 „Gefällt mir“

Und jetzt hab ich kein gutes Gefühl mehr… und das kann ich sogar an Fakten festmachen:
Heute um 5:33 wieder der gleiche Käse.

Mann…

Hmm. Dann liegt es doch nahe dass das problem von „aussen“ kommt.
Vielleicht verbindet sich nextcloud zufaellig nach nem naechtlichen logrotate vom webproxy mit deinem ldap replica und dann laeuft die synchronisation vielleicht anhand ldap attribute die da verschieden sind?
I h denke da hilft nur weiter das beobachten von oc_ldap_user_mappings und oc_group_mappings wie sich das veraendert wenn sas problem neu auftritt

Was ist eingetragen bei dir in dem ldap expertenmodus bei uuid override fuer gruppen?

In Anbetracht der Tatsache, dass ich keine Replica mehr habe zur Zeit, halte ich das für ausgeschlossen :wink:

aber

nichts. Ist das ein Problem?

Um sicherzugehen, dass da auch der Name genutzt wird, den ich möchte, habe ich jetzt mal sAMAccountName da reingeschrieben.
Mit ldapsearch konnte ich vorher verifizieren, dass dort bei allen Gruppen der Name drinsteht.
Oder wäre es besser cn zu nehmen? Dürfte eigentlich egal sein, steht überall dasselbe drin. Liege ich da richtig?
dann habe ich nochmal die Zuordnungen gelöscht.
Jetzt füllt sich langsam die Tabelle oc_ldap_group_mapping wieder… und es sieht gut aus:

Inhalt der Tabelle
+------------------+----------------------------------------------------------------------------+------------------+------------------------------------------------------------------+
| owncloud_name    | ldap_dn                                                                    | directory_uuid   | ldap_dn_hash                                                     |
+------------------+----------------------------------------------------------------------------+------------------+------------------------------------------------------------------+
| 05a              | cn=05a,ou=05a,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 05a              | 9be59c45342e6a9b2ce07624d93213f61598ecd49f98b88e9ece86015cddd1b5 |
| 07af             | cn=07af,ou=07af,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain     | 07af             | 8ed57b4ee25d04457fd2267a23c23d5a5fb8d88212d294dd60d2bc59c99a3f79 |
| 07b              | cn=07b,ou=07b,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 07b              | 986b89eddab3de204f9361447e4b3e5b34be3e2c30b9feeb9229b072f4afee3c |
| 07c              | cn=07c,ou=07c,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 07c              | b8951b3081fe5d78056ae62cc600a46a5662882ea966e90f4e073b32ca91d2de |
| 08a              | cn=08a,ou=08a,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 08a              | efc4426e599da2d1c3965af706f5af34b87b55f03da837b36c16dc97bc8de915 |
| 08bf             | cn=08bf,ou=08bf,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain     | 08bf             | cd8bf7592fda2fa703c05f187ae360d4b0ed3871706563596e8ab6a3e006f8b4 |
| 08g              | cn=08g,ou=08g,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 08g              | de92fef900cf7d1332a9600d010ec6a9f4e0dcc01578dbca9e82196ad0e6cdb9 |
| 09b              | cn=09b,ou=09b,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 09b              | 2bd72ca6d962cb7bbb6ab2d9feb4aae3382414797e209465eeb21508531e9368 |
| 09e              | cn=09e,ou=09e,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 09e              | d9e8adf093a87bcee179da06858704c33697d8c9fdf921404da820c320082bff |
| 10af             | cn=10af,ou=10af,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain     | 10af             | bbcb70dfc4751d33cd8e6d53180a3dbde2e636a4f874df215ce0346a9cc1ba5a |
| 10b              | cn=10b,ou=10b,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 10b              | ebacf037e6b722233cdd1c400a190b27c1c28ff3c58bdfa29f32a1c7e2f64b18 |
| 10e              | cn=10e,ou=10e,ou=students,ou=default-school,ou=schools,dc=meine,dc=domain       | 10e              | f14c0b8ed473a898b8eea2e1a0f91fb9d13ca8372f0775940efe33dc3701afc5 |
| p_fsenglisch     | cn=p_fsenglisch,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain     | p_fsenglisch     | 9e10e65d842885a0b3a059ca23904826f79b9e120e6f0d7f823a7ed95e8bfadb |
| p_fsethik        | cn=p_fsethik,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain        | p_fsethik        | c68425ed1e7727f945b26c1d201d43fac6ada0e0e72cf017869dd7e4303dcdac |
| p_fsmathe        | cn=p_fsmathe,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain        | p_fsmathe        | 3cee8ea359b99454a2409f9813ed26121a6984000ee5658a34f1e1767da4b708 |
| p_fsphysik       | cn=p_fsphysik,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain       | p_fsphysik       | baa4d28f650239e1a4fd385f41b31d9b5d7bc39e13b0cbd8d72160b7505dcb9a |
| p_fssport        | cn=p_fssport,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain        | p_fssport        | dc6cfca0fe3a1dbc4915812e73aabcd292c9c0e6e829788d00c23b03571735bb |
| p_fstechnik      | cn=p_fstechnik,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain      | p_fstechnik      | 27410123e925efe528da042ddbe7b85ca678b90525c6139e279f1908d2b105cd |
| p_meine-kollegium | cn=p_morz-kollegium,ou=projects,ou=default-school,ou=schools,dc=morz,dc=domain | p_morz-kollegium | f859f0c2d490f5a4d2b3e4b1c4c6809d5bfcdaf080fc501adfc2af91d97b300d |
| p_sekretariat    | cn=p_sekretariat,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain    | p_sekretariat    | a4b5cbb5cf503c6df6618597a5fadeb71abd74ac19de1904957e7ec75d5b9a95 |
| p_wilma          | cn=p_wilma,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain          | p_wilma          | 520a8aca84a27df876cb53896226fe97bbd70565cef49d5ba424cc03011cf7c9 |
| p_wlan           | cn=p_wlan,ou=projects,ou=default-school,ou=schools,dc=meine,dc=domain           | p_wlan           | 1903bd6b84b0ef0879cb00da5f18cad1facf827da994ba23c919d8194d6ed430 |
| teachers         | cn=teachers,ou=teachers,ou=default-school,ou=schools,dc=meine,dc=domain         | teachers         | d7143eb3e8d3ddbf34646cc8202ff4a5eef49d57445432594266548a6235828c |
+------------------+----------------------------------------------------------------------------+------------------+------------------------------------------------------------------+

Wie viele ldapserver sind eingetragen im aller ersteb basic menu der ldap einstellungen. Ist da vielleicht noch im pulldown menue ein zweiter ldap server eingetragen? ( Nur zur sicherheit die nachfrage)

Da ist nur einer.
Die komplette LDAP-Config sieht so aus:

LDAP-Config
+-------------------------------+-----------------------------------------------------------------------------------------------------------+
| Configuration                 | s01                                                                                                       |
+-------------------------------+-----------------------------------------------------------------------------------------------------------+
| hasMemberOfFilterSupport      | 1                                                                                                         |
| homeFolderNamingRule          |                                                                                                           |
| lastJpegPhotoLookup           | 0                                                                                                         |
| ldapAgentName                 | CN=global-binduser,OU=Management,OU=GLOBAL,DC=meine,DC=domain                                                  |
| ldapAgentPassword             | ***                                                                                                       |
| ldapAttributesForGroupSearch  |                                                                                                           |
| ldapAttributesForUserSearch   | sn;givenName;cn                                                                                           |
| ldapBackgroundHost            |                                                                                                           |
| ldapBackgroundPort            |                                                                                                           |
| ldapBackupHost                |                                                                                                           |
| ldapBackupPort                |                                                                                                           |
| ldapBase                      | OU=SCHOOLS,DC=meine,DC=domain                                                                                  |
| ldapBaseGroups                | OU=SCHOOLS,DC=meine,DC=domain                                                                                  |
| ldapBaseUsers                 | OU=SCHOOLS,DC=meine,DC=domain                                                                                  |
| ldapCacheTTL                  | 600                                                                                                       |
| ldapConfigurationActive       | 1                                                                                                         |
| ldapConnectionTimeout         | 15                                                                                                        |
| ldapDefaultPPolicyDN          |                                                                                                           |
| ldapDynamicGroupMemberURL     |                                                                                                           |
| ldapEmailAttribute            | sophomorixCustom1                                                                                         |
| ldapExperiencedAdmin          | 0                                                                                                         |
| ldapExpertUUIDGroupAttr       | sAMAccountName                                                                                            |
| ldapExpertUUIDUserAttr        | sAMAccountName                                                                                            |
| ldapExpertUsernameAttr        | sAMAccountName                                                                                            |
| ldapExtStorageHomeAttribute   | sophomorixIntrinsic2                                                                                      |
| ldapGidNumber                 | gidNumber                                                                                                 |
| ldapGroupDisplayName          | cn                                                                                                        |
| ldapGroupFilter               | (&(|(objectclass=group))(|(cn=teachers)(cn=0*)(cn=1*)(cn=p_*)(cn=sozial*)(cn=testklasse)(cn=hausm*)))     |
| ldapGroupFilterGroups         |                                                                                                           |
| ldapGroupFilterMode           | 1                                                                                                         |
| ldapGroupFilterObjectclass    | group                                                                                                     |
| ldapGroupMemberAssocAttr      | member                                                                                                    |
| ldapHost                      | ldaps://mein.ldap.server                                                                                    |
| ldapIgnoreNamingRules         |                                                                                                           |
| ldapLoginFilter               | (&(|(objectclass=person)) (samaccountname=%uid))                                                          |
| ldapLoginFilterAttributes     |                                                                                                           |
| ldapLoginFilterEmail          | 0                                                                                                         |
| ldapLoginFilterMode           | 1                                                                                                         |
| ldapLoginFilterUsername       | 1                                                                                                         |
| ldapMatchingRuleInChainState  | unknown                                                                                                   |
| ldapNestedGroups              | 0                                                                                                         |
| ldapOverrideMainServer        |                                                                                                           |
| ldapPagingSize                | 500                                                                                                       |
| ldapPort                      | 636                                                                                                       |
| ldapQuotaAttribute            | sophomorixCloudQuotaCalculated                                                                            |
| ldapQuotaDefault              |                                                                                                           |
| ldapTLS                       | 0                                                                                                         |
| ldapUserAvatarRule            | default                                                                                                   |
| ldapUserDisplayName           | displayname                                                                                               |
| ldapUserDisplayName2          |                                                                                                           |
| ldapUserFilter                | (&(objectClass=person)(!(sophomorixAdminClass=attic))(|(sophomorixRole=teacher)(sophomorixRole=student))) |
| ldapUserFilterGroups          | teachers                                                                                                  |
| ldapUserFilterMode            | 1                                                                                                         |
| ldapUserFilterObjectclass     | person                                                                                                    |
| ldapUuidGroupAttribute        | auto                                                                                                      |
| ldapUuidUserAttribute         | auto                                                                                                      |
| turnOffCertCheck              | 0                                                                                                         |
| turnOnPasswordChange          | 0                                                                                                         |
| useMemberOfToDetectMembership | 1                                                                                                         |
+-------------------------------+-----------------------------------------------------------------------------------------------------------+```

Nicht klar ist mir die Bedeutung von

| ldapUserFilterGroups          | teachers  

und ich wundere mich, dass

| ldapUuidGroupAttribute        | auto                                                                                                      |
| ldapUuidUserAttribute         | auto  

diese beiden Parameter auf auto stehen.

Also im vergleich zu meiner konfiguration:
Ldapuserfiltergroups ist leer
Ldapexpertusernameattr cn (weil wir novell edir haben also sama… bei dir)
Und die ldapexpertuuidgroupattr und ldapexpertuserattr sind bei mir leer
Ldapattributesforgroupsearch steht bei mir cn drin

Ich hab vorhin gelesen dass aenderungen an dieser stelle nur neue accounts betreffen bzw. Wenn du die ldap mappings loescht natuerlich alle accounts.
Sorry kann dir da also auch net wirklich weiterhelfen…

Hallo Sucher,

Wie viele ldapserver sind eingetragen im aller ersteb basic menu der
ldap einstellungen. Ist da vielleicht noch im pulldown menue ein zweiter
ldap server eingetragen? ( Nur zur sicherheit die nachfrage)

… das ist eine sehr gute Frage: Jesko wollte ja einen Fallback LDAP …
wäre ja nur logisch, wenn er den als zweiten dort eingetragen hätte …
und seit der weg ist …

LG

Holger

Ja klar… die Kleinigkeiten sind es ja oft, wo man denkt „wird schon dran gedacht haben“… „leider“ hatte ich das schon entfernt…
Das Problem kommt also woanders her.
Ich suche weiter…
:slight_smile:

Ok,

Habe ich geleert. Mir ist sowieso nicht klar, warum da teachers drinsteht. Ich habe auch die Stelle nicht gefunden, wo man das konfigurieren kann. Per occ kann man auch keine Schlüssel löschen, also hab ich das in der oc_appconfig erledigt.
occ ldap:show-config zeigt mir jetzt korrekt einen leeren Wert an.

ldapExpertUsernameAttr ist ja korrekt gesetzt bei mir (cn würde auch gehen, da steht bei uns genau das selbe drin wie in sAMAccountName

die beiden anderen Schlüssel habe ich mit einem Wert belegt, weil ich verhindern wollte, dass die Nextcloud aus versehen als Usernamen irgendwelche kryptischen UUIDs verwendet. Und der letzte Wert sagt, nach was man (z.B. beim Teilen) suchen kann. Bei Gruppen ist es eigentlich wurscht, bei den Benutzern hab ich da den Vor und Nachnamen noch dazu genommen, damit man die Kinder auch findet, wenn man ihren Login nicht kennt.

Was mich ernsthaft irritiert ist:
suche ich nach meinem Nutzer mit occ user:info az, kommt umgehend die Meldung, dass ich existiere und wie ich mit vollem Namen heiße.
lasse ich mir die Gruppen auflisten (occ group:list oder im Webfrontend), sehe ich mich in den Gruppen, wo ich hingehöre.
ABER: lasse ich alle User auflisten mit occ user:list, kommen hunderte Nutzer, aber ich bin nicht dabei.
Sehr seltsam.

Hi Jesko,
ich habe gerade mal bei mir geschaut:
sudo -u www-data php occ user:list
da sind bei mir gar keine Lehrer dabei (also auch ich nicht).

Ich häng Dir hier mal an, wie ich meine Nutzer am Schuljahresende aus der NC lösche. Ich hole sie mir aus meinem Owncloud-Userdatenverzeichnis… wahrscheinlich hab ich das eben so gemacht, weil bei user:list nicht alle mitkamen… Weiß ich nimmer, ist Jahre her.

Achtung: das ist nicht als Script gedacht!!! Man sollte sich die Datei mit den zu löschenden Usern genau anschauen, bevor man sie löscht, ebenso die Bildschirmausgaben unterwegs…

ls /owncloud-data/ | grep -v "\." > /tmp/userlist
for i in `cat /tmp/userlist` ; do sudo -u www-data php occ ldap:check-user $i; done
sudo -u www-data php /var/www/owncloud/occ ldap:show-remnants | cut -d "|" -f 2 | grep -v ^+ | grep -v Nextcloud | cut -b 2- > /tmp/zuloeschendeuser
e /tmp/zuloeschendeuser
for i in `cat /tmp/zuloeschendeuser`; do sudo -u www-data php /var/www/owncloud/occ ldap:check-user $i; done
for i in `cat /tmp/zuloeschendeuser`; do sudo -u www-data php /var/www/owncloud/occ user:delete $i; done

Ich hatte mal ein seltsames NC-Verhalten, das dann auf ein korruptes Root-verzeichnis zurückzuführen war. Hat länger gedauert, weil das Userdatenverzeichnis inOrdnung war…
Hast Du mal nach so was „rudimentärerem“, also Festplattenfehler, Speicherfehler,… geschaut?

LG
Max

Hallo Max,
also meine Platten sind in Ordnung. und Dateisystemfehler sind da auch keine.
Aber ich hab was anderes wieder entdeckt, was mir schon mal aufgefallen war und was sicher nicht so sein soll:
Die User, die zugewiesen werden sollen, haben zum Teil viele Leerzeichen hinter den Buchstaben.
Im Activity-Log kann man das gut sehen:

| zw                | {"user":"zw              ","group":"p_fsethik"}                                                            |
| kr                | {"user":"kr              ","group":"p_fsethik"}                                                            |
| ng                | {"user":"ng              ","group":"p_fsethik"}                                                            |
| or                | {"user":"or              ","group":"p_fsethik"}                                                            |
| sr                | {"user":"sr              ","group":"p_fsethik"}                                                            |
| az                | {"user":"az              ","group":"p_testchat"}                                                           |
| hs                | {"user":"hs              ","group":"p_fsethik"}                                                            |
| wb                | {"user":"wb              ","group":"p_wlan"}                                                               |
| wo                | {"user":"wo              ","group":"p_wlan"}                                                               |
| nueb              | {"user":"nueb            ","group":"p_wlan"}                                                               |

man sieht die Leerzeichen gut wg. der Anführungszeichen. Das ist also keine Formatierungsgeschichte, sondern die sind da einfach definitiv zu viel.
Und die sind auch nicht immer gleich viele. Damit kommt dann vermutlich die Erkennung nicht zurande, die eigentlich verhindern soll, dass ein user in eine Gruppe kommt, in der er schon drin ist.
Wenn dann
"az " in der Gruppe war und bei der nächsten Synchronisation
"az " in die Gruppe soll, dann kommen zwei Meldungen, die sich (weil im HTML dann die Leerzeichen alle verschwinden) so lesen, als würde man raus und wieder rein gemacht.

Am Ende ist es aber so, dass es ständig verschiedene Nutzer sind, die aber alle in der Nutzung ein einziger sind, weil die Leerzeichen wohl getrimmt werden.

Jetzt ist die Frage, wo die herkommen.
Hat jemand ne Idee, wie ich das eingrenzen kann?

LG Jesko

Hast du nur nextcloud ldap aktiviert oder auch noch login via sso? ( Auch wieder nur.ne fehler ausschlussfrage)