Cosign je web single sign-on (SSO) systém vyvíjen na Univerzitě v Michiganu.
Cosign obsahuje následující součástí:
Web login aplikace a jednotlivé filtry, které řídí přístup k zdrojům (aplikacím, datům, …) komunikují s daemonem prostřednictvím zabezpečeného SSL kanálu a proto každá součást potřebuje certifikát podepsaný platnou certifikační autoritou. Self-signed certifikáty nejsou podporovány. Daemon a web login aplikace můžou být provozovány na stejném serveru a tudíž můžou používat stejný certifikát. Je ovšem doporučitelné, aby z bezpečnostních důvodů na tom samém serveru, kde jsou umísteny daemon a web login, neběžel žádný cosign filtr.
Technické detaily o projektu lze získat na specializovaných wiki stránkách.
Cílová platforma je především Linux a jemu podobné unixové systémy. Co se týče filtrů, nabízí cosign více možností - filtr pro Windows IIS nebo také filtr v Javě. Zároveň, lze na základě specifikace implementovat vlastní filtr.
Následující návod platí pro Debian etch, s Apache 2.2.x a OpenSSL 0.9.8, ale pravděpodobně bude fungovat i na jiných systémech. Daemon a web login jsou v návodě instalovány na jednom serveru, ale nemusí tomu tak být.
Instalaci provedeme v adresáři /opt:
# mkdir -p /opt/cosign/src
Stáhneme a rozbalíme poslední verzi Cosign:
# cd /opt/cosign/src # wget http://www.umich.edu/~umweb/downloads/cosign-2.0.2a.tar.gz # tar xvfz cosign-2.0.2a.tar.gz
Spustíme konfigurační skript (v případě potřeby nastavte parametry tak, aby nejlépe odpovídaly vašemu systému):
# ./configure --prefix=/opt/cosign --enable-apache2=/usr/bin/apxs2 --with-cosignconf=/opt/cosign/etc/cosign.conf \ --with-filterdb=/opt/cosign/filter --with-cosigndb=/opt/cosign/daemon --with-cosigncadir=/etc/ssl/certs \ --with-cosigncert=/etc/ssl/certs --with-cosignkey=/etc/ssl/private --mandir=/usr/share/man
Spustíme kompilaci:
# make everything
Pokud kompilujete na 64-bitové architektuře, přečtěte si poznámku.
Po úspěšném dokončení kompilace provedeme instalaci:
# make install-all
Vytvoříme adresář, do kterého daemon zapisuje svoje data:
# mkdir /opt/cosign/daemon # chown cosign.cosign /opt/cosign/daemon
Po úspěšném provedení kompilace a instalace je potřeba aktivovat cosign modul. Vytvoříme soubor /etc/apache2/mods-available/cosign.load s obsahem:
LoadModule cosign_module /usr/lib/apache2/modules/mod_cosign.so
A modul aktivujeme:
# a2enmod cosign
Konfiguraci Cosign v rámci Apache umístíme na vhodném místě, což je většinou specializovaný virtuál, např. login.domena.cz:
# Nasledujici nastaveni musi byt v nechranene oblasti
CosignProtected Off
# Hostname, na kterem bezi daemon
CosignHostname login.domena.cz
# URL, kde se nachazi web login
CosignRedirect https://login.domena.cz/
# Strank, na ktere se provede redirect v pripade chyby
CosignPostErrorRedirect https://login.domena.cz/cosign/post_error.html
# Nazev sluzby a take prislusne cookie (cookie se v tomto pripade bude jmenovat 'cosign-simpleservice')
CosignService simpleservice
# Cesty ke klici, certifikatu a adresari s CA certifikaty
CosignCrypto /etc/ssl/private/login.feld.cvut.cz.pem.key /etc/ssl/certs/login.feld.cvut.cz.pem.crt /etc/ssl/certs
Alias /cosign/ "/opt/cosign/html/"
ScriptAlias /cosign-bin/ "/opt/cosign/cgi-ssl/"
Alias /services/ "/opt/cosign/services/" # stranka vyzadujici autentizaci
<Directory "/opt/cosign/services/">
CosignProtected On
</Directory>
DirectoryIndex cosign.cgi index.html
AddHandler cgi-script .cgi
<Directory /opt/cosign/cgi-ssl>
Options ExecCGI
</Directory>
Web login a daemoni cosignd a monsterd využívají společný konfigurační soubor, který by měl být dle konfigurace výše cestu /opt/cosign/etc/cosign.conf. Příklad nastavení:
set cosigncert /etc/ssl/certs/login.domena.cz.pem.crt set cosignkey /etc/ssl/private/login.domena.cz.pem.key set cosigncadir /etc/ssl/certs set cosignhost login.domena.cz set cosigndb /opt/cosign/daemon set cosignlogouturl https://login.domena.cz/ set cosignnettimeout 300 cgi login.feld.cvut.cz service idp.feld.cvut.cz 0 factor /opt/cosign/factor/auth.sh login password
Podrobnosti o konfiguraci najdete v manualových stránkách cosign.conf.
Cosign nabízí možnost externí autentizace. Nastavení autentizace v cosign.conf se provádí pomocí direktivy factor. První parametr uvácí cestu k externímu programu, který provádí autentizaci. Další parametry jsou proměnné odeslané z přihlašovacího formuláře (který lze upravit podle potřeby). Lze uvest až 5 proměnnych. Tyto proměnné se předávájí na standardní vstup externího programu, po jedné na řádce a v pořadí, v jakém jsou uvedeny v konfiguračním souboru.
V případě úspěšné autentizace musí externí program vypsat název faktoru a skončít s návratovou hodnotou 0. V opačném případě musí skončit s hodnotou 1 a může na standardní výstup zobrazit chybové hlášení. Víc informaci najdete v manualových stránkách cosign.conf.
Příklady externích skriptů pro autentizaci:
Pro pohododlí je dobré spouštět cosignd a monsterd pomocí skriptu v /etc/init.d. Lze v něm nastavit s jakými parametry se budou daemony spouštět. Následující příklady startovacích skriptů nastavují kategorii logování (syslog facility) na local1 (defaultně je to daemon) a tzv. idle timeout (po jaké době nečinnosti je session uživatele označena jako neplatná). Pro více informací ohledně možných parametrů daemonů viz man cosignd a man monster.
Pokud cosignd při startu zahlásí:
cosignd: can't find cosign service
Přidejte do /etc/services řádku:
cosign 6663/tcp
Standardně loguje Cosign v kategorii (syslog facility) daemon. Pokud, ale chceme zvláštní logy pro Cosign, můžeme pomocí příslušných spouštěcích parametrů nastavit syslog facilty pro cosignd a mosnterd (viz startovací skript) například local1 a upravit konfiguraci syslogd (/etc/syslog.conf):
local1.* /var/log/cosign/info local1.err /var/log/cosign/error
…
Filtr instalujeme všude tam, kde potřebujeme zavést centrální autentizaci pomoci Cosign infrastruktury. Z bezpečnostních důvodů se nedoporučuje provozovat chráněné aplikace na stejném serveru, na kterém běží daemon nebo web login.
Kompilace je podobná jako v případě daemona. Liší se spuštění konfiguračního skriptu:
# ./configure --enable-apache2=/usr/bin/apxs2 --prefix=/opt/cosign --with-filterdb=/opt/cosign/filter
Filter zkompilujeme a nainstalujeme:
# make # make install
Dále vytvoříme adresář, kde bude filtr ukládat svoje data:
# mkdir /opt/cosign/filter # chown www-data.www-data /opt/cosign/filter
Musíme zajistit, že Apache při startu natáhne cosign modul. Co souboru /etc/apache2/mods-available/cosign.load zapíšeme:
LoadModule cosign_module /usr/lib/apache2/modules/mod_cosign.so
A modul aktivujeme:
# a2enmod cosign
Pro adresář, který chceme chánit autentizací nastavíme na příslušném místě v konfiguraci Apache:
Alias /protected /var/www/site/protected
<Location /protected>
CosignProtected On
# Hostname, na kterem bezi daemon
CosignHostname login.domena.cz
# URL, kde se nachazi web login
CosignRedirect https://login.domena.cz/
# Strank, na ktere se provede redirect v pripade chyby
CosignPostErrorRedirect https://login.domena.cz/cosign/post_error.html
# Nazev sluzby a take prislusne cookie (cookie se v tomto pripade bude jmenovat 'cosign-protected')
CosignService protected
# Cesty ke klici, certifikatu a adresari s CA certifikaty
CosignCrypto /etc/ssl/private/server.domena.cz.pem.key /etc/ssl/certs/server.domena.cz.pem.crt /etc/ssl/certs
AuthType Cosign
Require valid-user
</Location>