User Tools

Site Tools


Sidebar

cn:ccr:aai:howto:389ds-1.3-install-rhel7

RHEL7: Installazione di 389 Directory Server 1.3.x

NOTA BENE Gli esempi citati in questa guida si intendono per 389 Directory Server 1.3.x su Scientific Linux 7

In caso di installazione con diverse versioni alcuni path o nomi dei pacchetti potrebbero differire.

E’ inoltre vivamente consigliato che IP address, IP Name e Hostname della macchina siano coerenti.

 hostnamectl status

ed eventualmente

 hostnamectl  set-hostname <FQHN>

Componenti del 389-ds

Il 389-DS è composto da vari pacchetti che si possono installare separatamente

  • 389-ds-base (e relative librerie) la cui versione è la 1.3 e si trova nel repository "base" della distribuzione CentOS7
  • 389-admin (e relative utilities) la cui versione è la 1.1 ed ha il 389-ds-base tra le sue dipendenze. Si trova nel repository EPEL
  • 389-ds-console la cui versione è la 1.2 ed ha il 389-admin (e quindi anche il 389-ds-base) tra le sue dipendenze. Si trova nel repository EPEL
  • 389-dsgw la cui versione è la 1.1 ed ha il 389-admin (e quindi anche il 389-ds-base) tra le sue dipendenze. Si trova nel repository EPEL
  • 389-ds la cui versione è la 1.2 e contiene tutti i pacchetti di cui sopra.

In linea di principio non è necessario avere tutti i pacchetti su tutti i server (basta un solo server con 389-ds-console e 389-admin). Noi installeremo tutto su tutti per due motivi:

  1. E' utile avere sempre una console funzionante
  2. La configurazione di SSL/TLS sulla console

Preparazione del sistema

Modificare i parametri kernel in /etc/sysctl.conf:

echo "fs.file-max = 256000" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_time = 300" >> /etc/sysctl.conf
echo "vm.swappiness = 10" >> /etc/sysctl.conf

Ricaricare sysctl:

sysctl --system

Modificare i limits in /etc/security/limits.conf inserendo la linea:

echo "* soft nofile 32768" >> /etc/security/limits.conf      
echo "* hard nofile 63536" >> /etc/security/limits.conf
echo "* soft nproc  4096" >> /etc/security/limits.conf     
echo "* hard nproc 16384" >> /etc/security/limits.conf     

Effettuare log-out e log-in in modo da ricaricare i limits.

Installare cyrus-sasl e le librerie necessarie per INFN-AAI

yum -y install cyrus-sasl cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-plain cyrus-sasl-lib

Installazione del client LDAP standard di Linux:

yum -y install openldap-clients

Installazione 389-ds

Abilitare il repository yum EPEL

yum -y install epel-release
yum clean all

Inatallare il 389-DS con tutte le sue dipendenze

yum -y install 389-ds

Modificare i limits che sistema assegna al processo, modificando il file /etc/sysconfig/dirsrv.systemd:

echo "LimitNOFILE=32768" >> /etc/sysconfig/dirsrv.systemd
echo "LimitNPROC=16384" >> /etc/sysconfig/dirsrv.systemd

Rendere effettive le modifiche facendo ricaricare le configurazioni dal daemon di systemctl

systemctl daemon-reload

Setup di 389-ds

Creare l’utente ds:

useradd -r -s /bin/false ds

Lanciare il setup di 389-ds

/usr/sbin/setup-ds-admin.pl

Scegliere l’opzione 3 in modo da personalizzare l’installazione:

  • Configurare come utente/gruppo "ds";
  • Controllare il root suffix;
  • Tutto il resto può essere lasciato al default.

Attenzione : In questa fase verra' chiesto il nome dell'istanza del DS, di default corrisponde all'hostname senza dominio. Si consiglia di lasciare il default e impostare la variabile DSUID in ~/.bash_profile. Di seguito si farà infatti riferimento a tale valore con $DSUID.

echo 'export DSUID=nome.istanza.ds' >> ~/.bash_profile
source ~/.bash_profile

Impostare la partenza dei servizi di 389-ds al boot

systemctl enable dirsrv.target
systemctl enable dirsrv-admin.service

Fermare 389ds

systemctl stop dirsrv.target

Verificare lo stato del servizio

systemctl status dirsrv@$DSUID.service

Per migliorare le performance di 389ds incrementare il massimo numero di file descriptor a disposizione del server modificando il file /etc/dirsrv/slapd-$DSUID/dse.ldif e /etc/sysconfig/dirsrv

sed -i 's/^nsslapd-maxdescriptors: .*$/nsslapd-maxdescriptors: 16384\nnsslapd-reservedescriptors: 8192/' /etc/dirsrv/slapd-$DSUID/dse.ldif
sed -i 's/^#* *ulimit -n.*$/ulimit -n 16384/' /etc/sysconfig/dirsrv

Eliminare il limite di entry nelle ricerche

sed -i 's/^nsslapd-sizelimit: .*$/nsslapd-sizelimit: -1/' /etc/dirsrv/slapd-$DSUID/dse.ldif
sed -i 's/^nsslapd-lookthroughlimit: .*$/nsslapd-lookthroughlimit: -1/' /etc/dirsrv/slapd-$DSUID/dse.ldif

Far ripartire 389ds

systemctl start dirsrv.target

Verificare lo stato del servizio

systemctl status dirsrv@$DSUID.service

Controllare che il limite "Max open files" sia effettivo:

cat /proc/`pidof ns-slapd`/limits

Directory Manager password

E' utile memorizzare la password del Directory Manager in un file accessibile solo a root:

echo "<DirectoryManagerPassword>" > /root/.ssh/dmpw
chmod 400 /root/.ssh/dmpw

389 Directory Server Console

Da questo momento e' possibile lanciare la console di gestione del Directory Server, attraverso la quale e' possibile fare ogni tipo di configurazione e gestire i dati della Directory.

Per eseguire la console:

389-console -x nologo -a http://localhost:9830/ -u "cn=Directory Manager" -y /root/.ssh/dmpw &

E possibile connettersi all'administration server da remoto installando sul proprio client la Management Console.

L'unico requisito e' la presenza di una JRE. Puo' essere installata tramite yum su linux. Dal sito http://directory.fedoraproject.org/ e' disponibile anche un msi per Windows.

Modifica dello schema

Fermare 389ds

systemctl stop dirsrv.target

Verificare lo stato del servizio

systemctl status dirsrv@$DSUID.service

Schema per supporto autofs

Attivare lo schema rfc2307bis

cd /etc/dirsrv/slapd-$DSUID/schema
cp /usr/share/dirsrv/data/10rfc2307bis.ldif .
chown ds:ds 10rfc2307bis.ldif
chmod 440 10rfc2307bis.ldif
echo > 10rfc2307.ldif
echo > 60autofs.ldif

Estensione schema per INFN-AAI e federazioni

Scaricare gli schema personalizzati INFN-AAI:

cd /etc/dirsrv/slapd-$DSUID/schema
curl http://wiki.infn.it/_media/cn/ccr/aai/doc/97schac.ldif > 97schac.ldif
curl http://wiki.infn.it/_media/cn/ccr/aai/doc/98infn.ldif > 98infn.ldif
curl http://wiki.infn.it/_media/cn/ccr/aai/doc/61edumember.ldif > 61edumember.ldif
chown ds:ds 98infn.ldif 97schac.ldif 61edumember.ldif
chmod 440 98infn.ldif 97schac.ldif 61edumember.ldif

Far ripartire 389ds

systemctl start dirsrv.target

Verificare lo stato del servizio

systemctl status dirsrv@$DSUID.service

Configurazione SSL/TLS per il Directory Server: Procedura grafica

Documentazione originale in Documentazione RedHat

E' necessario installare il certificato per il 389-DS e quello della CA che lo ha firmato, nel DB dei certificati.

Far partire la console

389-console -x nologo -a http://localhost:9830/ -u "cn=Directory Manager" -y /root/.ssh/dmpw &

Nel primo tab "Servers and Applications" espandere l’albero di sinistra, cliccare con il tasto destro su "Directory Server" e scegliere "Open"

Andare in Console → tab "Tasks" → Manager Certificates

Set Security Device Password La prima volta che viene attivato questo task, viene richiesto di inserire la password per la protezione del DB dei certificati. Impostare la password, che dovrà poi essere inserita in un file che il 389-DS legge alla partenza.

Tramite il tasto "Request…" completare la procedura di richiesta di certificato, definendo il subject ed il tipo di encryption

Inviare la richiesta di certificato alla propria CA ed installare il certificato firmato

Installare il certificato della CA che ha firmato il certificato del 389-DS

389-console -x nologo -a http://localhost:9830/ -u "cn=Directory Manager" -y /root/.ssh/dmpw &

Nel primo tab "Servers and Applications" espandere l’albero di sinistra, cliccare con il tasto destro su "Directory Server" e scegliere "Open"

Andare in Console → tab Tasks → Manager Certificates → tab CA Certs Tramite il tasto "Install" installare il certificato della CA che ha rilasciato il certificato server, di tutta la chain e delle CA che si vuole autorizzare.

Configurazione SSL/TLS per il Directory Server: Command-line

NOTA: E' necessario impostare la password del DB dei certificati di 389-ds

Fermare il 389DS

systemctl stop dirsrv.target

Verificare lo stato del servizio

systemctl status dirsrv@$DSUID.service

Impostare la password per il DB dei certificati

cd /etc/dirsrv/slapd-$DSUID
modutil -dbdir . -changepw "NSS Certificate DB"

Creare un il file con la password del DB dei certificati:

cd /etc/dirsrv/slapd-$DSUID
vi pin.txt

Inserire:

Internal (Software) Token:PASSWORD

Impostare i permessi:

chown ds:ds pin.txt
chmod 600 pin.txt

Far ripartire 389ds

systemctl start dirsrv.target

Verificare lo stato del servizio

systemctl status dirsrv@$DSUID.service

Generare una richiesta di certificato da inviare alla CA per la firma

openssl req -new -newkey rsa:2048 -nodes -keyout <FQHN>-key.pem -out <FQHN>-req.pem \
-subj "/C=IT/OU=INFN-AAI Tutorial/O=Istituto Nazionale di Fisica Nucleare/CN=<FQHN>"

Convertire il certificato con chiave privata del server in formato pkcs12 in un file temporaneo. Non è necessario impostare un password

openssl pkcs12 -export -inkey ds_server_key.pem -in ds_server_crt.pem -out /tmp/crt.p12 -nodes -name 'server-cert'

Importare il certificato con chiave privata del server nel DB di 389-ds. Verrà richiesto di inserire la password per l'accesso al "NSS Certificate DB" impostata precedentemente. La prima password che viene chiesta è quella del DB di 389-ds, la seconda è invece quella eventualmente impostata nell’export (premere semplicemente invio, se non è stata impostata la password per il p12).

cd /etc/dirsrv/slapd-$DSUID
pk12util -i /tmp/crt.p12 -d .
rm /tmp/crt.p12

NOTA: E' necessario importare nel DB dei certificati TUTTI i certificati delle CA dalle quali ci serviamo. Le istruzioni sono in Aggiornare il DB dei certificati delle CA nel 389-ds

Per importare nel db in /etc/dirsrv/slapd-$DSUID tutte le ca inserite in /etc/pki/CA/certs:

cd /etc/dirsrv/slapd-$DSUID
for f in /etc/pki/CA/certs/*.0 ; \
do echo certutil -d. -A -t 'CT,,' -i $f -n \"`openssl x509 -in $f -noout -subject -nameopt multiline | grep commonName | sed 's/.* = //'`\" ; \
done | sh

Verificare che nel "NSS Certificate DB" ci siano tutti i certificati

certutil -d /etc/dirsrv/slapd-$DSUID -L

Configurare il client ldap di default di linux (openldap) inserendo la chiave pubblica della CA nella directory /etc/pki/CA/certs/ e creare gli hash link eseguendo:

cacertdir_rehash /etc/pki/CA/certs/

Impostare la directory anche nella configurazione del client ldap:

echo "TLS_CACERTDIR /etc/pki/CA/certs/" >> /etc/openldap/ldap.conf

Abilitare l'encryption per il 389-DS

Se non già attiva, far partire la console

 389-console -x nologo -a http://localhost:9830/ -u "cn=Directory Manager" -y /root/.ssh/dmpw &

Andare in Console → tab Configuration → Encryption Abilitare le opzioni "Enable SSL for this server" e "Use this Cipher Family: RSA" Assicurarsi che in Certificate ci sia "server-cert", altrimenti uscire e rientrare nella console.

Far ripartire 389-ds:

systemctl restart dirsrv.target

Verificare lo stato del servizio

systemctl status dirsrv@$DSUID.service

Configurazione Mapping dei certificati x509

Per consentire l’autenticazione con certificati x509 è necessario configurare un mapping tra i subject dei certificati e le entry del DS.

Nel file /etc/dirsrv/slapd-$DSUID/certmap.conf troviamo la possibilità di impostare l’attributo del DS in cui 389-ds troverà il subject x509. Le sole righe non commentate dovranno essere:

certmap default         default
default:CmapLdapAttr    infnCertSubjectDN

Far ripartire 389-ds:

systemctl restart dirsrv.target

Verificare lo stato del servizio

systemctl status dirsrv@$DSUID.service

Kerberos KDC

NOTA per le esercitazioni del tutorial, scaricare la macchina virtuale nella KDC.ova nella quale è configurato un KDC Kerberos del realm INFN.IT e che contiene i principal userX (con x=0…9) con password XuserX (con x=0…9) ed i principali dei servizi LDAP

  • ldap/dsm1.infn.it@INFN.IT
  • ldap/dsm2.infn.it@INFN.IT
  • ldap/ds1.infn.it@INFN.IT

le cui chiavi sono nei file

  • dsm1.infn.it.keytab
  • dsm2.infn.it.keytab
  • ds1.infn.it.keytab

nella /root di KDC

Il server KDC ha indirizzo IP 192.168.56.20 e quindi bisogna inserire tale informazione in /etc/hosts di tutti i server

for host in dsm1 dsm2 ds1; do ssh root@$host echo "192.168.56.20 kdc.infn.it kdc" \>\> /etc/hosts ; done
ssh -A root@dsm1
scp /etc/hosts root@kdc:/etc/hosts
exit

Installare il client Kerberos sui server LDAP

for host in dsm1 dsm2 ds1; do  ssh root@$host yum -y install krb5-workstation ; done 

Copiare nei server LDAP il file di configurazione di Kerberos

ssh -A root@kdc
for host in dsm1 dsm2 ds1; do scp /etc/krb5.conf root@$host:/etc/krb5.conf ; done

Configurazione SASL / GSSAPI

Installare il pacchetto che permette l'autenticazione gssapi con 389ds:

yum install cyrus-sasl-gssapi.x86_64

Posizionato il keytab in /etc/dirsrv/slapd-$DSUID/keytab assicurarsi che solo l’utente ds possa accedervi:

scp kdc:$DSUID.infn.it.keytab /etc/dirsrv/$DSUID.keytab
chown ds /etc/dirsrv/$DSUID.keytab
chmod 400 /etc/dirsrv/$DSUID.keytab

Oppure scaricare il tar contenente tutti i keytab da qui

Aggiungere al file /etc/sysconfig/dirsrv il path al keytab:

echo "KRB5_KTNAME=/etc/dirsrv/$DSUID.keytab" >> /etc/sysconfig/dirsrv

Verificare che il keytab sia quello corretto

 kinit -k -t /etc/dirsrv/dsm1.keytab ldap/dsm1.infn.it@INFN.IT
 klist

Nella Management Console definire i SASL Mapping:

  • Nel primo tab "Servers and Applications" espandere l’albero di sinistra e cliccare con il tasto destro su "Directory Server"
  • Si aprirà la Management Console
  • Cliccare sul tab "Configuration"
  • Cliccare sul nome del server a sinistra e a destra scegliere il tab "SASL Mapping"
  • Selezionare e cancellare (tasto Delete) le regole esistenti.

Fermare 389-ds

systemctl stop dirsrv.target

Aggiungere le seguenti righe al file /etc/dirsrv/slapd-$DSUID/dse.ldif, sostituendo tutte le occorrenze di DEFAULT.REALM con il realm di default indicato nel file /etc/krb5.conf (grep default_realm /etc/krb5.conf).

dn: cn=20-krb5_people_default_realm,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: 20-krb5_people_default_realm
nsSaslMapRegexString: ^[^@]+$
nsSaslMapBaseDNTemplate: ou=people, dc=infn, dc=it
nsSaslMapFilterTemplate: (infnKerberosPrincipal=&@DEFAULT.REALM)

dn: cn=20-krb5_people_other_realm,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: 20-krb5_people_other_realm
nsSaslMapRegexString: ^.+@.+$
nsSaslMapBaseDNTemplate: ou=people, dc=infn, dc=it
nsSaslMapFilterTemplate: (infnKerberosPrincipal=&)

dn: cn=30-krb5_services_default,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: 30-krb5_services_default_realm
nsSaslMapRegexString: ^[^@]+/[^@+]+$
nsSaslMapBaseDNTemplate: ou=services, dc=infn, dc=it
nsSaslMapFilterTemplate: (infnKerberosPrincipal=&@DEFAULT.REALM)

dn: cn=30-krb5_services_other_realm,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: 30-krb5_services_other_realm
nsSaslMapRegexString: ^.+/.+@.+$
nsSaslMapBaseDNTemplate: ou=services, dc=infn, dc=it
nsSaslMapFilterTemplate: (infnKerberosPrincipal=&)

dn: cn=40-krb5_hosts_default_realm,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: 40-krb5_hosts_default_realm
nsSaslMapRegexString: ^host/[^@]+$
nsSaslMapBaseDNTemplate: ou=hosts, dc=infn, dc=it
nsSaslMapFilterTemplate: (infnKerberosPrincipal=&@DEFAULT.REALM)

dn: cn=40-krb5_hosts_other_realm,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: 40-krb5_hosts_other_realm
nsSaslMapRegexString: ^host/.+@.+$
nsSaslMapBaseDNTemplate: ou=hosts, dc=infn, dc=it
nsSaslMapFilterTemplate: (infnKerberosPrincipal=&)

Fare attenzione a lasciare una riga vuota alla fine del file

Far ripartire 389-ds.

systemctl start dirsrv.target

Configurazione plugin Kerberos Password back-end

Per compilare e configurare il plugin Kerberos5 per 389-ds eseguire le seguenti operazioni:

Installare il compilatore, i sorgenti di Kerberos e di openldap:

yum install gcc krb5-devel 389-ds-base-devel libss-devel git
  • Ottenere il codice sorgente
git clone https://baltig.infn.it/dmaselli/389ds-krb5-plugin.git
  • Compilare ed installare
cd 389ds-krb5-plugin
make clean
make
make install
  • Spegnere 389ds
systemctl stop dirsrv.target
  • Modificare il file /etc/dirsrv/slapd-$DSUID/dse.ldif aggiungendo:
dn: cn=KRB5 Bind,cn=plugins,cn=config
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
cn: KRB5 Bind
nsslapd-pluginPath: /usr/lib64/dirsrv/plugins/libkrb5-plugin.so
nsslapd-pluginInitfunc: krb5plugin_init
nsslapd-pluginType: preoperation
nsslapd-pluginEnabled: on
nsslapd-plugin-depends-on-type: database
nsslapd-pluginId: none
nsslapd-pluginVersion: none
nsslapd-pluginVendor: none
nsslapd-pluginDescription: none

Ricordarsi che l'ultima linea del file dse.ldif deve essere vuota.

  • far ripartire il Directory Service
systemctl start dirsrv.target

Affinche' il plugin crei il principal specificato in infnKerberosPrincipal in fase di bind e aggiorni la chiave Kerberos qualora venga cambiato l'attributo LDAP userPassword e' necessario per ogni REALM creare la keytable /etc/dirsrv/kadmin.keys/kadmin-REALM.keytab contenente il principal di servizio 389/admin@REALM. Tale file deve essere leggibile dall'utente ds. I messaggi di debug vengono loggati in /var/log/dirsrv/slapd-$DSUID/errors.

INFN-AAI

Pe poter ricevere la replica del ramo nazionale DC=INFN,DC=IT e del ramo locale DC=<sede>,DC=INFN,DC=IT dai master di INFN-AAI è necessario inviare al supporto di INFN-AAI aai-support@lists.infn.it un mail contenente

  • il FQDN del vostro nuovo server LDAP
  • la password dell'utente CN="Directory Manager" che sarà utilizzata per la configurazione delle repliche.

Una volta configurate, le repliche saranno effettuate con autenticazione via Certificato X.509 e quindi a configurazione effettuata potrete modificare la password di CN="Directory Manager".

NOTA BENE: Per modificare la password di CN="Directory Manager" seguire le istruzioni presenti nel wiki del 389-ds

FAQ

ERRORE "attrcrypt_unwrap_key"

"BRASARE" 389-ds

cd ~
yum remove "389*"
rm -rf /etc/dirsrv /var/lib/dirsrv /var/log/dirsrv /usr/lib64/dirsrv /usr/share/dirsrv /var/lock/dirsrv
cn/ccr/aai/howto/389ds-1.3-install-rhel7.txt · Last modified: 2017/03/23 15:34 by dmaselli@infn.it