Progetto

Generale

Profilo

Segnalazione #856

interfaccia con LDAP asincrona per tornado

Aggiunto da Elena Grandi 25 giorni fa. Aggiornato 13 giorni fa.

Stato:
In elaborazione
Priorità:
Normale
Assegnato a:
Inizio:
28-06-2019
Scadenza:
% completato:

0%

Resolution:

Descrizione

documentare poi come questa interfaccia esporta le informazioni ottenute da LDAP (utente e gruppi di cui fa parte) al resto del codice tornado.


Segnalazioni correlate

blocca fuss-manager - Segnalazione #858: file di configurazione che associa i permessi ad utenti/gruppi Commenti 28-06-2019
blocca fuss-manager - Segnalazione #860: inserire nome utente e permessi attivi all'interno dell'HTML nel template di base Nuovo 28-06-2019
blocca fuss-manager - Segnalazione #861: Mostrare il nome utente corrente nei template html Nuovo 28-06-2019
blocca fuss-manager - Segnalazione #863: Aggiungere permission checking a operation e API Nuovo 28-06-2019
blocca fuss-manager - Segnalazione #862: form/view di login In elaborazione 28-06-2019

Revisioni associate

Versione 372babd7 (diff)
Aggiunto da Enrico Zini 14 giorni fa

Initial LDAP wrapper class. refs: #856

Versione ea015a01 (diff)
Aggiunto da Enrico Zini 14 giorni fa

Implemented to test authentication. refs: #856

Versione c7d81823 (diff)
Aggiunto da Enrico Zini 14 giorni fa

Print auth results. refs: #856

Versione 4811999c (diff)
Aggiunto da Enrico Zini 14 giorni fa

To facilitate repeated iterations, pick the password from ldap_password if it exists. refs: #856

Versione 18228fc7 (diff)
Aggiunto da Enrico Zini 14 giorni fa

Lookup group information. refs: #856

Versione 80e8ce97 (diff)
Aggiunto da Enrico Zini 14 giorni fa

Use a dataclass to model the User object. refs: #856

Versione 3e2bfdee (diff)
Aggiunto da Enrico Zini 14 giorni fa

Moved user infrastructure in a separate submodule. refs: #856

Versione f7020d10 (diff)
Aggiunto da Enrico Zini 14 giorni fa

Added a generic infrastructure for user databases. refs: #856

Versione d9c6225b (diff)
Aggiunto da Enrico Zini 14 giorni fa

Fixed a race condition when it failed to stop a service before it had started. refs: #856

Versione 1b34327e (diff)
Aggiunto da Enrico Zini 14 giorni fa

Added a fallback local user database to work on non-ldap systems. refs: #856

Versione 222921ea (diff)
Aggiunto da Enrico Zini 14 giorni fa

Use a Group dataclass for groups. refs: #856

Versione 93f26bfe (diff)
Aggiunto da Enrico Zini 14 giorni fa

Do not stick to confusing ldap names for User and Group fields. refs: #856

Versione 146039be (diff)
Aggiunto da Enrico Zini 14 giorni fa

Revove need for ldap_bind_dn_template. refs: #856

Versione 6b30fa58 (diff)
Aggiunto da Enrico Zini 14 giorni fa

Added a mock user database, and instantiate a user database in Manager. refs: #856

Versione db81b177 (diff)
Aggiunto da Enrico Zini 14 giorni fa

Fixed mock user db. refs: #856

Versione 482e7954 (diff)
Aggiunto da Elena Grandi 14 giorni fa

Mock users only have the admin group when called root or admin. refs: #856

Versione 1aa38c03 (diff)
Aggiunto da Elena Grandi 13 giorni fa

New auth backend: master password. refs: #856

Cronologia

#1 Aggiornato da Elena Grandi 25 giorni fa

  • Segnalazione #858: file di configurazione che associa i permessi ad utenti/gruppi blocca aggiunto

#2 Aggiornato da Elena Grandi 25 giorni fa

  • Segnalazione #860: inserire nome utente e permessi attivi all'interno dell'HTML nel template di base blocca aggiunto

#3 Aggiornato da Elena Grandi 25 giorni fa

  • Segnalazione #861: Mostrare il nome utente corrente nei template html blocca aggiunto

#4 Aggiornato da Elena Grandi 25 giorni fa

  • Segnalazione #863: Aggiungere permission checking a operation e API blocca aggiunto

#5 Aggiornato da Elena Grandi 25 giorni fa

  • Versione prevista impostata a 0.7 Autenticazione e autorizzazione

#6 Aggiornato da Mark Caglienzi 19 giorni fa

#7 Aggiornato da Elena Grandi 18 giorni fa

Segnalo da #742 che oltre alle utenze ldap, nelle scuole è anche in uso un utente root con la master password del fuss-server (in /etc/fuss-server/fuss-server.yaml, se presente)

#8 Aggiornato da Enrico Zini 14 giorni fa

  • Stato modificata da Nuovo a In elaborazione
  • Assegnato a modificata da Enrico Zini a Elena Grandi

Nel branch t856 ho committato un comando di esempio, che sarà poi da rimuovere:

usage: fuss-manager ldap [-h] uid

positional arguments:
  uid         user id to use to test authentication

Che tenta l'autenticazione con un server ldap (la password la chiede con getpass()).

In config.py ci sono 3 parametri necessari da configurare per l'autenticazione:

    'ldap_uri': "ldap://server:port",   
    'ldap_search_base': 'dc=fuss,dc=example,dc=it',
    'ldap_bind_dn_template': 'uid={uid},dc=fuss,dc=example,dc=it',

L'implementazione è in manager/ldap.py, asincrona.

Ho un po' di domande:

  • Cosa mettiamo come configurazione di default per lo sviluppo?
  • Decidiamo un formato per passare i dati su un utente invece di una Entry ldap3?
  • ldap_bind_dn_template ha un senso come parametro di configurazione per mappare come passare da username a bind DN di LDAP?

Per esportare i gruppi servirà anche fare una ulteriore query in _sync_authenticate, immagino: vediamo dopo aver deciso con quale struttura dati restituire i risultati.

#9 Aggiornato da Enrico Zini 14 giorni fa

Ho aggiunto la lettura dei gruppi dell'utente. Per un login, e per avere informazioni su un utente, ci sono da fare 3 query LDAP: dati utente, nome gruppo primario, elenco nomi e gid gruppi secondari.

Probabilmente è possibile togliere ldap_bind_dn_template e aggiugnere sempre uid=$UID a ldap_user_search_base. Chiedo feedback a Simone.

Ho improvvisato una struttura User in ldap.py, che sarà poi da tirar fuori da ldap.py e mettere in un qualcosa di piú generico in fuss-manager. Accetto suggerimenti sul suo layout.

#10 Aggiornato da Enrico Zini 14 giorni fa

La configurazione di esempio per LDAP ora è:

    'ldap_uri': "ldap://server:port",
    'ldap_bind_dn_template': 'uid={uid},ou=People,dc=fuss,dc=example,dc=it',
    'ldap_user_search_base': 'ou=People,dc=fuss,dc=example,dc=it',
    'ldap_group_search_base': 'ou=Group,dc=fuss,dc=example,dc=it',

#11 Aggiornato da Simone Piccardi 14 giorni fa

Allora ldap_bind_dn_template secondo me è inutile, per ogni utente il DN sarà sempre nella forma uid=username,{{ldap_user_search_base}}.

Inoltre sul fuss-server l'albero ha sempre la seguente struttura (creata dal playbook) sulla base del dominio specificato in fase di lancio (ex. fuss.lan) ed in genere si contatta sempre su localhost, per cui l'elenco sopra lo esprimerei come (in yaml):

ldap_uri: "ldap://localhost:port" 
ldap_base: dc=fuss,dc=lan
ldap_user_search_base: ou=Users,{{ldap_base}}
ldap_group_search_base: ou=Groups,{{ldap_base}}

ci son pure dei rami ou=Computers e ou=Idmap ad uso di Samba, che si possono ignorare, visto che non mi risulta usino più il fuss-server come PDC.

#12 Aggiornato da Enrico Zini 14 giorni fa

Ho tolto ldap_bind_dn_template e uso invece ldap_user_search_base.

Ho implementato un'astrazione per User, Group, e database utenti e gruppi.

Ho implementato l'autenticazione per LDAP e per db utenti unix locale. Possiamo usare il db utenti unix locale come fallback se ldap non è configurato. Per autenticare utenti però serve essere root.

#13 Aggiornato da Enrico Zini 14 giorni fa

A questo punto ti passo il ticket per review, e per eventualmente:

  • vedere come impostare la configurazione di default
  • documentare le chiavi di configurazione LDAP

#14 Aggiornato da Enrico Zini 14 giorni fa

Per la gestione della master password si può fare un MasterPasswordMixin per i vari user database, che controlla la master password prima di fare super().authenticate(...)

#15 Aggiornato da Enrico Zini 14 giorni fa

Ho aggiunto anche un user database mock, e l'autodetect del database da usare con lo stesso meccanismo is_viable usato per le machine data source

#16 Aggiornato da Elena Grandi 14 giorni fa

Fatto il merge in master, mi tengo il ticket per quanto nei commenti 13 e successivi

#17 Aggiornato da Elena Grandi 13 giorni fa

Aggiunto un nuovo backend per la master password (al posto di un mixin, sembrava più coerente col resto).

È sul branch t853, mi tengo il ticket per il resto.

Esporta su Atom PDF