LSC project

yum repo install

[root@lsc ~]# vi /etc/yum.repos.d/lsc-project.repo
# cat /etc/yum.repos.d/lsc-project.repo
[lsc-project]
name=LSC project packages
baseurl=http://lsc-project.org/rpm/noarch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-LTB-project

#  rpm --import http://ltb-project.org/wiki/lib/RPM-GPG-KEY-LTB-project

# yum install lsc
Installed:
  lsc.noarch 0:2.1.3-0.el5       

dependance java

# yum install java-1.7.0-openjdk-devel

Installation   1 Paquet (+71 Paquets en dépendance)

Taille totale des téléchargements : 52 M
Taille d'installation : 191 M
Is this ok [y/d/N]: y
Installé :
  java-1.7.0-openjdk-devel.x86_64 1:1.7.0.91-2.6.2.1.el7_1                                                                                                                   

Dépendances installées :
  GConf2.x86_64 0:3.2.6-8.el7                            alsa-lib.x86_64 0:1.0.28-2.el7                                  atk.x86_64 0:2.8.0-4.el7                          
  cairo.x86_64 0:1.12.14-6.el7                           dbus-glib.x86_64 0:0.100-7.el7                                  flac-libs.x86_64 0:1.3.0-5.el7_1                  
  fontconfig.x86_64 0:2.10.95-7.el7                      fontpackages-filesystem.noarch 0:1.44-8.el7                     freetype.x86_64 0:2.4.11-10.el7_1.1               
  gdk-pixbuf2.x86_64 0:2.28.2-5.el7_1                    giflib.x86_64 0:4.1.6-9.el7                                     graphite2.x86_64 0:1.2.2-5.el7                    
  gsm.x86_64 0:1.0.13-11.el7                             gtk2.x86_64 0:2.24.22-5.el7_0.1                                 harfbuzz.x86_64 0:0.9.20-4.el7                    
  hicolor-icon-theme.noarch 0:0.12-7.el7                 hwdata.x86_64 0:0.252-7.8.el7_1                                 jasper-libs.x86_64 0:1.900.1-26.el7_0.3           
  java-1.7.0-openjdk.x86_64 1:1.7.0.91-2.6.2.1.el7_1     java-1.7.0-openjdk-headless.x86_64 1:1.7.0.91-2.6.2.1.el7_1     javapackages-tools.noarch 0:3.4.1-6.el7_0         
  jbigkit-libs.x86_64 0:2.0-11.el7                       libICE.x86_64 0:1.0.8-7.el7                                     libSM.x86_64 0:1.2.1-7.el7                        
  libX11.x86_64 0:1.6.0-2.1.el7                          libX11-common.noarch 0:1.6.0-2.1.el7                            libXau.x86_64 0:1.0.8-2.1.el7                     
  libXcomposite.x86_64 0:0.4.4-4.1.el7                   libXcursor.x86_64 0:1.1.14-2.1.el7                              libXdamage.x86_64 0:1.1.4-4.1.el7                 
  libXext.x86_64 0:1.3.2-2.1.el7                         libXfixes.x86_64 0:5.0.1-2.1.el7                                libXfont.x86_64 0:1.4.7-3.el7_1                   
  libXft.x86_64 0:2.3.1-5.1.el7                          libXi.x86_64 0:1.7.2-2.1.el7                                    libXinerama.x86_64 0:1.1.3-2.1.el7                
  libXrandr.x86_64 0:1.4.1-2.1.el7                       libXrender.x86_64 0:0.9.8-2.1.el7                               libXtst.x86_64 0:1.2.2-2.1.el7                    
  libXxf86vm.x86_64 0:1.1.3-2.1.el7                      libasyncns.x86_64 0:0.8-7.el7                                   libdrm.x86_64 0:2.4.56-2.el7                      
  libfontenc.x86_64 0:1.1.1-5.el7                        libjpeg-turbo.x86_64 0:1.2.90-5.el7                             libogg.x86_64 2:1.3.0-7.el7                       
  libpciaccess.x86_64 0:0.13.1-4.1.el7                   libpng.x86_64 2:1.5.13-5.el7                                    libsndfile.x86_64 0:1.0.25-9.el7                  
  libthai.x86_64 0:0.1.14-9.el7                          libtiff.x86_64 0:4.0.3-14.el7                                   libvorbis.x86_64 1:1.3.3-8.el7                    
  libxcb.x86_64 0:1.9-5.el7                              libxslt.x86_64 0:1.1.28-5.el7                                   lksctp-tools.x86_64 0:1.0.13-3.el7                
  mesa-libEGL.x86_64 0:10.2.7-5.20140910.el7_1.1         mesa-libGL.x86_64 0:10.2.7-5.20140910.el7_1.1                   mesa-libgbm.x86_64 0:10.2.7-5.20140910.el7_1.1    
  mesa-libglapi.x86_64 0:10.2.7-5.20140910.el7_1.1       mozjs17.x86_64 0:17.0.0-10.el7                                  pango.x86_64 0:1.34.1-5.el7                       
  pcsc-lite-libs.x86_64 0:1.8.8-5.el7                    pixman.x86_64 0:0.32.4-3.el7                                    polkit.x86_64 0:0.112-5.el7                       
  polkit-pkla-compat.x86_64 0:0.1-4.el7                  pulseaudio-libs.x86_64 0:3.0-30.el7                             python-javapackages.noarch 0:3.4.1-6.el7_0        
  python-lxml.x86_64 0:3.2.1-4.el7                       ttmkfdir.x86_64 0:3.0.9-41.el7                                  tzdata-java.noarch 0:2015g-1.el7                  
  xorg-x11-font-utils.x86_64 1:7.5-18.1.el7              xorg-x11-fonts-Type1.noarch 0:7.5-9.el7                        

Terminé !

#  java -version
java version "1.7.0_91"
OpenJDK Runtime Environment (rhel-2.6.2.1.el7_1-x86_64 u91-b00)
OpenJDK 64-Bit Server VM (build 24.91-b01, mixed mode)

Scenario ldap to ldap

ref

Preparation d'un scenario de synchro de ldap evry vers ldap de fusion mines-telecom

[root@lsc lsc]# mkdir /etc/lsc/ldapevry2ldapimt
[root@lsc lsc]# cd /etc/lsc/ldapevry2ldapimt
[root@lsc ldapevry2ldapimt]# cp /etc/lsc/logback.xml .
[root@lsc ldapevry2ldapimt]# cp /etc/lsc/lsc.xml .
[root@lsc ldapevry2ldapimt]# vim lsc.xml

a suivre ldap2ldap lsc config plus bas

installation openldap-servers

[root@lsc ldap2ldap]# yum install openldap-servers openldap-clients
Installed:
  openldap-servers.x86_64 0:2.4.39-7.el7.centos    
  openldap-clients.x86_64 0:2.4.39-7.el7.centos                   

parametrage openldap-server

recuperation de schema propres a nos usages accademiques

[root@lsc schema]# cp eduperson-200412.schema supann_2009.schema /etc/openldap/schema/

repertoire systeme où sera stocké la base ldap fusion des sources de synchro (initialement backen BDB à passer en lmdb …)

[root@lsc openldap]# vim slapd.conf # directory       /var/lib/ldap/imt/
[root@lsc openldap]# mkdir /var/lib/ldap/imt/
[root@lsc openldap]# chown ldap:ldap /var/lib/ldap/imt/

[root@lsc openldap]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/imt/DB_CONFIG
[root@lsc openldap]# chown ldap:ldap /var/lib/ldap/imt/DB_CONFIG

demarrage du serveur au boot

[root@lsc openldap]# systemctl enable slapd.service 
ln -s '/usr/lib/systemd/system/slapd.service' '/etc/systemd/system/multi-user.target.wants/slapd.service'

s'assurer que le firewall est ouver sur ldap , exemple avec firewalld

# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="157.158.0.0/16" service name="ldap" log prefix="ldap_157_158" accept'
# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="157.158.0.0/16" service name="ldaps" log prefix="ldaps_157_158" accept'
# firewall-cmd --reload

log ldap dans rsyslog

[root@lsc openldap]# vim /etc/rsyslog.conf 
[root@lsc openldap]# systemctl restart rsyslog.service 
[root@lsc openldap]# grep ldap /etc/rsyslog.conf
local4.*						/var/log/ldap.log

Premier lancement du serveur a vide

[root@lsc openldap]# ./olcgene.sh 
565ad68c /etc/openldap/slapd.conf: line 208: rootdn is always granted unlimited privileges.
565ad68c /etc/openldap/slapd.conf: line 215: rootdn is always granted unlimited privileges.
565ad68c bdb_db_open: database "dc=mines-telecom,dc=fr": db_open(/var/lib/ldap/imt//id2entry.bdb) failed: No such file or directory (2).
565ad68c backend_startup_one (type=bdb, suffix="dc=mines-telecom,dc=fr"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)

[root@lsc openldap]# ls -al /var/lib/ldap/imt/
total 19552
drwxr-xr-x 2 ldap ldap     4096 Nov 29 11:42 .
drwx------ 3 ldap ldap     4096 Nov 29 11:11 ..
-rw-r--r-- 1 ldap ldap      845 Nov 29 11:15 DB_CONFIG
-rw------- 1 ldap ldap  2801664 Nov 29 11:42 __db.001
-rw------- 1 ldap ldap 17489920 Nov 29 11:42 __db.002
-rw------- 1 ldap ldap  1884160 Nov 29 11:42 __db.003
-rw-r--r-- 1 ldap ldap     2048 Nov 29 11:42 alock
-rw------- 1 ldap ldap     8192 Nov 29 11:42 dn2id.bdb
-rw------- 1 ldap ldap    32768 Nov 29 11:42 id2entry.bdb
-rw------- 1 ldap ldap 10485760 Nov 29 11:42 log.0000000001

[root@lsc openldap]# tail -f /var/log/ldap.log 
Nov 29 11:42:20 lscimt slapd[3275]: @(#) $OpenLDAP: slapd 2.4.39 (Sep 29 2015 13:31:12) $
	mockbuild@worker1.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.39/openldap-2.4.39/servers/slapd
Nov 29 11:42:20 lscimt slapd[3276]: slapd starting


[root@lsc openldap]# ps auwx |grep slapd 
ldap      3276  0.0  2.0 429780  5504 ?        Ssl  11:42   0:00 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

ajout de la racine de l'arbre ldap

fichier ldap represantant la racine de l'arbre de fusion ldap

# cat root-mt.ldif
# mt
dn: dc=mines-telecom,dc=fr
dc: mines-telecom
objectClass: top
objectClass: domain
objectClass: domainRelatedObject
associatedDomain: mines-telecom.fr

insertion dans l'instance ldap imt

[root@lsc ~]# ldapadd -f root-mt.ldif -H ldap://localhost -D cn=admin,dc=mines-telecom,dc=fr -WEnter LDAP Password: 
adding new entry "dc=mines-telecom,dc=fr"

[root@lsc ~]# tail -f /var/log/ldap.log 
Nov 29 11:51:38 lscimt slapd[3276]: conn=1002 fd=11 ACCEPT from IP=[::1]:47596 (IP=[::]:389)
Nov 29 11:51:38 lscimt slapd[3276]: conn=1002 op=0 BIND dn="cn=admin,dc=mines-telecom,dc=fr" method=128
Nov 29 11:51:38 lscimt slapd[3276]: conn=1002 op=0 BIND dn="cn=admin,dc=mines-telecom,dc=fr" mech=SIMPLE ssf=0
Nov 29 11:51:38 lscimt slapd[3276]: conn=1002 op=0 RESULT tag=97 err=0 text=
Nov 29 11:51:38 lscimt slapd[3276]: conn=1002 op=1 ADD dn="dc=mines-telecom,dc=fr"
Nov 29 11:51:38 lscimt slapd[3276]: conn=1002 op=1 RESULT tag=105 err=0 text=
Nov 29 11:51:38 lscimt slapd[3276]: conn=1002 op=2 UNBIND
Nov 29 11:51:38 lscimt slapd[3276]: conn=1002 fd=11 closed

et de la sous branche people

[root@lsc ~]# vim people.ldif
[root@lsc ~]# ldapadd -f people.ldif -H ldap://localhost -D cn=admin,dc=mines-telecom,dc=fr -WEnter LDAP Password: 
adding new entry "ou=people,dc=mines-telecom,dc=fr"

[root@lsc ~]# cat people.ldif 
dn: ou=people,dc=mines-telecom,dc=fr
changetype: add
objectClass: organizationalUnit
objectClass: top
ou: people

contenu actuel de notre “coquille vide”

[root@lsc ~]# ldapsearch -x objectclass=* -H ldap://localhost -b dc=mines-telecom,dc=fr -D cn=admin,dc=mines-telecom,dc=fr -W dn -LLL
Enter LDAP Password: 
dn: dc=mines-telecom,dc=fr

dn: ou=people,dc=mines-telecom,dc=fr

Config LSC synchro ldap2ldap

le principe ici est de synchroniser des annuaires ldap vers un annuaire mutualisé assurant la fusion des annuaires d'etablissements dans des sous branches propres a l'etablissement .

Ici , on fait une exclusion des objectclass et attributs non indispensables a un annuaire pages blanches via le <dataset> objectclass :

[root@lscimt ldapevry2ldapimt]# cat lsc.xml
<?xml version="1.0" ?>
<lsc xmlns="http://lsc-project.org/XSD/lsc-core-2.1.xsd" revision="0">

  <connections>
    <ldapConnection>
      <name>tem-tsp</name>
      <url>ldap://ldapze.int.fr:389/dc=int,dc=fr</url>
      <username>cn=adm,dc=int,dc=fr</username>
      <password>secret</password>
      <authentication>SIMPLE</authentication>
      <referral>IGNORE</referral>
      <derefAliases>NEVER</derefAliases>
      <version>VERSION_3</version>
      <pageSize>-1</pageSize>
      <factory>com.sun.jndi.ldap.LdapCtxFactory</factory>
      <tlsActivated>false</tlsActivated>
    </ldapConnection>
    <ldapConnection>
      <name>mines-telecom</name>
      <url>ldap://127.0.0.1:389/dc=mines-telecom,dc=fr</url>
      <username>cn=adm,dc=mines-telecom,dc=fr</username>
      <password>secret</password>
      <authentication>SIMPLE</authentication>
      <referral>THROW</referral>
      <derefAliases>NEVER</derefAliases>
      <version>VERSION_3</version>
      <pageSize>-1</pageSize>
      <factory>com.sun.jndi.ldap.LdapCtxFactory</factory>
      <tlsActivated>false</tlsActivated>
    </ldapConnection>
  </connections>

  <tasks>

    <task>
      <name>user</name>
      <bean>org.lsc.beans.SimpleBean</bean>
       <ldapSourceService>
        <name>user-source-service</name>
        <connection reference="tem-tsp" />
        <baseDn>ou=people,dc=int,dc=fr</baseDn>
        <pivotAttributes>
          <string>cn</string>
        </pivotAttributes>
        <fetchedAttributes>
          <string>cn</string>
          <string>mail</string>
          <string>sn</string>
          <string>departmentNumber</string>
          <string>employeeType</string>
          <string>givenName</string>
          <string>telephoneNumber</string>
        </fetchedAttributes>
        <getAllFilter><![CDATA[(&(cn=*)(objectClass=inetOrgPerson)(uid=martin*))]]></getAllFilter>
        <getOneFilter><![CDATA[(&(objectClass=inetOrgPerson)(cn={cn}))]]></getOneFilter>
        <cleanFilter><![CDATA[(&(objectClass=inetOrgPerson)(cn={cn}))]]></cleanFilter>
    </ldapSourceService>
    <ldapDestinationService>
        <name>user-dest-service</name>
        <connection reference="mines-telecom" />
        <baseDn>ou=evry,ou=people,dc=mines-telecom,dc=fr</baseDn>
        <pivotAttributes>
          <string>cn</string>
        </pivotAttributes>
        <fetchedAttributes>
          <string>cn</string>
          <string>objectClass</string>
          <string>mail</string>
          <string>sn</string>
          <string>departmentNumber</string>
          <string>employeeType</string>
          <string>givenName</string>
          <string>telephoneNumber</string>
        </fetchedAttributes>
        <getAllFilter><![CDATA[(&(cn=*)(objectClass=inetOrgPerson))]]></getAllFilter>
        <getOneFilter><![CDATA[(&(objectClass=inetOrgPerson)(cn={cn}))]]></getOneFilter>
    </ldapDestinationService>
      <propertiesBasedSyncOptions>
        <mainIdentifier>js:"cn=" + javax.naming.ldap.Rdn.escapeValue(srcBean.getDatasetFirstValueById("cn")) + ",ou=evry,ou=people,dc=mines-telecom,dc=fr"</mainIdentifier>
        <defaultDelimiter>;</defaultDelimiter>
        <defaultPolicy>FORCE</defaultPolicy>
        <conditions>
          <create>true</create>
          <update>true</update>
          <delete>true</delete>
          <changeId>true</changeId>
        </conditions>
         <dataset>
          <name>objectclass</name>
          <policy>KEEP</policy>
          <createValues>
            <string>"inetOrgPerson"</string>
            <string>"organizationalPerson"</string>
            <string>"person"</string>
            <string>"top"</string>
          </createValues>
        </dataset>
      </propertiesBasedSyncOptions>
    </task>

  </tasks>
</lsc>

synchro

[root@lsc ldapevry2ldapimt]# lsc -s user --config /etc/lsc/ldapevry2ldapimt/
11:41:14,248 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
11:41:14,248 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/etc/lsc/ldapevry2ldapimt/logback.xml]
11:41:14,249 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
11:41:14,249 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/etc/lsc/ldapevry2ldapimt/logback.xml]
11:41:14,249 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [jar:file:/usr/lib/lsc/lsc-core-2.1.3.jar!/logback.xml]

nov. 30 11:41:14 - INFO  - Reflections took 105 ms to scan 1 urls, producing 55 keys and 115 values
nov. 30 11:41:15 - INFO  - Logging configuration successfully loaded from /etc/lsc/ldapevry2ldapimt/logback.xml
nov. 30 11:41:15 - INFO  - LSC configuration successfully loaded from /etc/lsc/ldapevry2ldapimt/
nov. 30 11:41:15 - INFO  - Connecting to LDAP server ldap://127.0.0.1:389/dc=mines-telecom,dc=fr as cn=adm,dc=mines-telecom,dc=fr
nov. 30 11:41:15 - INFO  - Connecting to LDAP server ldap://ldapze.int.fr:389/dc=int-evry,dc=fr as cn=adm,dc=int,dc=fr
nov. 30 11:41:15 - INFO  - Starting sync for user
nov. 30 11:41:15 - INFO  - # Adding new object cn=Guy BERNARD,ou=evry,ou=people,dc=mines-telecom,dc=fr for user
# Mon Nov 30 11:41:15 CET 2015
dn: cn=Jacques MARTIN,ou=evry,ou=people,dc=mines-telecom,dc=fr
changetype: add
employeeType:: UHJvZmVzc2V1ciBpbnZpdMOp
mail: jacques.martin@tem-tsp.eu
sn: MARTIN
departmentNumber: INFO
cn: Jacques MARTIN
telephoneNumber: +33161764567
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
givenName: Jacques

nov. 30 11:41:15 - INFO  - All entries: 5, to modify entries: 5, successfully modified entries: 5, errors: 0

modification d'attributs

il est possible de modifier à la volée des valeurs d'attribut pour les rendre conforme a une syntaxte et nomenclature commune .

Exemple d'ajout d'un dataset qui modifie lors de la synchro la valeur d'attribut departmentNumber , ici si à la source departmentNumber contient MCI alors le transformer en DSI :

 <dataset>
          <name>departmentNumber</name>
          <policy>FORCE</policy>
          <forceValues>
            <string><![CDATA[js:
                var department = srcBean.getDatasetFirstValueById("departmentNumber");
                if ( department == "MCI" ) { department = "DSI"; }
                department;
            ]]></string>
          </forceValues>
       </dataset>

log associés a cette synchro

nov. 30 14:45:17 - INFO  - # Updating object cn=Jacques MARTIN,ou=evry,ou=people,dc=mines-telecom,dc=fr for user
nov. 30 14:45:17 - INFO  - # Updating object cn=Albert MARTIN,ou=evry,ou=people,dc=mines-telecom,dc=fr for user
# Mon Nov 30 14:45:17 CET 2015
dn: cn=Jacques MARTIN,ou=evry,ou=people,dc=mines-telecom,dc=fr
changetype: modify
replace: departmentNumber
departmentNumber: DSI
-

# Mon Nov 30 14:45:17 CET 2015
dn: cn=Albert MARTIN,ou=evry,ou=people,dc=mines-telecom,dc=fr
changetype: modify
replace: departmentNumber
departmentNumber: DSI
-

nov. 30 14:45:17 - INFO  - All entries: 5, to modify entries: 2, successfully modified entries: 2, errors: 0

suppression

pour supprimer un compte il faut ajouter l'option

-c,--clean <arg>                      Cleaning type (one of the available
                                       tasks or 'all')

et aussi s'assurer qu'il n'y a pas zero entrée dans la source , autrement lsc par sécurité ne supprime rien .

déc. 01 14:29:00 - INFO  - Starting sync for user
déc. 01 14:29:00 - ERROR - Empty or non existant source (no IDs found)

voici l'exemple de suppression d'une entrée à la source .

[root@lsc ldap2ldapmintel]# lsc -s user -c user --config /etc/lsc/ldap2ldapmintel/
...
déc. 01 15:21:52 - INFO  - Reflections took 104 ms to scan 1 urls, producing 55 keys and 115 values
déc. 01 15:21:52 - INFO  - Logging configuration successfully loaded from /etc/lsc/ldap2ldapmintel/logback.xml
déc. 01 15:21:52 - INFO  - LSC configuration successfully loaded from /etc/lsc/ldap2ldapmintel/
déc. 01 15:21:52 - INFO  - Connecting to LDAP server ldap://127.0.0.1:389/dc=mines-telecom,dc=fr as cn=adm,dc=mines-telecom,dc=fr
déc. 01 15:21:52 - INFO  - Connecting to LDAP server ldap://ldap4.tem-tsp.eu:389/dc=int-evry,dc=fr as cn=adm,dc=int,dc=fr
déc. 01 15:21:52 - INFO  - Starting sync for user
déc. 01 15:21:52 - ERROR - Empty or non existant source (no IDs found)
déc. 01 15:21:52 - INFO  - Starting clean for user
déc. 01 15:21:52 - INFO  - # Removing object cn=Jacques MARTIN,ou=evry,ou=people,dc=mines-telecom,dc=fr for user
# Tue Dec 01 15:21:52 CET 2015
dn: cn=Jacques MARTIN,ou=evry,ou=people,dc=mines-telecom,dc=fr
changetype: delete

déc. 01 15:21:52 - INFO  - All entries: 6, to modify entries: 1, successfully modified entries: 1, errors: 0