Konfigurace popsaná v tomto návodě je specifická pro systém Debian (především konfigurace Apache), ale s mírnými úpravami lze použít i pro jiné systémy.
Konfigurace Shibboleth SP je rozdělena do dvou souboru:
mod_shib, tak i pro daemon shibdKonfigurační soubory jsou ve formátu XML a nabízí pokročilé a flexibilní možnosti nastavení. Pro začatek však doporučujeme stáhnout si zjednodušené a okomentované verze z našeho repozitáře a použít je jako šablony pro vlastní konfiguraci:
V tomto návodě jsou popsané minimální potřebné úpravy konfiguračních souborů pro úspěšné nasazení SP v rámci czTestFed. Podrobné informace o konfiguraci lze získat na stránkách Shibboleth wiki:
Poznámka: Cesty k souborům v přiložených konfiguračních souborech odpovídají baličkové instalaci z Debian Etch. Pokud máte jinou instalaci, budou se tyto cesty pravděpodobně lišit.
Jako základ konfigurace použijeme šablonu z repozitáře:
# cd /etc/shibboleth # mv shibboleth.xml shibboleth.xml.dist # wget https://cztestfed.feld.cvut.cz/doc/shibboleth.xml
Do šablony je potřeba zanést následující změny:
<Local> najdeme podelement <Host>, do jehož atributu name vyplníme hostname serveru provozující SP<Applications> nastavíme následující atributy:providerID - identifikační řetězec vašeho SP, získává se při registracihomeURL - celé URL, na kterém sídlí aplikace<CredentialsProvider> nastavit cesty ke klíči a certifikátu
shibboleth.xml
<SPConfig xmlns="urn:mace:shibboleth:target:config:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mace:shibboleth:target:config:1.0 /usr/share/xml/shibboleth/shibboleth-targetconfig-1.0.xsd" logger="/etc/shibboleth/shibboleth.logger" clockSkew="180"> <!-- Univerzalni moduly, pouzivane vsemi procesy Shibbolethu. Netreba nic menit. --> <Extensions> <Library path="/usr/lib/shibboleth/xmlproviders.so" fatal="true"/> </Extensions> <!-- Globalni nastaveni, sdilene vsemi procesy Shibbolethu. --> <Global logger="/etc/shibboleth/shibd.logger"> <!-- Zpusob komunikace mezi modulem a daemonem - UnixListener - unix socket - TCPListener - TCP port --> <UnixListener address="/var/run/shib-shar.sock"/> <!-- MemorySessionCache * cacheTimeout - za jak dlouho po expiraci je vymazana session * AATimeout - jak dlouho cekat na odpoved od AA (Attribute Authority) * AAConnectTimeout - jakou prodlevu tolerovat behem pripojeni k AA * defaultLifetime - zakladni zivotnost atributu, pokud atribut sebou nenese informaci o expiraci * strictValidity - ma se i nadale pouzivat atribut, pokud expiroval, ale nelze ho znovu ziskat? * propagateErrors - ukazovat uzivateli chyby nastale behem prenosu atributu * retryInterval - pokud je propagateErrors 'false' a dotaz se nepodari, za jak dlouho to zkusit znovu? --> <MemorySessionCache cleanupInterval="10" cacheTimeout="3600" AATimeout="30" AAConnectTimeout="15" defaultLifetime="1800" retryInterval="300" strictValidity="true" propagateErrors="false"/> </Global> <!-- Tato sekce nese informaci o integraci Shibboleth sluzeb do prostredi web serveru. Prostrednictvim elementu "Host" a "Path", lze nastavit urcite parametry pro server jako celek nebo i pro jednotlive podadresare. --> <Local logger="/etc/shibboleth/native.logger" localRelayState="true"> <RequestMapProvider type="edu.internet2.middleware.shibboleth.sp.provider.NativeRequestMapProvider"> <RequestMap applicationId="default"> <Host name="sp.domena.cz" requireSession="true" exportAssertion="true" > <!-- <Path name="test" requireSession="false" /> <Path name="info" requireSession="false" /> --> </Host> </RequestMap> </RequestMapProvider> </Local> <!-- Applications - sekce obsahuje defaultni konfiguraci pro dany SP. V pripade potreby muze obsahovat jeden nebo vice "Application" elementu, odpovidajici aplikacim, pro ktere chceme nastavit odlisne parametry. * providerID - identifikacni retezec aplikace/SP v ramci federace, ziskava se pri registraci * homeURL - URL aplikace, vyuziva se pro presmerovani --> <Applications id="default" providerId="https://sp.domena.cz/shibboleth/cztestfed/sp" homeURL="https://sp.domena.cz/" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> <!-- Sessions - nastaveni lokalni session * lifetime - maximalni zivotnost * timeout - zivotnost v pripade necinnosti * checkAddress - overuje, zda se klientska IP adresa nezmenila * consistentAddress - overuje, zda klientska IP adresa nepochazi z jine site * handlerURL - URL, na kterem spociva handler, zodpovedny za vytvareni sessions * handlerSSL - vynutit pouziti SSL * cookieProps - nastaveni session cookie --> <Sessions lifetime="7200" timeout="3600" checkAddress="true" consistentAddress="true" handlerURL="/Shibboleth.sso" handlerSSL="true" idpHistory="true" idpHistoryDays="7" cookieProps="; path=/; secure"> <!-- SessionInitiator - definuje, jak se zpracovavaji zadosti o session (tj. povoleni pristupu ke zdroji). Zadosti lze presmerovat WAYF sluzbe nebo samotnemu IdP. * Location - URL, na kterem handler posloucha * wayfURL - URL WAYF sluzby --> <SessionInitiator isDefault="true" id="czTestFed" Location="/WAYF/czTestFed" Binding="urn:mace:shibboleth:sp:1.3:SessionInit" wayfURL="https://cztestfed.feld.cvut.cz/wayf/" wayfBinding="urn:mace:shibboleth:1.0:profiles:AuthnRequest"/> <!-- AssertionConsumerService - handler zpracovavajici SAML odpovedi nebo artefakty od IdP --> <md:AssertionConsumerService Location="/SAML/POST" isDefault="true" index="1" Binding="urn:oasis:names:tc:SAML:1.0:profiles:browser-post"/> <md:AssertionConsumerService Location="/SAML/Artifact" index="2" Binding="urn:oasis:names:tc:SAML:1.0:profiles:artifact-01"/> <!-- SingleLogoutService - definuje URL, na kterem sidli "logout" handler, provadejici lokalni logout (vymazani relevantnich cookies) --> <md:SingleLogoutService Location="/Logout" Binding="urn:mace:shibboleth:sp:1.3:Logout"/> </Sessions> <!-- Errors - nastaveni chybovych hlaseni - sablony, styly, kontaktni adresa --> <Errors session="/etc/shibboleth/sessionError.html" metadata="/etc/shibboleth/metadataError.html" rm="/etc/shibboleth/rmError.html" access="/etc/shibboleth/accessError.html" ssl="/etc/shibboleth/sslError.html" supportContact="root@localhost" logoLocation="/shibboleth-sp/logo.jpg" styleSheet="/shibboleth-sp/main.css"/> <!-- CredentialUse - odkazuje na element v sekci "CredentialProvider", ktery definuje, jake klice a certifikaty pouzivat pri komunikaci a pri podepisovani SAML zprav --> <CredentialUse TLS="cztestfed" Signing="cztestfed" /> <!-- AAPProvider - definice AAP v separatnim souboru --> <AAPProvider type="edu.internet2.middleware.shibboleth.aap.provider.XMLAAP" uri="/etc/shibboleth/AAP.cztestfed.xml"/> <!-- MetadataProvider - metadata v separatnim souboru --> <MetadataProvider type="edu.internet2.middleware.shibboleth.metadata.provider.XMLMetadata" uri="/etc/shibboleth/cztestfed-metadata.xml"/> <TrustProvider type="edu.internet2.middleware.shibboleth.common.provider.ShibbolethTrust"/> <!-- Audience - identifikacni retezec federace nebo jednotliveho IdP --> <saml:Audience>urn:mace:cesnet.cz:cztestfed</saml:Audience> </Applications> <!-- CredentialsProvider - definice certifikatu a klicu --> <CredentialsProvider type="edu.internet2.middleware.shibboleth.common.Credentials"> <Credentials xmlns="urn:mace:shibboleth:credentials:1.0"> <FileResolver Id="cztestfed"> <Key> <Path>/etc/ssl/private/sp.domena.cz.pem.key</Path> </Key> <Certificate> <Path>/etc/ssl/certs/sp.domena.cz.pem.crt</Path> </Certificate> </FileResolver> </Credentials> </CredentialsProvider> </SPConfig>
Vzorový konfigurační soubor AAP.cztestfed.xml obsahuje jen základní sadu atributů. Pro detailní popis syntaxe a možnosti nastavení si přečtěte návod na stránách Shibboleth wiki.
AAP.cztestfed.xml
<AttributeAcceptancePolicy xmlns="urn:mace:shibboleth:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mace:shibboleth:1.0 /usr/share/xml/shibboleth/shibboleth.xsd"> <!-- eduPersonScopedAffiliation --> <AttributeRule Name="urn:mace:dir:attribute-def:eduPersonScopedAffiliation" Scoped="true" CaseSensitive="false" Header="Shib-EP-Affiliation" Alias="affiliation"> <!-- Filtering rule to limit values to eduPerson-defined enumeration. --> <AnySite> <Value>MEMBER</Value> <Value>FACULTY</Value> <Value>STUDENT</Value> <Value>STAFF</Value> <Value>ALUM</Value> <Value>AFFILIATE</Value> <Value>EMPLOYEE</Value> </AnySite> </AttributeRule> <!-- eduPersonAffiliation --> <AttributeRule Name="urn:mace:dir:attribute-def:eduPersonAffiliation" CaseSensitive="false" Header="Shib-EP-UnscopedAffiliation" Alias="unscoped-affiliation"> <AnySite> <Value>MEMBER</Value> <Value>FACULTY</Value> <Value>STUDENT</Value> <Value>STAFF</Value> <Value>ALUM</Value> <Value>AFFILIATE</Value> <Value>EMPLOYEE</Value> </AnySite> </AttributeRule> <!-- eduPersonPrincipalName --> <AttributeRule Name="urn:mace:dir:attribute-def:eduPersonPrincipalName" Scoped="true" Header="REMOTE_USER" Alias="user"> <!-- Basic rule to pass through any value. --> <AnySite> <Value Type="regexp">^[^@]+$</Value> </AnySite> </AttributeRule> <!-- eduPersonEntitlement --> <AttributeRule Name="urn:mace:dir:attribute-def:eduPersonEntitlement" Header="Shib-EP-Entitlement" Alias="entitlement"> <AnySite> <AnyValue/> </AnySite> </AttributeRule> <!-- cn --> <AttributeRule Name="urn:mace:dir:attribute-def:cn" Header="Shib-Person-commonName"> <AnySite> <AnyValue/> </AnySite> </AttributeRule> <!-- mail --> <AttributeRule Name="urn:mace:dir:attribute-def:mail" Header="Shib-InetOrgPerson-mail"> <AnySite> <AnyValue/> </AnySite> </AttributeRule> </AttributeAcceptancePolicy>
Po registraci budou údaje o vašem SP zaneseny do metadat, což je základní předpoklad pro to, aby se stal součástí federace. Stáhněte si aktuální metadata, umístěte je na vhodném místě (/etc/shibboleth) a ujistěte se, že máte k nim správně nastavenou cestu v konfiguračním souboru shibboleth.xml.
Je žádoucí udržovat metadata aktuální. Shibboleth SP v sobě neobsahuje funkcionalitu pro distribuci metadat. Tu je potřeba zajistit externími nástroji.
Jak zprovoznit startovací skript pro daemona shibd je popsáno v tomto návodě.
V případě, že máte knihovny Shibboleth na nestandardním místě (např. v /opt) musíte před startem Apache nastavit proměnnou LD_LIBRARY_PATH. V Debianu to lze nastavit v souboru /etc/apache2/envvars:
SHIB_HOME=/opt/shibboleth-sp LD_LIBRARY_PATH=${SHIB_HOME}/libexec:${SHIB_HOME}/lib export LD_LIBRARY_PATH
Pro zavedení modulu musíme vytvořit příslušné soubory shib.load a shib.conf v adresáři /etc/apache2/mods-available.
shib.load (Apache 2.0)
LoadModule mod_shib /opt/shibboleth-sp/libexec/mod_shib_20.so
shib.load (Apache 2.2)
LoadModule mod_shib /opt/shibboleth-sp/libexec/mod_shib_22.so
shib.conf
# Shibboleth SP 1.3 config
ShibConfig /etc/shibboleth/shibboleth.xml
ShibSchemaDir /opt/shibboleth-sp/share/xml/shibboleth
<Files *.sso>
SetHandler shib-handler
</Files>
Modul aktivujeme:
# a2enmod shib
Nastavení zabezpečení zdrojů se vždy vztahuje k danému adresáři. Parametry lze umístit do direktivy <Directory> v hlavní konfiguraci Apache (pro daný <VirtualHost>) nebo do příslušného souboru .htaccess.
Příklad jednoduchého nastavení:
AuthType shibboleth ShibRequireSession On require valid-user
Příklad autorizace na základě atributu:
AuthType shibboleth ShibRequireSession On require affiliation member
Nezapomeňte restartovat Apache po každé úpravě v jeho konfiguraci. Ujištěte se, že shibd daemon běží.