Indice del forum www.zeroshell.net
Distribuzione Linux ZeroShell
 
 FAQFAQ   CercaCerca  GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo  Log inLog in   Messaggi privatiMessaggi privati 

Sincronizzazione ldap

 
Nuovo argomento   Rispondi    Indice del forum -> ZeroShell
Precedente :: Successivo  
Autore Messaggio
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mar Gen 08, 2013 10:29 pm    Oggetto: Sincronizzazione ldap Rispondi citando

Buonasera a tutti, mi serve un consiglio per non fare cose inutili da ignorante. Per la prossima versione di zerotruth ho la necessità di sincronizzare un database ldap "centrale" con dei remoti. ZS non ha ancora tale funzione integrata (almeno così ho visto) quindi come agisco con gli strumenti attualmente a disposizione?
La mia idea è semplice ma forse esiste una strada migliore che attendo da voi.
Pensavo di fare, per esempio, in questo modo:
alle 2 di notte il "server" crea, con slapcat un ldap.diff
alle 2.30 i client se lo vanno a prendere corn wget, lo manipolano un po' con sed, cut e awk e per ogni utente trovato verificano:
1. se non è presente sul database client e in tal caso lo inseriscono
2. è presente e in tal caso lo aggiornano.
Che dite? Attendo suggerimenti.
Grazie.
Top
Profilo Invia messaggio privato
Francesco Steno



Registrato: 26/03/10 14:59
Messaggi: 181

MessaggioInviato: Mer Gen 09, 2013 9:09 am    Oggetto: Rispondi citando

In pratica funziona.
Vuoi avere un server LDAP centrale in lettura scrittura, e altri client in sola lettura ?
Top
Profilo Invia messaggio privato Invia e-mail
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mer Gen 09, 2013 9:46 am    Oggetto: Rispondi citando

ciao, in scrittura anche i client.
Top
Profilo Invia messaggio privato
Francesco Steno



Registrato: 26/03/10 14:59
Messaggi: 181

MessaggioInviato: Mer Gen 09, 2013 11:41 am    Oggetto: Rispondi citando

In lettura e scrittura su server e client ? .... bhe, io non mi sono mai trovato in situazioni simili, ma la vedo
un operazione delicata. Bisogna valutare un bel po di casistiche, tipo concorrenzialità durante il sync,
lock del database ecc ...
Se non hai l'esigenza di avere i database in lettura/scrittura, puoi optare per una replicazione del db

http://www.openldap.org/devel/admin/replication.html

http://www.openldap.org/devel/admin/referrals.html


... buon lavoro Wink
Top
Profilo Invia messaggio privato Invia e-mail
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mer Gen 09, 2013 6:09 pm    Oggetto: Rispondi citando

provato e funziona, con più di 200 utenti è andata tutto liscio sia un primo inserimento che poi un aggiornamento... che comunque gestisce lo script. è forse da riscrivere un po' meglio ma funziona.

sul "server" di fa un dump del database con slapcat, semplicemente

Codice:
slapcat > ldap.bk


Poi in qualche modo si deve trasperire il file generato sul "client"

e poi lanciare lo script

Codice:
ldapzt.sh ldap.bk


ldapzt.sh è questo:

Codice:
#!/bin/bash
LDAP_FILE="$1"
LDAP_BASE="$(cat /Database/var/register/system/ldap/base)"
LDAP_ROOT="$(cat /Database/var/register/system/ldap/rootpw)"
LDAP_MANAGER="cn=Manager"
for USER in $(cat $LDAP_FILE | grep "dn: uid=" | cut -d'=' -f2 | cut -d',' -f1);do
   if [ "$USER" != "admin" ];then
         LINE=$(/usr/local/bin/ldapsearch  -xLLL  -b  "ou=People,$LDAP_BASE"  uid=$USER uid )
         USERLOCAL=$( echo "$LINE" | grep -e '^uid: ' | cut -d":" -f2  | sed 's/.\(.*\)/\1/' )
         if [ -n "$USERLOCAL" ];then
            DATA=$(sed -n "/^dn: uid=$USER/,/^shadowExpire/p" $LDAP_FILE | sed -e '1d' | sed -e '/^object/d' | \
            sed -e '/^home/d' | sed -e '/^entry/d' | sed -e '/^login/d' | sed -e '/^creat/d' | sed -e '/^structural/d' )
            UIDUSER="dn: uid=$USER,ou=People,$LDAP_BASE"
            DATA="$UIDUSER\n$DATA"
            echo -e "$DATA" | /usr/local/bin/ldapmodify -c -x -D "$LDAP_MANAGER,$LDAP_BASE" -w $LDAP_ROOT
            
            DATA=$(sed -n "/^dn: cn=$USER/,/^sn:/p" $LDAP_FILE| sed -e '1d' | sed -e '/^object/d' | sed -e '/^dial/d' | \
            sed -e '/^entry/d'  | sed -e '/^login/d' | sed -e '/^creat/d' | sed -e '/^structural/d' )
            UIDUSER="dn: cn=$USER,ou=Radius,$LDAP_BASE"
            DATA="$UIDUSER\n$DATA"
            if [ -z $(echo "$DATA" | grep -e '^radiusUserCategory: ' | cut -d':' -f2) ];then
               DATA="$DATA\nradiusUserCategory: DEFAULT"
            fi   
            echo -e "$DATA" | /usr/local/bin/ldapmodify -c -x -D "$LDAP_MANAGER,$LDAP_BASE" -w $LDAP_ROOT
            PASSWORD=$(echo "$DATA" | grep -e '^sn: ' | cut -d':' -f2)
            kadmin.local -q "change_password -pw $PASSWORD $USER"  2>/dev/null  >/dev/null
         else   
            DATA=$(sed -n "/^dn: uid=$USER/,/^shadowExpire/p" $LDAP_FILE | sed -e '1d' | sed -e '/^creat/d' | \
            sed -e '/^entry/d' | sed -e '/^structural/d' )
            UIDUSER="dn: uid=$USER,ou=People,$LDAP_BASE"
            DATA="$UIDUSER\n$DATA"
            echo -e "$DATA" | /usr/local/bin/ldapadd -c -x -D "$LDAP_MANAGER,$LDAP_BASE" -w $LDAP_ROOT
            DATA=$(sed -n "/^dn: cn=$USER/,/^sn:/p" $LDAP_FILE |  sed -e '/^structural/d' | sed -e '/^creat/d' | \
            sed -e '/^entry/d' | sed -e '1d' )
            UIDUSER="dn: cn=$USER,ou=Radius,$LDAP_BASE"
            DATA="$UIDUSER\n$DATA"
            if [ -z $(echo "$DATA" | grep -e '^radiusUserCategory: ' | cut -d':' -f2) ];then
               DATA="$DATA\nradiusUserCategory: DEFAULT"
            fi   
            echo -e "$DATA" | /usr/local/bin/ldapadd -c -x -D "$LDAP_MANAGER,$LDAP_BASE" -w $LDAP_ROOT
            PASSWORD=$(echo "$DATA" | grep -e '^sn: ' | cut -d':' -f2)
            kadmin.local -q "addprinc -pw $PASSWORD $USER" > /dev/null
         fi
   fi   
done


semplicemente se in locale non trova un user lo inserisce altrimenti lo aggiorna.

Che dite?
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> ZeroShell Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it