4. Správa dat v LDAP serveru

4.1. Zadání

Potřebuji založit dvě skupiny a čtyři uživatele. Jednotlivé typy objektů se obvykle umisťují do samostatných organizačních jednotek. Tj. vytvoříme organizační jednotku Skupiny a v ní skupiny Uzivatele a Spravci. Poté vytvoříme organizační jednotku Osoby a v ní osoby s uživatelskými jmény petr, pavel, monika a martina. Pro organizační jednotku se používá třída organizationUnit. Jako rozlišující atribut v jedinečném jménu (DN) použijeme atribut ou. Organizační jednotky proto budou mít následující DN: ou=Skupiny,dc=vse,dc=cz ou=Osoby,dc=vse,dc=cz Pro skupiny se obvykle jedna z následujících dvou tříd (není vhodné je kombinovat): • posixGroup – odpovídá souboru /etc/group v unixu, povinným atributem je číslo skupiny (gidNumber). Tuto skupinu lze vytvořit před založením uživatelů. Na uživatele se odkazuje pomocí uživatelského jména, tj. LDAP server nemůže obsahovat dva uživatele se stejným uživatelským jménem a to ani v případě, že jsou v různých organizačních jednotkách. • groupOfNames – jednoduchý seznam, skupina ale musí mít aspoň jednoho člena, tj. musíte založit osobu přes založením skupiny, na uživatele se odkazuje pomocí jedinečného jména (DN), tj. lze mít ve stromě více uživatelů se stejným uživatelským jménem (musí být různých OU). Pro naše potřeby použijeme třídu posixGroup. Důvodem je případná kompatibilita s webovou aplikací phpldapadmin, která podporuje pouze tyto skupiny. Rozlišujícím atributem v jedinečném jméně je atribut cn. Vytvořené skupiny budou mít následující DN: cn=Uzivatele,ou=Skupiny,dc=vse,dc=cz cn=Spravci,ou=Skupiny,dc=vse,dc=cz Pro založení osob lze také použít více tříd. V některých případech by pro autentizaci uživatelů stačilo vytvořit osoby jako instance třídy person. Chybí zde atribut mail, který je ve třídě inetOrgPerson. Tato třída je potomkem tříd person a organizationalPerson. Pokud chcete využít LDAP i pro správu uživatelů v operačním systému , tak lze použít pro osoby třídu posixAccount, která odpovídá souboru /etc/passwd v unixu. I v této třídě chybí mail, takže se kombinuje se třídou inetOrgPerson. V našem příkladu použijeme kombinaci tříd inetOrgPerson a posixAccount. Důvodem je opět kompatibilita s webovou aplikací phpldapadmin. Bez tohoto požadavku by postačovala první třída. V jedinečném jméně (DN) se jako rozlišující atribut používá buď atribut cn (např. v Active Directory) či atribut uid (obvyklé v unixu). Důležité je u všech osob použít stejný atribut. V dalších příkladech budu používat atribut uid.

4.2. Apache Directory Studio

Apache Directory Studio (https://directory.apache.org/studio/) je plnohodnotný desktop klient pro správu LDAP serverů. Vývojovou platformou je Eclipse – aplikace využívá mnohé grafické prvky z tohoto prostředí. Aplikace je dostupná pro Windows, MacOS i unixový desktop.

4.2.1. Základní postup

  1. stáhnete a nainstalujete si Javu, postačuje JRE (běhové prostředí),

  2. stáhnete a nainstalujete Apache Directory Studio,

  3. vytvoříte SSH tunel na Váš LDAP server – lokální port 389 přesměrujete na localhost:389,

  4. spustíte Apache Directory Studio a v něm vytvoříte spojení (Connection) na localhost:389 (na vstupní bod SSH tunelu),

  5. vytvoříte organizační jednotky Osoby a Skupiny,

  6. vytvoříte skupiny Uzivatele a Spravci jako instance tříd posixGroup,

  7. vytvoříte osoby jako instance kombinace tříd inetOrgPerson a posixAccount. U každé osoby doplníte atributy mail a userPassword (pro uložení hesla použijte hašovací algoritmus se solí),

Obrázkový návod: TODO

4.3. phpLDAPadmin - webová aplikace pro správu LDAP serveru

Přiznávám, že tuto aplikaci nemám rád a to z následujících důvodů: - naposledy byla aktualizována v roce 2012, je psána pro starou verzi PHP (5.x), kompatibilita s budoucími verzemi PHP je ve hvězdách (již nyní bylo potřeba udělat patche pro spuštění pod PHP 7.0), - není jasné, zda bude v budoucích distribucích Debianu, - uživatele zakládá jako instance kombinace tříd posixAccount a inetOrgPerson. Pro mnoho aplikací je vyplňování povinných atributů z posixAccount zbytečné. - ve standardní konfigurace přejmenovávání názvy některých atributů (např. místo uid používá “user name“ či místo mail označení email), takže vznikají zmatky při konfiguraci propojení aplikace na LDAP.

4.3.1. Základní postup

  1. nainstalovat a zprovoznit php, nejlépe php-fpm,

  2. nainstalovat balíček phpldapadmin apt-get install phpldapadmin

  3. upravit konfiguraci /etc/phpldapadmin/config.php

  4. upravit konfiguraci pro apache (pouze přes https, dostupné pouze z omezené sítě),

  5. přihlásit se přes webové rozhraní

  6. vytvořit organizační jednotky Osoby a Skupiny,

  7. vytvořit skupiny Uzivatele a Spravci jako instance tříd posixGroup,

  8. vytvořit osoby,

4.3.2. Instalace PHP

Toto je/bude popsáno jinde. Ověřte si, že Vám na webu funguje php.

4.3.3. Instalace balíčku phpldapadmin

Příkaz je jednoduchý: apt install phpldapadmin Obvykle se přitom nainstalují i některé vyžadované balíčky, např. modul php-ldap. Někdy se nenainstaluje modul php-xml, a proto doporučuji ještě příkaz: apt install php-xml

4.3.4. Úprava konfigurace /etc/phpldapadmin/config.php

Konfigurační soubor /etc/phpldapadmin/config.php obsahuje mnoho komentářů, takže by neměl být problém ho upravit. Je potřeba minimálně specifikovat spojení na Váš LDAP server. V konfiguračním souboru je to přibližně od řádky 280. Je potřeba nastavit: - server, name – popisek serveru, může být libovolný, - server, host – IP adresa či URL LDAP serveru, nastavte 127.0.0.1 - server, base – kde začít vyhledávat (baseDN), nastavte dc=vse,dc=cz, konkrétní hodnota závisí na instalaci LDAP serveru, - login, auth_type – phpldapadmin podporuje více způsobů autentizace, použijte hondotu session, - login, bind_id – defaultní uživatelské jméno pro správce. Není nutné, ale je to pohodlné. Nastavte cn=admin,dc=vse,dc=cz. Hodnoty jsem nastavil následovně (jsou vynechány komentáře): $servers->setValue(‚server‘,‘name‘,‘LDAP na bis133.vse.cz); $servers->setValue(‚server‘,‘host‘,‘127.0.0.1‘); $servers->setValue(‚server‘,‘base‘,array(‚dc=vse,dc=cz‘)); $servers->setValue(‚login‘,‘auth_type‘,‘session‘); $servers->setValue(‚login‘,‘bind_id‘,‘cn=admin,dc=vse,dc=cz‘);

4.3.5. Úprava konfigurace pro apache

Vygenerovaná konfigurace do apache pro phpldapadmin je z bezpečnostního hlediska velmi problematická. Aplikace je dostupná přes nešifrované http (zkuste http://146.102.54.nn/phpldapadmin/). I po přesunutí na https je zde problém – je dostupná z celého světa a skrz anonymní přihlášení lze vypsat všechny založené uživatele. Proto je potřeba omezit přístup pouze z vybraných adres, např. ze školní sítě. Konfiguraci je v souboru /etc/apache2/conf-available/phpldapadmin.conf, což je link na soubor /etc/phpldapadmin/apache.conf. Konfigurace je po instalaci automaticky zahrnuta do všech virtualhost, neboť existuje link /etc/apache2/conf-enabled/phpldapadmin.conf. Tuto sdílenou konfiguraci vypněte pomocí příkazu

a2disconf phpldapadmin

ale stačí i prosté smazání linku /etc/apache2/conf-enabled/phpldapadmin.conf Do souboru s konfigurací virtualhost pro https (mohl by se jmenovat /etc/apache2/sites-enabled/000-default-le-ssl.conf) vložte následující (nutno vložit dovnitř definice virtualhost):

Alias /phpldapadmin /usr/share/phpldapadmin/htdocs <Directory /usr/share/phpldapadmin/htdocs/>

DirectoryIndex index.php Options +FollowSymLinks AllowOverride None Require ip 146.102.0.0/16

</Directory>

Zkontrolujte syntaxi (příkaz apache2ctl configtest) a nahrajte novou konfiguraci (systemctl reload apache2).

4.3.6. Přihlášení k phpldapadmin

TODO: snímek přihlašovací obrazovky, upozornit na anonymní bind

4.3.7. Vytvoření organizačních jednotek

V Create new entry zvolíte typ „Generic: Organisational Unit“ TODO snímek

4.3.8. Vytvoření skupin

Zvolte organizační jednotku Skupiny. A v ní zvolte v menu „Create a child entry“. Vyberte typ „Generic: Posix group“, následně zadejte jméno skupiny. TODO snímek

4.3.9. Vytvoření uživatelů

V organizační jednotce Osoby přes volbu „Create a child entry“ vytvořte uživatele pomocí typu „Generic: User Account“. Následně vyplňte jednotlivé atributy: - common name (cn) – zde vložte uživatelské jmén, - First name (givenName), - GID number (gidNumber), - Home directory (homeDirectory), - Login shell (loginShell) – vyberte libovolný, - Last name (sn) - Password (userPassword) – zvolte typ ssha - UID number (uidNumber) - User ID (uid) – zde též vložte uživatelské jméno, Ke každé osobě po založení ještě doplňte atribut Email (mail) přes volbu Add new attribute. TODO snímek