Novembre 22, 2024

Alfresco tips & tricks – #15 Ldap error, Guest user cannot be deleted

Durante il processo di sincronizzazione LDAP, può capitare di incorrere in un errore del tipo “The Guest user cannot be deleted”. Alfresco, prima di effettuare una sincronizzazione, lancia una query di ricerca sul server LDAP per recuperare tutti gli aggiornamenti su utenti e gruppi. Se tra i risultati di ricerca, l’utente Guest non risulta più presente, tenterà di cancellarlo dal suo database.
Sebbene tale operazione risulti legittima per utenti LDAP ordinari, non è possibile per Guest, poichè su Alfresco è un utente di sistema.

Il messaggio di errore che compare nel log è qualcosa di simile a questo:

INFO [security.sync.ChainingUserRegistrySynchronizer] [DefaultScheduler_Worker-5] Synchronization,Category=directory,id1=test-myldap,id2=7 Authority Deletion: Completed batch of 40 entries ERROR [security.sync.ChainingUserRegistrySynchronizer] [DefaultScheduler_Worker-5] Synchronization,Category=directory,id1=test-myldap,id2=7 Authority Deletion: 1 error(s) detected. Last error from entry “Guest” org.alfresco.error.AlfrescoRuntimeException: 04280010 The Guest user cannot be deleted. at org.alfresco.repo.security.person.PersonServiceImpl.beforeDeleteNode (PersonServiceImpl.java:1792) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

ESEMPIO

L’esempio classico è quello in cui Alfresco viene integrato con un’istanza Microsoft Active Directory in cui è già presente l’utente built-in Guest. Di seguito riporto una visione ad alto livello del caso d’uso, per ulteriori dettagli vedere Alfresco Synchronization Subsystem

Step 1 – Viene eseguita l’importazione utenti LDAP su Alfresco la prima volta.
Step 2 – Le proprietà per la base di ricerca LDAP su Alfresco puntano a un elemento che include l’utente Guest di AD, per esempio:

ldap.synchronization.groupSearchBase=dc\=testad,dc\=com
ldap.synchronization.userSearchBase=dc\=testad,dc\=com

giuseppe-urso-alfresco-ldap-guest-error-01

Step 3 – Dopo l’importazione, l’utente Guest (già presente su Alfresco perchè di sistema) viene considerato a tutti gli effetti come un utente LDAP.
Step 4 – L’utente Guest, come tutti gli altri utenti LDAP viene aggiornato dopo ogni processo di sincronizzazione LDAP.
Step 5 – Supponiamo di modificare la base di ricerca LDAP impostata per la sincronizzazione facendola puntare a un elemento dell’albero che non include più l’utente Guest.
Step 6 – Durante il processo di sincronizzazione, si verifica l’errore “The Guest user cannot be deleted”.

ldap.synchronization.groupSearchBase=ou\=MilanoUO,dc\=testad,dc\=com
ldap.synchronization.userSearchBase=ou\=MilanoUO,dc\=testad,dc\=com

giuseppe-urso-alfresco-ldap-guest-error-02
SOLUZIONE 1
Questa soluzione è valida solo quando viene effettuata la prima importazione utenti LDAP. Se infatti l’utente Guest viene importato per errore su Alfresco, sarà considerato sempre un utente LDAP e sottoposto quindi agli aggiornamenti durante le successive sincronizzazioni.

### Exclude always the Guest user from the person query
ldap.synchronization.personQuery=(&(objectclass\=user)(!(cn\=Guest))(userAccountControl\:1.2.840.113556.1.4.803\:\=512))
ldap.synchronization.personDifferentialQuery=(&(objectclass\=user)(!(cn\=Guest))(userAccountControl\:1.2.840.113556.1.4.803\:\=512))

SOLUZIONE 2
Anche questa soluzione è valida solo quando viene effettuata la prima importazione utenti LDAP. Se infatti l’utente Guest viene importato per errore su Alfresco, sarà considerato sempre un utente LDAP e sottoposto quindi agli aggiornamenti durante le successive sincronizzazioni.

### Restrict the LDAP user query to a sub section of tree on the LDAP server where the Guest user will never be included
ldap.synchronization.groupSearchBase=ou\=MyNoGuestUnit,dc\=testad,dc\=com
ldap.synchronization.userSearchBase=ou\=MyNoGuestUnit,dc\=testad,dc\=com

SOLUZIONE 3
Disabilitare la funzionalità di cancellazione utente durante il processo di sincronizzazione.

### If false, then no sync job will be allowed to delete users or groups
synchronization.allowDeletions=false

SOLUZIONE 4
L’utente Guest è già stato importato per errore su Alfresco, ma è stata cambiata la query di ricerca LDAP per cui Alfresco punta a un elemento dell’albero che non include più l’utente Guest. In questo caso si può valutare la possibilità di spostare l’utente Guest di Active Directory nel nodo dell’albero da cui parte la query LDAP di Alfresco.

### The sub section of tree on the LDAP server includes the Guest user
ldap.synchronization.groupSearchBase=ou\=MilanoUO,dc\=testad,dc\=com
ldap.synchronization.userSearchBase=ou\=MilanoUO,dc\=testad,dc\=com

giuseppe-urso-alfresco-ldap-guest-error-03

giuseppe-urso-alfresco-ldap-guest-error-04

Related posts

Leave a Reply

Your email address will not be published.