Autenticazione ldap studenti
Autenticazione LDAP per gli studenti
Gli studenti Unimore hanno una username puramente numerica (senza lettere).
Capire il problema
Gli accont posix (oltre ad altri campi) sono definiti:
- uid (è lo username; non è illegale che sia solo numerico ma è sconsigliato)
- uidNumber (determina univocamente la proprietà dei file sul filesystem. É un dato numerico).
Purtroppo alcune utility linux (`id`, ad esempio) determinano euristicamente se il loro parametro è un uid o un uidNumber.
Cosa succede se esistono numerosi numeri che sono validi sia come uid che come uidNumber?
Ad esempio si può chiamare un utente per uidNumber (e funziona):
$ getent passwd 41312 malvezzi:*:41312:41312:Francesco MALVEZZI:/homel/malvezzi:/bin/mosh
peccato che esista uno studente con uid 41312.
Quindi è perfettamente possibile che certe distribuzioni linux, a partire della istruzioni in questo wiki, permettano l'accesso agli studenti. Ma sarebbe meglio se non lo permettessero, perché prima o poi ci sarà un qualche malfunzionamento perché certi tool attribuiscono la ownership di un certo file a tizio, ed altri a caio: ad esempio chown e setfacl danno esiti diversi, se uno prova:
$ chown 41312 il_mio_file.txt $ setfacl -m u:41312:rwx il_mio_file.txt
(nel primo caso il file è utente uid 41312, nel secondo dell'utente con uidNumber 41312, e sono due persone diverse).
Possibili soluzioni
Aggiungere il dominio (direttiva: use_fully_qualified_names):
# Example LDAP domain [domain/LDAP] id_provider = ldap auth_provider = ldap ldap_schema = rfc2307 ldap_uri = <%= $ldap_server %> ldap_search_base = dc=unimore,dc=it ldap_tls_reqcert = <%= $ldap_tls_reqcert %> cache_credentials = true use_fully_qualified_names = True enumerate = False
Non è realmente una soluzione, perché funziona solo se si usa sempre il dominio:
$ setfacl -m u:123@LDAP:rwx file.txt $ setfacl -m u:user@LDAP:rwx file.txt
In questo caso il primo file è associato sicuramente all'utente con uid 123 (e non uidNumber 123), ma lo si poteva fare anche senza settare use_fully_qualified_names.
Oppure: fare il join ad Active Directory:
[domain/unimore.it] ad_domain = unimore.it krb5_realm = UNIMORE.IT realmd_tags = manages-system joined-with-adcli cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/mosh ldap_id_mapping = False use_fully_qualified_names = False fallback_homedir = /homel/%u access_provider = ad