Ověřování LDAP

Výhodou použití protokolu LDAP je, že všechny informace o uživatelích a skupinách mohou být uloženy na jednom serveru, který je centrálně spravován.

Nejprve je třeba do systému Linux nainstalovat rozšíření php ldap:

apt install php7.4-ldap

Chcete-li pak povolit podporu LDAP Lizmap, musíte v konfiguraci změnit metodu ověřování následujícím způsobem.

Povolení LDAP

Modul ldapdao musíte povolit tímto příkazem.

php lizmap/install/configurator.php ldapdao

Pak musíte do souboru profiles.ini.php přidat sekci [ldap:lizmapldap] s některými nastaveními, která umožní připojení k serveru ldap a vyhledávání uživatelů v ldap. Sekce již může existovat, pokud jste zkopírovali profiles.ini.php z profiles.ini.php.dist.

[ldap:lizmapldap]
hostname=localhost
port=389
adminUserDn="cn=admin,ou=lizmap,dc=com"
adminPassword=""
searchUserBaseDN="dc=XY,dc=fr"
searchUserFilter="(&(objectClass=posixAccount)(uid=%%LOGIN%%))"
bindUserDN="uid=%?%,ou=users,dc=XY,dc=fr"
searchAttributes="uid:login,givenName:firstname,sn:lastname,mail:email,organization:organization,street:street,postcode:postcode,city:city"
searchGroupFilter=
searchGroupProperty="cn"
searchGroupBaseDN=""

Podrobnosti o nastavení těchto parametrů najdete v části níže.

Chcete-li modul povolit, spusťte php lizmap/install/installer.php.

Nastavení ldap

Vlastnosti konfigurace pro uživatelská data

K ověření hesla nebo k registraci uživatele do systému Lizmap při prvním ověření potřebuje zásuvný modul některé údaje o uživateli.

Měli byste mu určit, které atributy ldap může načítat a která pole databáze budou přijímat hodnoty atributů ldap.

Tyto informace uvedete do vlastnosti searchAttributes. Jedná se o dvojici jmen <ldap attribute>:<table field>, oddělených čárkou.

V tomto příkladu, searchAttributes="uid:login,firstname,sn:lastname,mail:email,dn:":

  • hodnota ldap atributu uid bude uložena do pole login.

  • hodnota ldap atributu sn bude uložena do pole lastname.

  • hodnota ldap atributu firstname bude uložena do pole se stejným názvem, protože neexistuje žádný název pole ani :.

  • nebude existovat mapování pro vlastnost dn. Je zde : bez názvu pole. Bude načteno z ldap a může být použito do šablony bindUserDN DN. (viz níže).

Seznam možných polí v aplikaci Lizmap je následující: login, email, jméno, příjmení, organizace, telefonní číslo, ulice, PSČ, město, země. Vyžadovány jsou pouze login a email. Ostatní jsou nepovinné.

Vlastnosti konfigurace pro ověřování

Před pokusem o ověření uživatele proti ldap zásuvný modul načte vlastnosti uživatele. Používá dva konfigurační parametry: searchUserFilter a searchAttributes.

searchUserFilter by měl obsahovat dotaz ldap a zástupný znak %%LOGIN%%, který bude nahrazen přihlašovacím jménem zadaným uživatelem.

Příklad: searchUserFilter="(&(objectClass=posixAccount)(uid=%%LOGIN%%))"

Do pole searchUserBaseDN můžete také zadat základní DN pro vyhledávání. Příklad: searchUserBaseDN="ou=ADAM users,o=Microsoft,c=US".

Všimněte si, že pokud máte složitou strukturu ldap, můžete zadat několik vyhledávacích filtrů. Pro označení seznamu položek použijte []:

searchUserFilter[]="(&(objectClass=posixAccount)(uid=%%LOGIN%%))"
searchUserFilter[]="(&(objectClass=posixAccount)(cn=%%LOGIN%%))"

K ověření hesla potřebuje zásuvný modul DN (Distinguished Name) odpovídající uživateli. DN sestaví ze „šablony“ uvedené ve vlastnosti bindUserDN a z různých údajů. Těmito údaji může být zadané přihlašovací jméno nebo jeden z atributů ldap uživatele.

  • Vytvoření DN z přihlašovacího jména zadaného uživatelem: bindUserDN by mělo obsahovat DN se zástupným znakem %%LOGIN%%%, který bude nahrazen přihlašovacím jménem.

    Příklad: bindUserDN="uid=%%LOGIN%%%,ou=users,dc=XY,dc=fr". Pokud uživatel zadá jako přihlašovací jméno john.smith, bude ověření provedeno pomocí DN bindUserDN="uid=john.smith,ou=users,dc=XY,dc=fr".

    U některých LDAP může být DN jednoduchý řetězec, například e-mail. Pak byste mohli nastavit bindUserDN="%%LOGIN%%@company.local". Nebo dokonce bindUserDN="%%LOGIN%%", pokud přihlašovatel může zadat plnou hodnotu DN nebo e-mail, nebo jinak… (Pravděpodobně se nedoporučuje umožnit uživateli, aby sám zadal své plné DN, může to být bezpečnostní problém).

  • Vytvoření DN z jednoho z atributů ldap uživatele. V tomto případě se zásuvný modul nejprve zeptá adresáře ldap pomocí filtru searchUserFilter, aby získal atributy ldap uživatele. Poté můžete v poli bindUserDN zadat DN, kde budou některé hodnoty nahrazeny hodnotami některých atributů, nebo můžete zadat jedno jméno atributu odpovídající atributu, který obsahuje úplné DN uživatele.

    V prvním případě by měl bindUserDn obsahovat DN s některými %?% zástupnými znaky, které budou nahrazeny odpovídajícími hodnotami atributů. Příklad: bindUserDN="uid=%?%,ou=users,dc=XY,dc=fr"`. Zde nahradí %?% hodnotou atributu uid načtenou z atributů uživatele. Název atributu by měl být přítomen do konfigurační vlastnosti searchAttributes, a to i bez mapování polí. Příklad: ...,uid:,...`. Viz výše.

    V druhém případě stačí uvést název atributu s předponou $. Příklad: bindUserDN="$dn". Zde se vezme atribut dn načtený z vyhledávání a jeho plná hodnota se použije jako DN pro přihlášení proti serveru ldap. Je to užitečné pro některé servery LDAP, jako je někdy Active Directory, které potřebují plné DN specifické pro každého uživatele. Název atributu by měl být přítomen do konfigurační vlastnosti searchAttributes, a to i bez mapování polí. Například: ...,dn:,.... Viz výše.

Všimněte si, že pokud máte složitou strukturu ldap, můžete uvést několik šablon dn. Pro označení seznamu položek použijte []:

bindUserDN[]="uid=%?%,ou=users,dc=XY,dc=fr"
bindUserDN[]="cn=%?%,ou=users,dc=XY,dc=fr"

Konfigurace vlastností uživatelských práv

Pokud jste nakonfigurovali práva skupin do Lizmap a pokud se tyto skupiny shodují se skupinami ldap, můžete zásuvnému modulu zadat, aby uživatele automaticky zařadil do skupin aplikace podle skupin ldap uživatele.

Do pole searchGroupFilter pak zadejte dotaz ldap, který získá skupiny uživatele.

Příklad: searchGroupFilter="(&(objectClass=posixGroup)(member=%%USERDN%%))"

%%USERDN%% je nahrazeno uživatelským dn. %%LOGIN%% je nahrazen přihlašovacím jménem. Můžete také použít libovolné atributy ldap, které uvedete do searchAttributes, mezi %%. Příklad: searchGroupFilter="(&(objectClass=posixGroup)(member=%%givenName%%))"

Upozornění : Nastavení searchGroupFilter odstraní uživatele ze všech ostatních skupin aplikací, které neodpovídají skupině ldap. Pokud nechcete synchronizaci skupin, ponechte searchGroupFilter prázdný.

Pomocí searchGroupProperty je třeba uvést atribut ldap, který obsahuje název skupiny. Například: searchGroupProperty="cn"`.

Do pole searchGroupBaseDN můžete zadat také základní DN pro vyhledávání. Příklad: searchGroupBaseDN="ou=Groups,dc=Acme,dc=pt"`.

Ladění

Pokud ověřování nefunguje, můžete získat podrobnější informace o tom, co je špatně. Chcete-li tyto podrobnosti zobrazit, měli byste aktivovat sledování pro ldapdao

V souboru var/config/localconfig.ini.php nastavte tyto parametry

[logger]
auth=file

[fileLogger]
auth=auth.log

Pak se v souboru var/log/auth.log zobrazí několik zpráv z konektoru ldap. Pokud je nepotřebujete, odstraňte tato nastavení, abyste se vyhnuli obrovskému souboru auth.log.