LDAP autentifikace
Úvod
Vyžadování LDAP autentifikačního módu
Automatické vytváření uživatelů
Přihlášení přes skupinu
Řešení problémů
Okrajové případy
Úvod
LDAP (Lightweight Directory Access Protocol) je software protokol pro správu a ukládání dat na serveru, umožňuje hlavně vyhledávání společností, lidí nebo jiných zdrojů jako jsou různé záznamy nebo zařízení v síti (ať už veřejně na inernetu nebo ve firemním intranetu). LDAP je "lightweight" = odlehčená verze protokolu DAP, založena je na X.500, standardním protokolu pro služby adresářových služeb v síti. Tato odlehčená verze neobsahuje bezpečnostní prvky. Easy Project přirozeně podporuje LDAP autentifikaci (při využití jednoho nebo více adresářů). Mezi podporované adresářové služby patří Active Diretory, OpenLDAP, eDirectory, Sun Java System Directory Server, stejně jako další kompatibilní služby.
LDAP adresář je tvořen jako jednoduchá stromová struktura, sestávající z následujících úrovní:
- Kořenový adresář (start, začátek struktury), který se rozděluje do
- Států, každý z nich se větví do
- Organizací, ty se dělí na
- Firemní oddělení (divize, oddělení a podobně), ze kterých vycházejí
- Jednotlivci (lidé, složky, sdílené zdroje jako například tiskárny)
Vyžadování LDAP autentifikačního módu
Jděte do Administrace >> LDAP autentifikace. Zde najdete seznam existujících LDAP módů, včetně možností testování nebo smazání. Pro vytvoření nového módu klikněte na zelené tlačítko "Nový mód autentifikace" v pravém horním rohu.
Pro poskytnutí LDAP služby je využívána URL ke konfiguraci spojení k adresářovému serveru. Jakmile upřesníte detaily v následujících polích, bude vygenerováno požadované URL spojení:
- Jméno: libovolný název adresáře
- Host: název LDAP hostu (test server).
- Port: LDAP port (výchozí je 389).
- LDAPS: ověřte, zda potřebujete LDAPS pro přístup k adresáři
- Účet: zadejte uživatelské jméno, které je možné ověřit LDAP, nebo ponechte pole prázdné v případě, že vaše spojení je anonymní (servery Active Directory obecně neumožňují anonymní přístup)
- Heslo: heslo k příslušnému účtu
- Base DN: rozlišovací jméno v LDAP adresářovém stromu (například: dc=example,dc=com)
-
LDAP filtr: filtry lze využít pro omezení počtu uživatelů nebo skupin, které mají oprávněný přístup k alikaci. V podstatě filtr omezuje z jaké části LDAP struktury se aplikace synchronizuje. Filtr může být - a měl by být - použit i pro uživatele i pro skupiny členů, protože tím si zajistíte, že vaše aplikace nebude přetěžována uživateli nebo skupinami, které přístup zrovna nepotřebují.
Ukázky filtrů
Tyto filtry jsou napsány pro Active Directory. Chcete-li je využít jinde, například pro OpenLDAP, je potřeba upravit jejich atributy.
Takto synchronizujete uživatele ve skupině "CaptainPlanet" - může být aplikováno na filtr User Object:(&(objectCategory=Person)(sAMAccountName=*)(memberOf=cn=CaptainPlanet,ou=users,dc=company,dc=com))
Takto vyhledáte uživatele, kteří jsou členy konkrétní skupiny, přímo nebo nepřímo:
(&(objectCategory=Person)(sAMAccountName=*)(memberOf:1.2.840.113556.1.4.1941:=cn=CaptainPlanet,ou=users,dc=company,dc=com))
Pro Active Directory je důležité zadat memberOf:1.2.840.113556.1.4.1941, pokud chcete najít i tzv. vnořené skupiny (nenahrazujte číselnou posloupnost) ve skupině CaptainPlanet.
Takto najdete uživatele, kteří jsou členy některé ze 4 skupin (fire, wind, water, heart).
(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=cn=fire,ou=users,dc=company,dc=com)(memberOf=cn=wind,ou=users,dc=company,dc=com)(memberOf=cn=water,ou=users,dc=company,dc=com)(memberOf=cn=heart,ou=users,dc=company,dc=com)))
- Čas expirace (v sekundách): pokud poskytovatel LDAP neobdrží odpověď v uvedeném rozmezí, pokus o spojení bude ukončen. Údaj musí být větší než nula. Údaj rovný nebo menší než nula znamená, že není nastaven žádný časový limit, takže se na spojení bude čekat neomezeně dlouho, což může způsobit neobvyklé chování. Pokud tento údaj není přesně zadán, na odpověď se čeká až do jejího přijetí.
- Automatické vytváření uživatelů: volbou tohoto pole bude každý uživatelský účet v Easy Projectu automaticky vytvořen při prvním přihlášení do aplikace. Jinak budete muset uživatele s LDAP autentifikací ručně vytvářet, budou-li se chtít přihlásit.
Atributy (příklady):
- Přihlášení (atribut): přihlašovací jméno, kterým se uživatel bude přihlašovat a ověřovat
- Jméno (atribut): atribut pro jméno
- Příjmení (atribut): atribut pro příjmení
- E-mail (atribut): atribut pro e-mailovou adresu
Uživatelé Easy Projectu se mohou přihlašovat svým LDAP uživatelským jménem a heslem, pokud jejich účty mají nastavenou autentifikaci LDAP (ověřte nastavený "Autentifikační mód" v editaci uživatelského profilu).
Vše si můžete otestovat - vytvořte si uživatele s platným LDAP účtem, následně ho v Autentifikačním módu vyberte z rozbalovacího menu (toto pole je na kartě uživ. účtu viditelné pouze pokud je LDAP povoleno), pole pro heslo nechte prázdné. Pak se zkuste do Easy Projectu přihlásit pomocí těchto přihlašovacích detailů.
Automatické vytváření uživatelů
Zaškrtnutím volby Automatické vytváření uživatelů bude jakémukoliv LDAP uživateli při jeho prvním přihlášení do aplikace Easy Project vytvořen rovnou uživatelský účet.
Proto je potřeba upřesnit LDAP atributy (jméno, příjmení, e-mail), které budou využity při vytváření účtů.
Po zaškrtnutí pole se objeví možnosti, kde můžete nastavit, jaké role, dashboardy atd. bude mít nově vytvořený uživatel, jaký by měl být výchozí jazyk a do jakých projektů by měl být přiřazen.
Protože můžete používat více adresářů LDAP, můžete tímto způsobem automatizovat nastavení pro uživatele z různých zemí nebo z různých oddělení společnosti, aby každý uživatel měl své specifické nastavení připravené k použití.
Toto je typický příklad využití Active Directory:
Name = My Directory Host = host.domain.org Port = 389 LDAPS = no Account = MyDomain\UserName (or UserName@MyDomain depending on AD server) Password = <password> Base DN = CN=users,DC=host,DC=domain,DC=org On-the-fly user creation = yes Attributes Login = sAMAccountName Firstname = givenName Lastname = sN Email = mail
Zde je další ukázka pro Active Directory s členěným intranetem:
Name = Just a description for the auth modes page Host = DepartmentName.OrganizationName.local Port = 389 LDAPS = no Account = DepartmentName\UserName (or UserName@MyDomain depending on AD server or bind DN uid=Manager,cn=users,dc=MyDomain,dc=com) Password = <password> Base DN = DC=DepartmentName,DC=OrganizationName,DC=local On-the-fly user creation = yes Attributes Login = sAMAccountName Firstname = givenName Lastname = sN Email = mail
Nezapomeňte, že v LDAP atributech záleží na použití malých a velkých písmen.
Dynamicky navázaný účet
Výše popsané nastavení by vyžadovalo speciální účet na adresářovém serveru, který Easy Project používá k předběžné autentifikaci. Je možné použít klíčové slovo $login v poli pro login, které následně bude nahrazeno skutečným přihlašovacím jménem. Pole pro heslo je v tomto případě ponecháno prázdné:
Account: $login@COMPANY.DOMAIN.NAME
nebo
Account: company\$login
Base DN varianty
I když se zdá, že parametr Base DN je pro active Directory standardní, na naší straně Active Directory nepoužívá pro standardní uživatele kontejnery uživatelů, takže tento návod nebylo úplně jednoduché popsat. Doporučujeme také vyzkoušet použít "DC=host,DC=domain,DC=org", pokud přihlašování stále selhává.
Přihlášení přes skupinu
Pokud chcete povolit přihlašování uživatelů, kteří jsou součástí konkrétní LDAP skupiny, pak potřebné instrukce najdete níže. Postup je založen na OpenLDAP serveru a Easy Projectu.
1. (Na OpenLDAP serveru) povolte memberof overlay
1.1. vytvořte soubor:
vim ~/memberof_add.ldif
s tímto obsahem:
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof
1.2. vytvořte soubor:
vim ~/memberof_config.ldif
s tímto obsahem:
dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
1.3. Soubory nahrajte. Záleží na konfiguraci vašeho OpenLDAP, toto jsou možné návrhy:
sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f memberof_add.ldif
sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
nebo:
ldapadd -D cn=admin,cn=config -w "password" -H ldapi:/// -f memberof_add.ldif
ldapadd -D cn=admin,cn=config -w "password" -H ldapi:/// -f memberof_config.ldif
Restart není nutný, pokud se používá robot pro dynamickou aktualizaci konfigurace (slapd-config)
1.4. Zkuste vše otestovat:
ldapsearch -D cn=admin,dc=example,dc=com -x -W -b 'dc=example,dc=com' -H 'ldap://127.0.0.1:389/' '(&(objectClass=posixAccount)(memberOf=cn=ldapeasyproject,ou=groups,dc=example,dc=com))'
2. (Na OpenLDAP serveru) vytvořte skupinu. V naší ukázce máme uživatele "ldap_user_1" a skupinu "ldapeasyproject":
dn: cn=ldapeasyproject,ou=groups,dc=example,dc=com
cn: ldapeasyproject
description: Staff members allowed to login to Easy Project ticketing system
member: cn=ldap_user_1,ou=people,dc=example,dc=com
objectclass: groupOfNames
objectclass: top
Nahraďte "dn" a "cn" vhodně tak, aby detaily odpovídaly vaší DIT struktuře.
3. (V Easy Projectu) upravte LDAP autentifikační mód. V naší ukázce "ldap_user_1" je "posixAccount" objectclass.
Base DN: dc=example,dc=com
Filter: (&(objectClass=posixAccount)(memberOf=cn=ldapeasyproject,ou=groups,dc=example,dc=com))
Řešení problémů
Chcete-li využívat automatické vytváření uživatelů, ujistěte se, že Easy Project může získat z vašeho LDAP všechny požadované detailní informace, aby bylo možné vytvořit platný uživatelský účet.
Automatické vytvoření například nebude fungovat, pokud v adresáři nemáte platnou e-mailovou adresu (při pokusu o přihlášení se zobrazí chybová hláška "Neplatné uživatelské jméno/heslo").
V nových verzích Easy Projektu už toto neplatí; při vytváření uživatelského účtu systém využije všechny údaje, které může získat z LDAP serveru, a uživatele vyzve k doplnění chybějících údajů.
Ujistěte se také, že žádné z polí pro vytvoření nového uživatelského účtu není označeno jako povinné. Vyžadování povinných údajů omezuje automatické vytvoření uživatelského účtu.
Nastalé chyby v přihlašovacím systému nejsou ukládány do logů Easy Projectu, proto je řešení problémů složité. Nejvíce relevantních informací však můžete získat, pokud využijete Wireshark při spojení Easy Project serveru s LDAP serverem. Tento způsob ale funguje pouze pokud máte oprávnění ke sledování provozu sítě mezi těmito dvěma servery.
Jako další nástroj k otestování správného nastavení můžete zkusit použít 'ldapsearch'. Přihlašte se ke svému Linux serveru, kde je hostována Easy Project aplikace (případně instalujte ldaputils) a spusťte:
ldapsearch -x -b "dc=example,dc=com" -H ldap://hostname/ -D "DOMAIN\USER" -w mypassword [searchterm]
Tím získáte výpis obsahu AD, odpovídající vašemu hledání, takže snadno doplníte chybějící detaily pro LDAP konfiguraci přihlašování do Easy Projectu.
Alternativní cesty ověření funkcionality
- Zkuste odstranit LDAP filtry, které při nesprávném nastavení mohou místo vyhledání uživatele smazat.
- Vedle pole "Přihlášení (atribut)" je ikonka knihy. Kliknete-li na ní a LDAP je správně nastaveno, pak se obvyklé atributy automaticky předvyplní podle dat z LDAP serveru. Místo textových polí se zobrazí pole pro možnost případných úprav. Nicméně uživatelé zpravidla nemusí nic ručně vyplňovat. Pokud bude fungovat toto automatické doplnění, bude pravděpodobně fungovat správně i samotné přihlašování.
- V případě potíží s připojením můžete použít tlačítko "Test" u výběru LDAP serveru. Pozor, toto slouží pouze k ověření, zda se můžete připojit pomocí LDAP. Nejčastějším problémem je nevyplnění LDAP detailů uživatele, ačkoliv je způsob LDAP autentifikace nastaven. V takovém případě proběhne test v pořádku, protože spojení jako takové funguje; nelze ale přidat žádné nové uživatele, protože LDAP žádné "nevidí".
- Při testování funkčnosti LDAP je také možné nastavit počet "Dostupných uživatelů" - pokud je nastaveno 0, LDAP nevrací žádná data a je tak pravděpodobně nesprávně nastaveno. Pokud je jako počet nastaveno celé číslo, můžete na něj kliknout a upravit ho (navýšit), a pak zjistíte, co přesně LDAP zobrazuje (a podle toho upravit filtry).
Formát hodnoty Účet
Uživatelské jméno pro navázání přihlašovacích detailů může vyžadovat upřesnění ve formátu DN, spíše než ve formátu UPN (uzivatel@jehodomena.cz) nebo také jako domain\user:
# As described under #bind, most LDAP servers require that you supply a complete DN # as a binding-credential, along with an authenticator such as a password.
Proto se uživatel s uživatelským jménem ve tvarech "MyDomain\MyUserName" nebo "MyUserName@jehodomena.cz" může přihlašovat zadáním pouze Easy Project loginu ve tvaru "MyUserName".
Příliš pomalá LDAP autentifikace
Pokud autentifikace LDAP probíhá příliš pomalu a využíváte Active Directory cluster, v poli host zkuste zadat jen jeden z Active Directory fyzických serverů.
OpenDS
Využíváte-li OpenDS server, mohou nastat potíže s vyžadovanou kontrolou "Paged results", obsaženou ve vyhledávacím dotazu při hledání uživatele podle specifického atributu login. Tento typ kontroly 1.2.840.113556.1.4.319 není ve výchozím nastavení pro anonymní uživatele povolen, a to z důvodu možného vyhledání uživatele v adresáři ještě předtím, než dojde k připojení.
Přidejte globální ACI takto:
./dsconfig -h SERVER_IP -p 4444 -D cn="Directory Manager" -w PASSWORD -n set-access-control-handler-prop --trustAll --add global-aci:\(targetcontrol=\"1.2.840.113556.1.4.319\"\)\ \(version\ 3.0\;\ acl\ \"Anonymous\ control\ access\ to\ 1.2.840.113556.1.4.319\"\;\ allow\ \(read\)\ userdn=\"ldap:///anyone\"\;\)
Poznámka: Zadejte příkaz v jedné řádce a použijte znaky přesně tak, jak je uvedeno (znak \ za "acl" je považován za "\ " s mezerou).
Někteří uživatelé se nemohou přihlásit
Problém: Konkrétní jednotka uživatelů se nemůže přihlásit (chybné jméno nebo heslo), zatímco ostatním přihlášení funguje. Uživatelé se přihlašují vzdáleně, i když uživatelé z jiné jednotky při stejném způsobu přihlášení tuto chybovou hlášku nedostávají.
Řešení: Problém zřejmě nesouvisí s nesprávným nastavením, ale spíše s jinou potíží v Active Directory. Uživatelé, kteří se nemohli přihlásit, měli nastaveno ve vlastnostech v poli "Přihlásit se k" konkrétní PC (v administraci Active Directory). Po změně nastavení na volbu "Přihlásit se odkudkoliv" už by přihlášení mělo fungovat. Konkrétně musí být dané pole nastaveno: AD uživatel > Vlastnosti > Účet > Přihlásit odkudkoliv.
Potíže s přihlášením pomocí LDAPS bez platného certifikátu
Potíže mohou nastat také při přihlašování bez platného LDAPS certifikátu. V Easy Projectu je vždy LDAPS certifikát ověřován. S neplatným certifikátem se uživatelé nemohou přihlásit. Samozřejmě správné a dlouhodobé řešení je použít platný certifikát. Než ho získáte, dočasným řešením je nastavení v Administraci >> LDAP autentifikace >> vyberte příslušný auth mód.
Změňte nastavení na LDAPS (bez ověření certifikátu).
U Easy Project serverového řešení můžete toto nastavení upravit hromadně přes rails konzoli:
rails r "AuthSource.update_all(verify_peer: false)" -e production
nebo pomocí SQL:
UPDATE auth_sources set verify_peer = 0;
Okrajové případy
- Při importu nebo vytváření uživatelů automaticky podle LDAP je vhodnější nastavit výchozí uživatelský typ ve formuláři pro vytvoření, než nechat vytvořit uživatelský typ podle LDAP. Jakmile je totiž uživatel jednou vytvořen, nastavení jeho typu nelze změnit (je potřeba vytvořit nové LDAP).