====== RHEL5/6: Installazione di 389 Directory Server 1.x====== ** NOTA BENE ** Gli esempi citati in questa guida si intendono per 389 Directory Server 1.x su Scientific Linux 5 o 6 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. // ===== 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 -p 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. **Solo per macchine 64bit**, eliminare le librerie SASL a 32bit. // In questa fase potrebbe essere richiesto di eliminare come dipendenza molti pacchetti, si consiglia di accettare ed eliminarli. Sono solo delle copie con librerie a 32bit di software che rimarrà comunque nella versione a 64bit. // yum remove cyrus-sasl.i386 cyrus-sasl-devel.i386 cyrus-sasl-gssapi.i386 cyrus-sasl-plain.i386 cyrus-sasl-lib.i386 Installazione del client LDAP standard di Linux: yum install openldap-clients ===== Installazione 389-ds ===== Impostare i repository YUM EPEL ([[https://fedoraproject.org/wiki/EPEL]]). yum install yum-conf-epel Installare 389-ds: yum install 389-ds yum install java-1.7.0-openjdk.x86_64 ===== 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 chkconfig dirsrv on chkconfig dirsrv-admin on Fermare 389ds /etc/init.d/dirsrv stop 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 /etc/init.d/dirsrv start Controllare che il limite "Max open files" sia effettivo: cat /proc/`pidof ns-slapd`/limits ===== 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" 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. ===== Pulizia DIT ===== Pulire il Directory Information Tree come segue: * Nella console nel primo tab "Servers and Applications" espandere l’albero di sinistra, cliccare con il tasto destro su "Directory Server" e scegliere "Open" * Scegliere il tab "Configuration" * Sotto "Data" cliccare con il tasto sinistro e poi con il destro sul suffix esistente "dc=dN,dc=example,dc=com" ed eliminarlo ===== Schema per supporto autofs ===== Fermare 389-ds: /etc/init.d/dirsrv stop 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 Far ripartire 389-ds: /etc/init.d/dirsrv restart ===== Estensione schema per INFN-AAI e federazioni ===== Fermare 389-ds: /etc/init.d/dirsrv stop Scaricare gli schema personalizzati INFN-AAI: cd /etc/dirsrv/slapd-$DSUID/schema wget -O 97schac.ldif http://wiki.infn.it/_media/cn/ccr/aai/doc/97schac.ldif wget -O 98infn.ldif http://wiki.infn.it/_media/cn/ccr/aai/doc/98infn.ldif wget -O 61edumember.ldif http://wiki.infn.it/_media/cn/ccr/aai/doc/61edumember.ldif chown ds:ds 98infn.ldif 97schac.ldif 61edumember.ldif chmod 440 98infn.ldif 97schac.ldif 61edumember.ldif Far ripartire 389-ds: /etc/init.d/dirsrv restart ===== Configurazione SSL/TLS per il Directory Server ===== 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 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. E’ necessario impostare una password per il DB e ricordarla. La prima password (più conferma) che viene chiesta è quella del DB di 389-ds, la seconda è invece quella eventualmente impostata nell’export. cd /etc/dirsrv/slapd-$DSUID pk12util -i /tmp/crt.p12 -d . rm /tmp/crt.p12 **NOTA**: Se si vuole impostare o cambiare la password del DB dei certificati di 389-ds: 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 partire la console 389-console -x nologo -a http://localhost:9830/ -u "cn=Directory Manager" 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. **NOTA:** E' necessario importare nel DB dei certificati **TUTTI** i certificati delle CA dalle quali ci serviamo. Le istruzioni sono in [[cn:ccr:aai:howto:389ds-certificates|]] 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 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. **Abilitare l'opzione "Use SSL in Console"** Cliccare su "Save" e confermare i messaggi. Chiudere la finestra e **nell'albero di sinistra cliccare con il tasto destro su "Administration Server" e scegliere "Open" Andare nel tab Configuration -> Configuration DS Abilitare l'opzione "Secure Connection"** Fermare 389-ds: /etc/init.d/dirsrv stop **Modificare il parametro che consente l'accesso al DS solo con connessione cifrata:** sed -i 's/^nsslapd-minssf: .*$/nsslapd-minssf: 56/' /etc/dirsrv/slapd-$DSUID/dse.ldif Far ripartire 389-ds: /etc/init.d/dirsrv restart ===== 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: /etc/init.d/dirsrv restart ===== Configurazione SASL / GSSAPI ===== Installare il pacchetto che permette l'autenticazione gssapi con 389ds: yum install cyrus-sasl-gssapi.x86_64 Per configurare l’autenticazione GSSAPI su 389-ds è necessario creare un K5 keytab per il ticket di servizio "ldap": kadmin: addprinc -randkey ldap/fqdn.ds.server kadmin: ktadd -k /etc/dirsrv/slapd-$DSUID/keytab ldap/fqdn.ds.server Posizionato il keytab in /etc/dirsrv/slapd-$DSUID/keytab assicurarsi che solo l’utente ds possa accedervi: chown ds /etc/dirsrv/slapd-$DSUID/keytab chmod 400 /etc/dirsrv/slapd-$DSUID/keytab Aggiungere al file /etc/sysconfig/dirsrv il path al keytab: echo "KRB5_KTNAME=/etc/dirsrv/slapd-$DSUID/keytab ; export KRB5_KTNAME" >> /etc/sysconfig/dirsrv 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 /etc/init.d/dirsrv stop 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. /etc/init.d/dirsrv start ===== 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 service dirsrv stop * 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 service dirsrv start 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=,DC=INFN,DC=IT dai master di INFN-AAI è necessario inviare al supporto di INFN-AAI 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 [[http://directory.fedoraproject.org/wiki/Howto:ResetDirMgrPassword| wiki del 389-ds]] ===== FAQ ===== ==== ERRORE "attrcrypt_unwrap_key" ==== attrcrypt_unwrap_key: failed to unwrap key for cipher AES: https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Directory_Server/8.1/html/Administration_Guide/ssl-and-attr-encryption.html ==== "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 /etc/sysconfig/dirsrv* /etc/tmpfiles.d/dirsrv*