====== Filtrování uživatelů na straně Shibboleth SP ====== Chcete-li omezit přístup uživatelů ke zdrojům pomocí Shibboleth SP, máte možnost to udělat prostřednictvím logiky implementované ve vaší aplikaci, anebo pomocí filtru přímo v Shibboleth SP. První cesta nabízí větší flexibilitu a také komfort pro uživatele, kterého můžete přesně informovat, proč mu byl přístup odepřen. Druhá cesta je podstatně jednodušší k implementaci a v řadě případů jediná možná s ohledem na nemožnost zásahů do provozované aplikace. V obou případech se vám může hodit mít k dispozici **entity atributy**. ===== Definice entity atributů ===== Entity atributy jsou uvedeny v metadatech. V případě eduID.cz se jedná o [[:cs:tech:categories|kategorie IdP a několik dalších]]. Tyto atributy lze v Shibboleth SP mapovat stejně jako uživatelské atributy (ty o uživateli vydává IdP). K jejich použití je potřeba v ''shibboleth2.xml'' nastavit prefix pro atributy z metadat u elementu ''ApplicationDefaults'' (nebo případně ''ApplicationOverride'') takto: Řekněme, že v metadatech máme u dané entity definován následující atribut: http://eduid.cz/uri/idp-group/library Pak můžeme v ''attribute-map.xml'' definovat mapování atributů, bude vypadat takto: Ve výsledku se nám hodnota výše uvedeného atributu uloží do proměnné ''md_entityCategory''. Pokud máme zdrojové kódy aplikace SP ve svých rukou, je implementace potřebné logiky pro řízení přistupu také na nás. V opačném případě je možné využít funkcionalitu Shibboleth SP. Jak je hodnota proměnné předána aplikaci, si můžete prohlédnout na testovacím SP [[https://attributes.eduid.cz/]]. ==== Kontrola přístupu pomocí Shibboleth SP ==== Pravidla pro řízení přístupu mohou být komplexní a jsou detailně popsána v [[https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPXMLAccessControl|dokumentaci]]. Základem je v Apache definovat, ke kterému místu (''/limit/access'') chceme omezit přistup a kde jsou pravidla definující oprávnění k onomu místu (''/path/to/ac.xml''). Pro Apache řady 2.2.x je konfigurace následující: AuthType shibboleth ShibRequestSetting requireSession 1 ShibAccessControl /path/to/ac.xml Pokud používáte Apache řady 2.4.x, ''ShibAccessControl '' je nutné změnit na ''Require shib-plugin '': AuthType shibboleth ShibRequestSetting requireSession 1 require shib-plugin /path/to/ac.xml === Include filtr === V dokumentu popisujícím [[cs:tech:categories#kategorie_idp|kategorie entit v eduID.cz]] je uveden příklad include filtru, který výčtem uvádí, jaké typy uživatelů a z kterých kategorií IdP akceptujeme jako členy Research & Education komunity. **Důrazně doporučujeme při potřebě filtrování uživatelů použít tento typ filtru.** Filtr je v pseudojazyce popsán takto: {{page>cs:tech:include-filter&nofooter}} Implementace pro Shibboleth SP vypadá takto (obsah souboru ''/path/to/ac.xml''): http://eduid.cz/uri/idp-group/university ^employee@.+\.cz$ ^faculty@.+\.cz$ ^member@.+\.cz$ ^student@.+\.cz$ ^staff@.+\.cz$ http://eduid.cz/uri/idp-group/avcr ^member@.+\.cz$ http://eduid.cz/uri/idp-group/library ^employee@.+\.cz$ http://eduid.cz/uri/idp-group/hospital ^employee@.+\.cz$ http://eduid.cz/uri/idp-group/other ^employee@.+\.cz$ ^member@.+\.cz$ Pokud potřebujete jakýkoliv jiný filtr, neměl by pro Vás být problém si filtr s pomocí [[https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPXMLAccessControl|dokumentace]] sestavit. Nebudete-li si vědět rady, můžete se na nás s konkrétním dotazem obrátit -- připojíte-li nějakou část kódu, bude Vám to přičteno k dobru. :-) === Exclude filtr === Alternativou k include je exclude filtr, který není prostou inverzí include filtru. Neřeší uživatele, kteří mají současně typ affiliate a employee, a dále neřeší vznik nové kategorie IdP. V takovém případě mají přistup všichni uživatelé z nově vzniklé kategorie. **Proto nedoporučujeme použít tento typ filtrování, pokud si nejste jisti všemi vedlejšími účinky jeho nasazení.** {{page>cs:tech:exclude-filter&nofooter}} Implementace pro Shibboleth SP vypadá takto (obsah souboru ''/path/to/ac.xml''): ^alumn@.+\.cz$ http://eduid.cz/uri/idp-group/library ^employee@.+\.cz$ ==== Zpracování odmítnutí přístupu ==== V základní konfiguraci Shibboleth SP je uživatel informován pomocí klasického chybového hlášení 403 - přístup odepřen. {{:cs:tech:403-shibb.png|}} Administrátor má malé možnosti ladění bez spolupráce s uživatelem. Shibboleth SP neloguje hodnoty atributů ani v nejvyšším debug režimu. Apache do logu zaznamená pouze informaci o odepření přístupu k dokumentu: 2001:718:1:6::1:1 - uid@cesnet.cz [29/Sep/2014:16:19:46 +0200] "GET /ac2/ HTTP/1.1" 403 235 Připravili jsme jednoduchou stránku pro uživatelsky přívětivější informování o odmítnutí přístupu. K dispozici je také jednoduchý skript, který administrátorům pomůže s laděním přístupových práv. Tyto materiály jsou včetně podrobnějších informací k dispozici v [[https://github.com/CESNET/shibboleth-sp-access-control/tree/master/access_errors|repozitáři CESNETu]] na GitHubu. Nejprve je nutno výše uvedený repozitář naklonovat, případně si stáhnout odpovídající stránky ''accessError.html'' a ''accessError.php''. Pak je potřeba říci Shibbolethu, jakou stránku má zobrazit, pokud při přístupu k nějakému zdroji dojde k odmítnutí uživatele z důvodu nedostatečných práv. To se nastavuje pomocí atributu ''access'' elementu '''' v konfiguračním souboru ''shibboleth2.xml'' následujícím způsobem: Ve stránce ''accessError.html'' je potřeba se odkázat na skript, který provádí diagnostiku problému. V našem uvedeném případě je to adresa ''/my-app/diagnose'', kterou nakonfigurujeme v Apachi následovně: AuthType shibboleth ShibRequestSetting requireSession 1 require valid-user Je-li uživateli zamítnut přístup ke zdroji z důvodu nedostatečného oprávnění, je mu zobrazena stránka ''accessError.html''. {{:cs:tech:auth-failed.png|}} Z té se může po kliknutí na tlačítko "Diagnose" dostat na stránku (skript), který zaloguje proměnné prostředí (''$_SERVER'') do definovaného souboru (ve výchozím nastavení ''/tmp/shib-access-error.log''). Danému problému je také vygenerováno identifikační číslo, které se zobrazí uživateli. {{:cs:tech:auth-diag.png|}} Pomocí tohoto identifikátoru se správce dané aplikace může podívat na zalogované proměnné prostředí. Porovnáním atributů z logu a těch, které jsou vyžadovány aplikací (''ac.xml'' viz výše) lze určit, kde je problém. Diagnostická stránka a skript jsou pouze jakýsi návod, jak postupovat. Rozhodně nedoporučujeme, aby byly nasazeny bez bližšího prozkoumání, jelikož je potřeba provést ruční nastavení některých proměnných jako např. umístění logu s proměnnými prostředí nebo e-mailové adresy správce!