Instalace OpenLDAP serveru ========================== Pro Unix existuje několik LDAP serverů, viz https://en.wikipedia.org/wiki/List_of_LDAP_software. Dále bude popsán OpenLDAP, který patří mezi nejpoužívanější LDAP servery v Unixu. Instalace --------- V Debianu se serverový balíček jmenuje ``slapd``, řádkové obslužné programy jsou v balíčku ``ldap-utils``. Vhodné je nainstalovat oba balíčky: .. code-block:: none :emphasize-lines: 1 apt install slapd ldap-utils Většinou se instalují i další balíčky. V průběhu instalace zadáváte i heslo správce: .. image:: media/53-ldap-install-password.png Pokud heslo správce zapomenete, tak nejjednodušší je slapd odinstalovat pomocí ``apt purge slapd`` a znovu nainstalovat. Lze ho měnit i pomocí řádkového příkazu ``ldapmodify`` a předpřipraveného LDIF souboru - je to pracné, návody najdete na internetu. Omezení služby pouze na localhost --------------------------------- Pomocí příkazu ``netstat -ltnp`` zjistíte, zda LDAP server běží a na jakých portech poslouchá: .. image:: media/53-ldap-netstat.png Na obrázku je vidět, že LDAP server (proces slapd) je spuštěn a poslouchá na portu 389 a to pro IPv4 i IPv6. Port 389 je nezabezpečený, nešifrovaný. Poslouchá na adresách 0.0.0.0 (IPv4) a :: (IPv6) – přijímá spojení z celého světa (ve škole to není úplně pravda, neboť na hranicích sítě je port 389 omezen na firewallu). Jakoukoliv komunikaci může kdokoliv odposlouchávat. U semestrálních prací postačuje, aby LDAP server poslouchal na rozhraní 127.0.0.1. Není zde žádný důvod, aby se připojovali klienti z jiných serverů. Správce se může připojit na svůj LDAP server přes SSH tunel či ho může spravovat přes webového rozhraní. Přístup z ostatních serverů by měl být pouze šifrovaný pomocí TLS na portu 636. Konfigurace TLS je mimo rozsah tohoto textu. Porty a adresy, na kterých server naslouchá se nastavují v souboru **/etc/default/slapd**. V něm najdete následující část konfigurace: .. code-block:: bash :caption: část konfiguračního souboru /etc/default/slapd # slapd normally serves ldap only on all TCP-ports 389. slapd can also # service requests on TCP-port 636 (ldaps) and requests via unix # sockets. # Example usage: # SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///" SLAPD_SERVICES="ldap:/// ldapi:///" Poslední (někomentářový) řádek upravte dle ukázky na (ldapi je rozhraní pro Linux Socket, mělo by zůstat aktivní, lze vyžít při řešení některých problémů): .. code-block:: none :emphasize-lines: 1 SLAPD_SERVICES="ldap://127.0.0.1:389/ ldapi:///" A následně server restartuje pomocí .. code-block:: none :emphasize-lines: 1 systemctl restart slapd Nyní by příkaz netstat -ltnp měl vypsat následující: .. code-block:: none tcp 0 0 127.0.0.1:389 0.0.0.0:* LISTEN 16536/slapd Tj. LDAP server naslouchá na IP adrese 127.0.0.1, na localhost. Jak zjistit jméno správce, jak zjistit baseDN? ---------------------------------------------- Je to nezvyklé - celé jméno správce (DN, jedinečné jméno správce) je v různých instalacích různé, obvykle závisí na DNS jméně serveru. Na školních serverech je to obvykle ``cn=admin,dc=vse,dc=cz``. Ale může být i odlišné. V průběhu instalace serveru se toto jméno nezobrazí. Jak ho zjistit? Celé jedinečného jméno správce začíná ``cn=admin`` následované *baseDN*. Příliš jsme si nepomohli, neboť ani *baseDN* se při instalaci nezobrazilo. V LDAP serveru může být teoreticky více organizací, více baseDN. Seznam dostupných jmenných kontextů (namingContexts) vypíšete pomocí příkazu: .. code-block:: none :emphasize-lines: 1 ldapsearch -x -b "" -s base namingContexts namingContexts: dc=vse,dc=cz V adresáři ``/etc/ldap/slapd.d/cn=config`` najděte řádek olcRootDN v souborech ``*.ldif`` .. code-block:: none :emphasize-lines: 1 grep olcRootDN *.ldif olcDatabase={0}config.ldif:olcRootDN: cn=admin,cn=config olcDatabase={1}mdb.ldif:olcRootDN: cn=admin,dc=vse,dc=cz Obvykle se najdou dva, každý v jiném souboru. ``cn=admin,cn=config`` je určen pro základní konfiguraci slapd procesu, např. pro konfiguraci LDAPS. Semestrální práce nevyžadují jeho použití. Druhý správce je obvykle v souboru ``olcDatabase={1}mdb.ldif``. A tento se používá pro vkládání objektů - organizačních jednotek, skupin či uživatelů. V naší ukázce je to ``cn=admin,dc=vse,dc=cz``. Zobrazení informací z LDAP serveru pomocí ldapsearch ---------------------------------------------------- Řádkové aplikace implicitně používají autentizační knihovnu SASL (Simple Authentication and Security Layer), viz https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer. Její hlavní přínos je (či spíše byl) v zapouzdření více variant šifrování hesla při autentizaci. V současnosti převažuje přenášení hesla v plaintextu uvnitř TLS kanálu, mnoho let jsem se nesetkal se smysluplným použitím této knihovny. U ldapsearch je nutné použití této knihovny vypnout pomocí přepínače ``–x``. Aplikace ldapsearch vyžaduje informaci, odkud má začít vyhledávat obsah, tzv. baseDN uvedené jako hodnota přepínače ``–b``. Na serverech nainstalovaných v doméně vse.cz je to obvykle ``dc=vse,dc=cz`` (vyhledání baseDN je v předchozí části), takže příkaz pro výpis vypadá takto: .. code-block:: none :emphasize-lines: 1 ldapsearch -x -b dc=vse,dc=cz # vse.cz dn: dc=vse,dc=cz objectClass: top objectClass: dcObject objectClass: organization o: vse.cz dc: vse # admin, vse.cz dn: cn=admin,dc=vse,dc=cz objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator Vypsaly se dva objekty: první je typu ``organization`` s jedinečným jménem (DN) ``dc=vse,dc=cz``. A uvnitř organizace je objekt typu ``organizationalRole`` s jedinečným jménem ``cn=admin,dc=vse,dc=cz``. ldap.conf --------- BaseDN pro řádkové příkazy lze nastavit v souboru /etc/ldap/ldap.conf .. code-block:: none BASE dc=vse,dc=cz URI ldap://127.0.0.1 Přepínač ``-x`` se ale musí zadávat stále.