LPS:IdM/midPoint

Z HelpDesk

ZČU

Dokumentace

midPoint:


Connectors:

  1. OpenICF:
  2. ConnId:
  3. Polygon (ConnId+OpenICF):

Instalace

# version of midPoint
v='3.3.1'

apt-get install -y less mc screen vim man
apt-get install -y bzip2 net-tools sudo wget
apt-get install -y openjdk-7-jdk tomcat8 apache2

# apache2
cat > /etc/apache2/conf-available/midpoint.conf <<EOF
ProxyRequests           Off
ProxyPreserveHost       On      

ProxyPass               /midpoint       http://localhost:8080/midpoint
ProxyPassReverse        /midpoint       http://localhost:8080/midpoint

RewriteEngine On
RewriteRule             ^/?$     /midpoint/ [R]
EOF

# tomcat8
echo 'JAVA_OPTS="${JAVA_OPTS} -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -Dmidpoint.home=/var/opt/midpoint/ -Djavax.net.ssl.trustStore=/var/opt/midpoint/keystore.jceks -Djavax.net.ssl.trustStoreType=jceks"' >> /etc/default/tomcat8
mkdir /var/opt/midpoint
chown tomcat8:tomcat8 /var/opt/midpoint
service tomcat8 stop

# mc (cosmetics)
mkdir -p ~/.config/mc/ || :
echo 'ENTRY "/var/opt/midpoint" URL "/var/opt/midpoint"' >> ~/.config/mc/hotlist
ln -s /usr/lib/mc/mc.csh /etc/profile.d/ || :
ln -s /usr/lib/mc/mc.sh /etc/profile.d/ || :

# midpoint
wget -nv https://evolveum.com/downloads/midpoint/${v}/midpoint-${v}-dist.tar.bz2
tar xjf midpoint-${v}-dist.tar.bz2
echo "alias repo-ninja='`pwd`/midpoint-${v}/bin/repo-ninja'" > /etc/profile.d/midpoint.sh

# initial launch without anything
a2enmod rewrite proxy proxy_http
a2dissite 000-default
a2enconf midpoint
service apache2 start
service tomcat8 start
service postgresql start

# midpoint initial deployment
cp -vp midpoint-${v}/war/midpoint.war /var/lib/tomcat8/webapps/
ln -s /usr/share/java/mysql-connector-java.jar /var/lib/tomcat8/lib/
service tomcat8 start
while ! test -f /var/opt/midpoint/config.xml; do sleep 0.5; done
wget -nv -P /var/opt/midpoint/icf-connectors http://nexus.evolveum.com/nexus/content/repositories/openicf-releases/org/forgerock/openicf/connectors/scriptedsql-connector/1.1.2.0.em3/scriptedsql-connector-1.1.2.0.em3.jar

Switch repository

PostgreSQL

pass=`dd if=/dev/random bs=9 count=1 2>/dev/null | base64`

export PATH=$PATH:/usr/lib/postgresql/9.4/bin
useradd -s /bin/bash midpoint
sudo -u postgres psql -U postgres postgres -c "CREATE USER midpoint password '${pass}'"
sudo -u postgres createdb --owner=midpoint midpoint
sudo -u midpoint psql midpoint < midpoint-${v}/config/sql/_all/postgresql-3.3-all.sql

# also for repo-ninja
apt-get install -y postgresql libpostgresql-jdbc-java
ln -s /usr/share/java/postgresql.jar midpoint-${v}/lib/
 
service tomcat8 stop

Manually edit /var/opt/midpoint/config.xml (replace ${pass}):

 <repository>
   <repositoryServiceFactoryClass>com.evolveum.midpoint.repo.sql.SqlRepositoryFactory</repositoryServiceFactoryClass>
   <embedded>false</embedded>
   <driverClassName>org.postgresql.Driver</driverClassName>
   <jdbcUsername>midpoint</jdbcUsername>
   <jdbcPassword>${pass}</jdbcPassword>
   <jdbcUrl>jdbc:postgresql://localhost/midpoint</jdbcUrl>
   <hibernateDialect>com.evolveum.midpoint.repo.sql.util.MidPointPostgreSQLDialect</hibernateDialect>
   <hibernateHbm2ddl>validate</hibernateHbm2ddl>
 </repository>

MySQL

pass=`dd if=/dev/random bs=9 count=1 2>/dev/null | base64`

# also for repo-ninja
apt-get install -y mariadb-server libmysql-java
ln -s /usr/share/java/mysql-connector-java.jar midpoint-${v}/lib/

mysql -e "CREATE DATABASE midpoint"
mysql -e "GRANT ALL ON midpoint.* TO midpoint IDENTIFIED BY '${pass}'"
mysql -u midpoint -p${pass} midpoint < midpoint-${v}/config/sql/_all/mysql-3.3-all.sql 

service tomcat8 stop

Manually edit /var/opt/midpoint/config.xml (replace ${pass}):

 <repository>
   <repositoryServiceFactoryClass>com.evolveum.midpoint.repo.sql.SqlRepositoryFactory</repositoryServiceFactoryClass>
   <embedded>false</embedded>
   <driverClassName>org.gjt.mm.mysql.Driver</driverClassName>
   <jdbcUsername>midpoint</jdbcUsername>
   <jdbcPassword>${pass}</jdbcPassword>
   <jdbcUrl>jdbc:mysql://localhost/midpoint</jdbcUrl>
   <hibernateDialect>com.evolveum.midpoint.repo.sql.util.MidPointMySQLDialect</hibernateDialect>
   <hibernateHbm2ddl>validate</hibernateHbm2ddl>
 </repository>

Common

Finaly:

service tomcat8 stop
killall java
rm -fv /var/opt/midpoint/midpoint*.db
service tomcat8 start

Stronger key

su -s /bin/bash -c "keytool -genseckey -alias strong -keystore /var/opt/midpoint/keystore.jceks -storetype jceks -storepass changeit -keyalg AES -keysize 256 -keypass midpoint" tomcat8

Manualy edit /var/opt/midpoint/config.xml:

<keystore>
  <keyStorePath>${midpoint.home}/keystore.jceks</keyStorePath>
  <keyStorePassword>changeit</keyStorePassword>
  <encryptionKeyAlias>strong</encryptionKeyAlias>
  <xmlCipher>http://www.w3.org/2001/04/xmlenc#aes256-cbc</xmlCipher>
</keystore>

Fix security policy

# maxFailedLogins: 3 -> 10
# loginTimeout: 15 -> 2
vim /var/lib/tomcat8/webapps/midpoint/WEB-INF/ctx-web-security.xml
service tomcat8 restart

Admin password

Change admin password.

  • initial user: administrator
  • initial password: 5ecr3t

Tipy

XML

Klonování konfigurace resource

Při kopírování XML nutno smazat sekci <schema></schema>, doporučeno i další.

Smazat:

  • schema
  • fetchResult
  • metadata
  • operationalState

Také smazat nebo vymyslet nové OID resourcu.

Import do git repozitáře

Připravit XML, u resourců viz také #Klonování konfigurace resource.

Vhodné mít v XML i OID (nechat midPointem vygenerovat nové nebo si něco vymyslet). Možno využít i tzv. "Smart References", např.:

<resource>
  ...
  <connectorRef type="ConnectorType">
    <filter>
      <q:equal>
        <q:path>c:connectorType</q:path>
        <q:value>org.identityconnectors.ldap.LdapConnector</q:value>
      </q:equal>
    </filter>
  </connectorRef>
  ...
</resource>

Repozitář: viz #ZČU

Mapování atributů

Matching rule

V mapování nezapomínat na matching rule, např.:

<matchingRule xmlns:mr="http://prism.evolveum.com/xml/ns/public/matching-rule-3">mr:stringIgnoreCase</matchingRule>

Jinak to začne duplikovat atributy (nové hodnoty se přidávají místo nahrazování).

Multiplicity

1) Max

Pokud je na koncovém systému víc hodnot jednoho atributu a midPoint by to měl napravovat (nahradit jednou), pak nastavit omezení v mapování:

<limitations>
 <maxOccurs>1</maxOccurs>
</limitations>

Což se vlastně hodí vždy. Není třeba, pokud je omezení již na úrovni schématu z resource adaptéru.

2) Min

Byly potíže s GUI, pokud schéma z resource adaptéru vyžadovalo minimální počet výskytu 1. Lze přerazit v mapování:

<limitations>
 <minOccurs>0</minOccurs>
</limitations>

Synchronizace

Opatrně při modifikaci účtů při rekoncilaci (="atributová rekoncilace"), může jít o náročnější operaci.

TODO: ověřit. Náročnost se IMHO týkala údržby velké skupiny v LDAPu, což SunIdM zvládá, resp. dělá v rámci ActiveSync najednou a odděleně od účtů.

Modifikaci je možno přeskočit, ale přesto nechat dělat pro live synchronizaci:

<reaction>
    <name>Linked reaction</name>
    <situation>linked</situation>
    <channel>http://midpoint.evolveum.com/xml/ns/public/provisioning/channels-3#liveSync</channel>
    <action>
        <name>Modify Action</name>
        <handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/action-3#modifyUser</handlerUri>
    </action>
</reaction>