Archiv pro štítek: LDAP

CzechIdM a autentizace proti koncovému systému

CzechIdM nabízí svým uživatelům webové rozhraní, ve kterém mohou zažádat o přístupy nebo měnit svá hesla na koncových systémech. V článku, jehož úvod si právě čtete, se podíváme, jak je zajištěna bezpečnost přihlášení do CzechIdM, jaké možnosti přihlášení CzechIdM poskytuje a jaká je jejich technická implementace. Administrátoři CzechIdM tu rovněž naleznou návod, jak ověřovat uživatele pomocí hesla z některého koncového systému.

Pokračování textu

Migrujeme Sun DS na 389 Directory server

Stojíte-li před podobným úkolem, najdete v tomto článku pár informací jak jsme my řešili migraci pro našeho zákazníka. Cílem bylo nahradit zastaralý adresářový server Sun Directory Server (dále jen Sun DS) verze 5.2 za novější software, který bude možné dále patchovat a udržovat. V našem případě se jednalo o nahrazení dvou multi-master serverů a několik kusů pobočkových replik za nový software.
Dobrou zprávou je, že Fedora Directory server a Sun DS mají stejný původní základ. Tento fakt migrace celkově usnadnil. Špatnou zprávou je změna replikačního protokolu mezi produkty Sun DS a 389 DS. Tedy replikaci nativní cestou mezi těmito sw produkty není možné bezpečně provozovat. Co se týče operačních systémů pod vlastní adresářové servery, tak se přechází ze Solaris 10 na Linux, konkrétně na Oracle Linux verze 6.2.

Pokračování textu

Mám použít CzechIdM nebo LDAP? Oba!

V diskuzi nad způsobem správy uživatelských účtů ve větším prostředí jsem se několikrát setkal s argumente, že identity manager je přece zbytečný, když je možné nasadit „LDAP“. Zkusím tedy sepsat pár svých myšlenek na toto téma, třeba to někomu ze čtenářů pomůže.

Aby se dalo „rozhodnout“ co je lepší použít, je nutné si nejdřív ujastnit k čemu Identity Manager a „LDAP“ slouží.

Pokračování textu

„Virtuální“ atributy v adresářovém serveru

Pro uživatele používáme adresářový server (~LDAP) z CentOSu. V LDAPu máme všechny uživatelské účty jak pro maily, tak i pro upload na web případně další služby. Pro každý mailový účet jsou v LDAPu vedené informace o kvótě, kterou přebírá Dovecot. Vznikl požadavek na nastavení doménových kvót, nikoliv jen pro jednotlivé schránky. Ke každému mailovému účtu je tedy nutné přidat informaci o celkovém místě, které může doména využívat. Ke každému mailovému účtu je to kvůli dovecotu, neumí se (nebo nevím jak) zeptat vícekrát na jednotlivé kvóty. Jenže zapisovat jednu hodnotu, která se vztahuje k doméně, ke každému z mailových účtů je čuňárna. Muselo by se to při každé změně všude přepisovat. Snadnější je schopností vlastností adresářového serveru aby informace přenášel z jednoho místa – ze záznamu domény.

Pokračování textu

Změna DN v LDAP pomocí Sun IdM workflow

Tento příspěvek ukazuje, jak je možné v Sun Identity Manageru (dále jen IdM) přesunout uživatele z jednoho kontejneru do jiného v adresářovém serveru LDAP.

Zadání zní takto:
Vytvořte workflow, které dostane vstupní parametry accountId a sluzebnatext. Workflow ověří jestli dn, které se z těchto parametrů složí je shodné jako to, které získá z uživatelského view. Pokud se dn nebudou shodovat, dojde k přesunutí uživatele.

Můj postup byl následující:
Nejprve bylo nutné získat uživatelské view pro uživatele, jehož accountId jsem dostal na vstupu.


<Activity id='1' name='findDataInView'>
  <Action application='com.waveset.session.WorkflowServices'>
    <Argument name='op' value='getView'/>
    <Argument name='viewId'>
     <concat>
        <s>User:</s>
        <ref>accountId</ref>
     </concat>
    </Argument>
    <Return from='view' to='view'/>
  </Action>
  <Transition to='isDnSame'>
    <notnull>
      <ref>view</ref>
    </notnull>
  </Transition>
  <Transition to='end'/>
  <WorkflowEditor x='176' y='112'/>
</Activity>

Z view jsem dostal firstname a lastname, ze kterých jsem odstranil diakritiku pomocí funkce napsané v jazyku Java. Diakritiku jsem odstranil i ze vstupního parametru sluzebnatext. Pomocí rule jsem poté mohl zkonstruovat DN a uložit jej do proměnné dnNew (pro lepší představu: v hodnotě dnNew může být např. následující String: „cn=Jmeno Prijmeni,ou=Budova 1,o=Pobocka 1,ou=People,o=Firma,c=cz“). Dalším krokem (akcí) bylo nastavení DN, které jsem získal z view do proměnné dnFromView.

<Activity id='2' name='isDnSame'>
   <Variable name="firstname">
     <invoke name='removeDiacritic' class='cz.bcvsolutions.util.Text'>
       <ref>view.accounts[Lighthouse].firstname</ref>
     </invoke>
   </Variable>
   <Variable name="lastname">
     <invoke name='removeDiacritic' class='cz.bcvsolutions.util.Text'>        <ref>view.accounts[Lighthouse].lastname</ref>
     </invoke>
   </Variable>
   <Action id='0' name='removeDiacritic'>
     <expression>
       <setvar name='sluzebnaText'>
        <invoke name='removeDiacritic' class='cz.bcvsolutions.util.Text'>
         <ref>sluzebnaText</ref>
        </invoke>
      </setvar>
     </expression>
   </Action>
   <Action id='1' name="createDN">
     <expression>
     <setvar name='dnNew'>
       <rule name="BCV Create Dn">
         <argument name="firstname" value="$(firstname)"/>
         <argument name="lastname" value="$(lastname)"/>
         <argument name="sluzebnatext" value="$(sluzebnaText)"/>
       </rule>
     </setvar>
     </expression>
   </Action>
   <Action name="setupDNFromView">
     <set name="dnFromView">
       <ref>view.waveset.accounts[Logserver].accountId</ref>
     </set>
   </Action>
   <Transition to="moveUser">
     <neq>
       <ref>dnNew</ref>
       <ref>dnFromView</ref>
     </neq>
   </Transition>
   <Transition to='end'/>
   <WorkflowEditor x='23' y='113'/>
</Activity>

Pokud se DN liší (např. mohlo dojít ke změně jména, či přesunu pracovníka do jiné pobočky), dojde ke skoku do aktivity s názvem „moveUser“, ve které dojde k přejmenování uživatele. Je nutné udělat checkoutView, nastavit v požadovaném zdroji (Resource) novou identitu, nastavit v požadovaném zdroji příznak, že došlo ke změně a poté udělat checkinView.

<Activity name="moveUser">
   <Action id='0' application='com.waveset.session.WorkflowServices'>
     <Argument name='op' value='checkoutView'/>
     <Argument name='id' value='$(accountId)'/>
     <Argument name='type' value='RenameUser'/>
     <Return from='view' to='renameUserView'/>
   </Action>
   <Action name="changeDN">
     <expression>
       <block>
       <set name='renameUserView.accounts[Logserver].identity'>
         <ref>dnNew</ref>
       </set>
       <set name='renameUserView.resourceAccounts.currentResourceAccounts[Logserver].selected'>
         <i>1</i>
       </set>
       </block>
     </expression>
   </Action>
   <Action id='2' application='com.waveset.session.WorkflowServices'>
     <Argument name='op' value='checkinView'/>
     <Argument name='view' value='$(renameUserView)'/>
   </Action>
   <Transition to='end'/>
   <WorkflowEditor x='294' y='240'/>
</Activity>

Nyní došlo k přejmenování uživatele systému LDAP.

Zabezpečený přístup k LDAPu pomocí JNDI.

V tomto příspěvku je nastíněno, jak lze pracovat s LDAPem v jazyku java. Protože se často přenáší citlivá data je zde ukázáno, jak se připojit přez ssl.

Předpokládáme, že je na LDAP serveru povolena možnost připojovaní přez protokol LDAPS na portu 636. Navíc klient musí mít ve své keystore uložen certifikát serveru nebo jeho certifikační autority.

Pokračování textu