Newsgroup: it.comp.os.linux.sys
Titolo: ldap

Volevo sapere se qualcuno aveva già avuto a che fare con ldap ...
la cosa che vorrei fare è creare un server ldap per autenticare gli
accessi
a i servizi della mia rete.
Sapete dove posso trovare un esempio per partire ?
                GRAZIE
                            Simone  ;-)))
PS:
        Buona Pasqua a tutti !!!!

 Sapete dove posso trovare un esempio per partire ?
"LDAP Linux HOWTO" ?
-- 
 __
| _            "The Internet is slow, could you reboot it ?"
|__|iambo              mailto:
gabr...@giambonini.com

 benissimo :-)
Beh, procediamo con ordine. Il micro howto non ce l'ho e, visto che la
problematica  l'ho affrontata  da un  punto di  vista diverso  dal tuo
(oltre ai  molti client, avevo  a che fare  con molti utenti)  ci sono
delle differenza  di impostazione... mentale. Comunque  il micro howto
lo scriviamo  insieme in queste email,  così approfitto dell'occasione
per chiarirmi le idee su alcune cose ;-)
Prova così:
- si installa almeno i pacchetti openldapd openldap-utils, i pacchetti
  libpam-ldap e  libnss-ldap (in questo  howto uso anche  mkpasswd che
  trovi nel pacchetto whois.deb  di md). Durante la configurazione con
  debconf  di openldapd  si mette  il nome  completo dell'host  che si
  vuole usare. Non serve che sia il nome reale, ma per coerenza... Per
  esempio: 
pluto.it
, ma può essere anche pippo.pluto.it...
  Nota:  sembra che  ci sia  un maledettissimo  bug che  ho incontrato
  nella  configurazione  con debconf  quando  questo  è impostato  per
  chiedere   i  parametri   per   l'installazione  _solamente_   prima
  dell'installazione  stessa; (s)fortunatamente  non  sono riuscito  a
  riprodurlo. Perciò  è meglio se  si verifica che  l'installazione di
  openldapd sia andata a buon  fine controllando almeno che ci sia una
  riga come questa in /etc/openldapd/slapd.conf:
        suffix          "dc=pluto,dc=it"
- all'interno  del   server  ldap  l'installazione   debian  crea  una
  gerarchia (basedn) che nel nostro caso sarà:
        dc=pluto,dc=it
  Per  visualizzare  il  contenuto   del  server  si  usa  il  comando
  ldapsearch. Prima  consiglio di impostare  i dati predefiniti  per i
  client ldap nel file /etc/openldapd/ldap.conf:
$ cat /etc/openldapd/ldap.conf
HOST 
pluto.it
PORT 389
BASE dc=pluto, dc=it
  E poi  una controllatina:  con -s sub  che indica di  mostrare tutto
  l'albero ldap, e -L usa il formato ldif (quello rfc):
$ ldapsearch -L -s sub objectclass=\*
dn: dc=pluto, dc=it
objectclass: top
objectclass: domain
dc: badhouse
dn: ou=People, dc=pluto, dc=it
objectclass: top
objectclass: organizationalUnit
ou: People
dn: cn=admin, ou=People, dc=pluto, dc=it
objectclass: top
cn: admin
dn: ou=Roaming, dc=pluto,dc=it
objectclass: top
objectclass: organizationalUnit
  Nota: le  ultime 3 righe dovrebbero riferirsi  al Netscape Directory
  Server che contiene gli indirizzi email (tipo bigfoot).
  Nota²: si può visualizzare  l'albero ldap con una maggiore chiarezza
  con il programma (gtk) `gq'.
- si  modifica  il   file  /etc/nsswitch.conf  aggiungendo  ldap  come
  servizio secondario  per i  nomi user, in  modo che dopo  aver letto
  /etc/passwd vada  a vedere  anche su ldap.  Per una  descrizione del
  «perché» rimando alla documentazione  di libnss-ldap. ALla righe con
  `passwd' e `shadow' si aggiunge ldap:
passwd:         compat ldap
group:          compat
shadow:         compat ldap
[...]
  Ovviamente se  non si usa  shadow password (incoscente! :)  la terza
  riga non  serve; i  gruppi non li  ho messi  sotto ldap e  quindi la
  seconda riga l'ho lasciata immutata, ma si può usare anche qui ldap.
- si modificano i  file /etc/pam_ldap.conf e /etc/libnss-ldap.conf. In
  particolare in entrambi i file occorrono queste righe:
# ip del server ldap, che qui è quello locale
host 127.0.0.0 
# nome dell'host ldap-izzato
base ,dc=pluto,dc=it
- si aggiunge ldap all'accounting e all'autenticazione ldap tramite la
  modifica del file /etc/pam.d/login:
# ecco la regola per l'autenticazione con ldap, _solo_ sufficiente
auth       sufficient pam_ldap.so
# qui si aggiunge try_first_pass in modo che vada prima in /etc/passwd
auth       required   pam_unix.so nullok try_first_pass
[...]
account    required   pam_ldap.so
[...]
password   required   pam_ldap.so 
# ancora: usa prima questa regola
password   required   pam_unix.so nullok obscure min=4 max=8
use_first_pass
  Nota: ho omesso gran parte del file, visto che nella maggioranza dei
  casi il  contenuto e dipendente  da pc a  pc. Se vuoi  modificare le
  password  degli utenti-virtuali-ldap  con  `passwd' devi  modificare
  anche /etc/pam.d/passwd con le righe `password ...' sopra.
  Nota²:  ogni   altro  servizio  che   fa  uso  di  pam   può  essere
  personalizzato  con   un  suo  file   /etc/pam.d/nome-servizio;  per
  maggiori dettagli  -che io non  so!- ti rimando  alla documentazione
  libpam-doc.
- si critta la password `diprova' per l'utente `diprova' per dopo:
$ mkpasswd diprova md # in onore del mitico :)
mdbhk7cG6ojsY
- si immette i  dati di un utente: chiamiamolo  `diprova'. Questa è la
  parte  che  *deve* essere  passata  a uno  script  perché  è la  più
  burocratica.  I dati necessari  li ho  presi dai  MigrationTools che
  trovi  sul sito  
www.padl.com
. Comunque  per prova  si può  usare il
  comando ldapadd  con un  file LDIF in  ingresso che contenga  i dati
  «giusti» per l'user `diprova':
$ cat > /tmp/diprova.ldif <<EOF
dn: uid=diprova,ou=People,dc=pluto,dc=it
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
uid: diprova
cn: diprova
userPassword: {crypt}mdbhk7cG6ojsY
shadowLastChange: 11232
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1200
gidNumber: 100
homeDirectory: /home/diprova
gecos: Utente di prova
EOF
  Nota: shadowlastchange è  la data di immissione di  questo utente in
  giorni  dal  1-1-1970  (mi  pare).  Per  il resto  non  so  un  gran
  che... chiedi  se non ti  è chiaro :-)  Poi si passa questo  file al
  server ldap per  mezzo del comando ldapadd con  -D nome-ldap-admin e
  -W per la password (quella di admin-ldap nell'installazione):
$ ldapadd -D cn=admin,ou=People,dc=pluto,dc=it -W -f \
 /tmp/diprova.ldif
Enter LDAP Password: 
adding new entry uid=diprova,ou=People,dc=pluto,dc=it
- a questo punto si prova  a fare SubstituteUser da root verso diprova
  in modo da saltare l'autenticazione (incrocia le dita):
# su - diprova
No directory, logging in with HOME=/
 (giustamente dice che gli manca la home dir, ma siamo entrati,
  esco con CTRL-D)
  Ok!  La parte  di libnss-ldap  funziona, adesso  proviamo a  fare il
  login vero per testare pam-ldap:
# login
happyland login: diprova
Password:
Last login: ....
Linux happyland 2.2.17 ...
 (esco con CTRL-D)
  Funziona! fiuuuu ;-)
 
  Nota: nell'ultimo  passaggio non ho  usato `su' perché questo  ha un
  suo file in /etc/pam.d/su in cui non ho inserito ldap.
- Finito! :-)
Come  avrai notato  ci sono  delle parti  abbastanza  fastidiose, però
escludendo la configurazione che va  fatta una sola volta, certi altri
compiti,   come   appunto  la   compilazione   di   quei  campi   come
«shadowlastchange»  oppure   la  ricerca  di  uid   vuoto  si  possono
automatizzare per mezzo di script o programmini(!) Alla fine si ha una
specie  di  useradd-ldap che  chiederà  gli  stessi  dati del  normale
useradd.
La parte che  più mi interessa di tutto questo  ambaradan è quella con
pam che permette  di virtualizzare praticamente tutti i  servizi di un
ISP. E già lo sto facendo ;-)
Conosci un poco di python?  Sto scrivendo un programma con interfaccia
per console/terminale  in python +  slang per immettere,  modificare e
cancellare gli  utenti per un server  di posta con  più domini gestiti
dinamicamente (postfix+un_pop3). Purtroppo non è ancora finito :-(
Forse sono stato lungo, ma ho scritto solo l'indispensabile :-!
Ciao
Marco aka kaboom
PS  Al  solito ogni  critica,  insulto, foglio-da-centomila,  replica,
questione o commenti sono ben accetti.
-- 
Non c'è più forza nella normalità, c'è solo monotonia.

 writes:
[...]
Questa procedura è completamente verificata solo con la versione
passata di openldap (1.2) mentre adesso c'è la 2.0 (slapd in debian).
PS La prossima volta magari potresti evitare di mandare il mio
indirizzo di posta che poi mi spammano tutti? :-(
Ottavio> PS Al solito ogni critica, insulto, foglio-da-centomila,
Ottavio> replica, questione o commenti sono ben accetti.
Ribadisco :)
Ciao
Marco