LemonLDAP::NG
LemonLDAP::NG on Single Sign On (SSO) sovellus ja se on avointa lähdekoodia. Tätä käytetään hallinnoimaan kirjautumisia verkkosivuilla esimerkiksi keskitetysti. Voit yhdistää tähän eri salasana tietokantoja, esimerkiksi LDAP.
Tutustu täältä: https://lemonldap-ng.org/
Sisällysluettelo
Asennus
Asenna dependerit
sudo apt install libmouse-perl libnet-ldap-perl libcache-cache-perl libdbi-perl perl-modules libwww-perl libcache-cache-perl libxml-simple-perl libsoap-lite-perl libhtml-template-perl libregexp-assemble-perl libregexp-common-perl libjs-jquery libxml-libxml-perl libcrypt-rijndael-perl libio-string-perl libxml-libxslt-perl libconfig-inifiles-perl libjson-perl libstring-random-perl libemail-date-format-perl libmime-lite-perl libcrypt-openssl-rsa-perl libdigest-hmac-perl libdigest-sha-perl libclone-perl libauthen-sasl-perl libnet-cidr-lite-perl libcrypt-openssl-x509-perl libauthcas-perl libtest-pod-perl libtest-mockobject-perl libauthen-captcha-perl libnet-openid-consumer-perl libnet-openid-server-perl libunicode-string-perl libconvert-pem-perl libmoose-perl libplack-perl libauthen-captcha-perl liblasso-perl
Lisää APT-source.listiin
sudo nano /etc/apt/sources.list.d/lemonldap-ng.list
tiedostoon
# LemonLDAP::NG repository deb https://lemonldap-ng.org/deb stable main deb-src https://lemonldap-ng.org/deb stable main
Lataa GPG allekirjoitus avain ja asenna se
wget https://lemonldap-ng.org/_media/rpm-gpg-key-ow2 sudo apt-key add rpm-gpg-key-ow2
Asenna lemonldap-ng paketti
sudo apt update & sudo apt install lemonldap-ng
Jos käytät Nginx asenna lisäksi
sudo apt install lemonldap-ng-fastcgi-server
Muokkaa oletusdomain omaksi ow2.orgiksi. muuta tämä omaksi domainiksi. Ja aja sitten tämä komentorivillä. Tämä päivittää kaikki konfiguraatioihin oma domain nimesi.
sudo sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.js /var/lib/lemonldap-ng/test/index.pl
Konfiguroi hosts
echo "127.0.0.1 reload.example.com" >> /etc/hosts
Konfiguroi nimipalvelimellesi auth ja manager alidomainit osoittamaan LemonLDAP palvelinta.
Päivitys 1.9 -> 2.0-versioon
Tämä on iso päivitys LemonLDAPissa, joten tee varmuuskopio tietokannoista ja konfiguraatiosta. Tässä päivityksessä hajoaa useita komponentteja ja moni asia tulee tehdä uudelleen eli varmuuskopiointi on hyvä juttu.
Valmistautuminen:
- Päivitä palvelimen kaikki paketit uusimpaan versioon
- Määritä /etc/apt/sources.list.d/lemonldap-ng.list 2.0-versio 1.9 tilalle. Mikäli käytät stablea aikaisemmin niin 2.0 on nykyisin stable (vakaa).
- Tarkista muutokset mitä muuttuu täältä: https://lemonldap-ng.org/documentation/2.0/upgrade
Mitä minulla meni rikki?
- Teema -> Suosittelen vaihtamaan teema mikäli muokattu bootstrap:iksi, joka alkuperäinen teema. Teema hakemiston sijainti nimittäin muuttui tässä päivityksessä.
- Nginx TLS-konfiguraatio piti tehdä uusiksi sillä paljon muutoksia tapahtui tässä päivityksessä.
- Palautin lisäksi konfiguraation takaisin ja poistin kaikki sessionit taulusta.
Päivitysprosessi:
sudo apt dist-upgrade
Mikäli olet muokannut Nginx / Apache2-konfiguraatiota, niin anna päivitysohjelman yliajaa ne ja päivitä niihin sen jälkeen muutoksesi.
Konfigurointi
Nginx
Asensithan lemonldap-ng-fastcgi-server paketin?
Paketti automaattisesti luo symlinkit sites-available hakemistoon Nginxään mutta otaaksesi käyttöön tee toinen symlinkki sites-enabled hakemistoon
sudo ln -s /etc/nginx/sites-available/handler-nginx.conf /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/manager-nginx.conf /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/portal-nginx.conf /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/test-nginx.conf /etc/nginx/sites-enabled/
Ja lataa Nginx konfiguraatio uudelleen
sudo service nginx reload
Konfigurointi Backend
Asenna ensin MySQL moduuli
sudo apt install libdbd-mysql-perl
Oletuksena LemonLDAP tallentaa konfiguraatiot tiedostoon, JSON muodossa. Jos olet tekemässä Multi-Node instanssia, suosittelen siirtämään tietokannan esimerkiksi MySQL:ään.
- Luo tietokanta lemonldap
- Tietokantaan käyttöoikeus käyttäjälle lemonldap.
Luo tietokantaan taulu lmconfig:
CREATE TABLE lmConfig (
cfgNum INT(11) NOT NULL,
FIELD VARCHAR(255) NOT NULL DEFAULT '',
VALUE longblob,
PRIMARY KEY (cfgNum,FIELD)
);
Luo lemonldap-ng.ini tiedostosta kopio
sudo cp /etc/lemonldap-ng/lemonldap-ng.ini /tmp/lemonldap-ng.ini
Avaa tämä kopio /etc/lemonldap-ng/lemonldap-ng.ini.new ja konfiguroi sinne tietokantapalvelimesi asetukset.
[configuration] type = RDBI dbiChain = DBI:mysql:database=lemonldap-ng;host=1.2.3.4 dbiUser = lemonldap dbiPassword = password ; optional dbiTable = mytablename
Kommentoi pois "type=File" konfiguraatiosta. Tallenna ja sulje.
Aja seuraava komento siirtäessä vanhan konfiguraation uudelle backendille.
sudo /usr/share/lemonldap-ng/bin/convertConfig --current /etc/lemonldap-ng/lemonldap-ng.ini /tmp/lemonldap-ng.ini
Sitten siirrä varmuuskopioi vanha konfigurointi tiedosto
sudo mv /etc/lemonldap-ng/lemonldap-ng.ini /etc/lemonldap-ng/lemonldap-ng.ini.bak
ja korvaa uudella
sudo mv /tmp/lemonldap-ng.ini /etc/lemonldap-ng/lemonldap-ng.ini
Käynnistä Apache2 / lemonldap-ng-fastcgi-server uudelleen
sudo service apache2 restart
sudo service lemonldap-ng-fastcgi-server restart
Webhallinta (manager)
Siirry manageriin jatkaaksesi konfigurointia.
Kirjaudu oletustunnuksella dwho
ja salasanalla dwho
Konfiguroi SSO:n eväste, verkkotunnus ja portaalin osoite
- Portal URL on verkko-osoite jonne ohjataan kaikki todennuspyynöt. Se konfiguroidaan
General Parameters -> Portal -> URL
alta. - Evästeet ovat todella tärkeitä ja sielä pitää olla oikea verkkotunnus käytössä. Voit sallia evästeiden käytön useamman verkkotunnuksen kanssa. Asetukset löytyy
General Parameters -> Cookies
alta.
SAML käyttöön
Otat käyttöön Managerista: General parameters -> SAML alta.
Istunnot MySQL/MariaDB:hen
Oletuksena LemonLDAP tallentaa istunnot tiedostoon. Tämä tekee vaikeammaksi toteuttaa HA-ratkaisua jossa olisi useita LemonLDAP istansseja. Kun tallennat istunnot tietokantaan kuten MySQL, voit synkronoida nämä istunnot helpommin palvelimiesi välillä.
Luo lemonldap tietokantaan taulu sessions
CREATE TABLE sessions (
id VARCHAR(64) NOT NULL PRIMARY KEY,
a_session text,
_whatToTrace VARCHAR(64),
_session_kind VARCHAR(15),
_utime BIGINT,
ipAddr VARCHAR(15)
);
CREATE INDEX uid1 ON sessions (_whatToTrace) USING BTREE;
CREATE INDEX _s1 ON sessions (_session_kind);
CREATE INDEX _u1 ON sessions (_utime);
CREATE INDEX ip1 ON sessions (ipAddr) USING BTREE;
CREATE TABLE psessions (
id CHAR(32) NOT NULL PRIMARY KEY,
a_session text
);
Tietokantaan luo käyttäjätili jolla kaikki oikeudet tähän tietokantaan.
Sitten Managerissa General Parameters -> Sessions -> Sessions Storage
määritä sinne seuraavat asetukset MySQLää varten. DataSource ja Lock DataSource voit käyttää samoja tunnuksia ja salasanoja. Index riviä ei tule Persistent session ollenkaan.
DataSource dbi:mysql:dbname=lemonldap;host=127.0.0.1 UserName lemonldap Password lemonldap_password TableName sessions LockDataSource dbi:mysql:dbname=lemonldap;host=127.0.0.1 LockUserName lemonldap LockPassword lemonldap_password Index _whatToTrace ipAddr _session_kind _utime
Muuta sitten Apache::Session modules arvoksi: Apache::Session::Browseable::MySQL
ja tallenna konfiguraatio. Jos sinulla ei ole Session::Browseable::MySQL
asennettuna, asenna se cpanin avulla.
sudo cpan install Session::Browseable::MySQL
Teimme lisäksi Persistent sessions konfiguraation taulun, määritä vastaavanlainen tietokanta-asetukset manageriin.
Todennusmoduulit
Todennusmoduulien (eng. Authentication module) voit käyttää LemonLDAPia kirjautumaan esimerkiksi LDAPin, Googlen (OpenID Connect), Facebookin ja Twitterin kautta.
Lisää todennusmoduulit managerista:
General Parameters -> Authentication parameters
- Valitse Authenticatin module alta mitä moduulia haluat käyttää. Lisäksi konfiguroi Users ja Password moduulit.
Tuetut moduulit löytyvät dokuemntaaatiosta https://lemonldap-ng.org/documentation/latest/start#authentication_users_and_password_databases
LDAP
LemonLDAP integroituu täydellisesti aikaisemman LDAP tai Active Directory palvelun kanssa. Olen itse testannut tätä FreeIPA:n kanssa mutta pitäisi olla yhteensopiva myös Active Directorynkin kanssa.
Määritä LDAP asetukset täältä: General Parameters -> Authentcation parameters -> LDAP parameters -> Connections alta määritä LDAPin yhteysasetukset.
Esimerkki
- Server Host eli palvelimen isäntänimi tai IP-osoite, esimerkiksi ldaps://192.168.99.10. Voit lisätä useita palvelimia erottamalla ne pilkulla, esim ldaps://192.168.99.10, ldaps://192.168.99.11
- Server port 636
- User search base: dc=example, dc=local
- Account: uid=accounting,cn=users,cn=accounts,dc=example,dc=org
- Pssword: XXXXXX
- Timeout: 120
- Version: 3
Lisää sitten myös exported variabled eli muuttujat LDAPista.
Seuraavaksi konfiugroi ryhmät Groups valikon alta.
- Search base: cn=groups, cn=accounts,dc=example,dc=org
- Object class: groupOfNames
- Target attribute: member
- User source attribute: dn
- Searched attributes: cn
Password välilehdessä voit määrittää salasana käytänteet, käytämme esimerkiksi näitä:
Todennus Google-tilin avulla
Googlen tulee konfiguroida OpenID Connectin avulla.
- Rekisteröidy ensin Google Developer käyttäjäksi täälä: https://console.developers.google.com/
- Valitse API Manager alta Creditials. Luodaan uudet tilitiedot.
- Valitse sitten Oauth Client ID.
Määritä sitten Client ID:lle:
- Name: Demo Login
- Authorized Javacript Origins: Määritä tähän isäntänimet joilla saa kirjautua.
- Authorized redirect URIs: Määritä tähän osoite mihin uudelleenohjataan takaisin. Esimerkiksi https://auth.example.org/?openidcallback=1
Palaa nyt LemonLDAP Manageiin. Luo uusi OpenID Connect providers ja nimeä se esimerkiksi "google":ksi.
- META data kohdasta lataa tiedot täältä: https://accounts.google.com/.well-known/openid-configuration
- JWKS data kohdasta lataa tiedot täältä: https://www.googleapis.com/oauth2/v3/certs
- Kopioi Configurations -> Client ID ja Client Secretit Googlen API Managerista.
Tallenna ja testaa.
Todennus Twitter-tilin avulla
Asenna vaadittu moduuli
sudo apt install libnet-twitter-perl
Portaalin kustomointi
Portaalia voi kustomoida HTML / CSS / JS:llä suoraan /usr/share/lemonldap-ng/portal-skins hakemistossa.
LemonLDAP 1.9 versiossa ja vanhemmissa
cd /usr/share/lemonldap-ng/portal-skins/ cd myskin/ cp -a ../bootstrap/fonts/ . cp -a ../bootstrap/js/ . cp -a ../bootstrap/css/ . mkdir images
LemonLDAP 2.0 ja uudemmissa muuttui rakenne:
cd /usr/share/lemonldap-ng/portal/templates/
SSO käyttöön eri palveluissa
Tässä ohjeita miten palvelut saadaan kirjautumaan LemonLDAPin SSO:n kautta.
Mene Manageriin _-> OpenID Connect Relaying parties ja luo uusi OpenID Relaying party. Nimeä se haluamallasi tavalla.
Options tabin alta:
- Auhthentication
- Client ID - Asiakkaan tunnus, generoi tunnus jota käytät sovelluksessa.
- Client secret: Asiakkaan tunnuksen salausavain, jota käytetään sovelluksessa. Generoi oma.
- Display
- Display name: Sovelluksen nimi
- Logo: Sovelluksen kuvake
- Redirection addresses: Uudelleenohjaus osoitteet, erotetaan välilyönnillä. Eli nämä ovat redirect_uri parametrissä.
LemonLDAP - Gitlab
Oauth2
Avaa /etc/gitlab/gitlab.rb
konfigurointi tiedosto
Konfiguroi se seuraavanlaiseksi
gitlab_rails['omniauth_enabled'] = true gitlab_rails['omniauth_allow_single_sign_on'] = ['oauth2_generic'] gitlab_rails['omniauth_block_auto_created_users'] = false gitlab_rails['omniauth_providers'] = [ { 'name' => 'oauth2_generic', 'app_id' => 'random_key', #Change this to own app id 'app_secret' => 'random_key', #Change this to own app key 'args' => { "scope" => "openid,profile,email", client_options: { 'site' => 'https://auth.example.org', # including port if necessary 'authorize_url' => '/oauth2/authorize', 'token_url' => '/oauth2/token', 'user_info_url' => '/oauth2/userinfo', }, user_response_structure: { root_path: ['data', 'user'], attributes: { nickname: 'username', first_name: 'name', last_name: 'family_name', email: 'email' } }, } } ]
Sulje tiedosto ja aja seuraava komento lataaksesi konfiguraation uudelleen
sudo gitlab-ctl reconfigure
Linkkejä:
https://gitlab.com/satorix/omniauth-oauth2-generic
SAML
Lisää nämä Gitlabin konfiguraatioon
gitlab_rails['omniauth_providers'] = [ { name: 'saml', args: { assertion_consumer_service_url: 'https://gitlab.example.org/users/auth/saml/callback', idp_cert: '-----BEGIN CERTIFICATE-----XXXXXXXXXXXXXXXXXXXXX', idp_sso_target_url: 'https://auth.example.org/saml/SingleSignOn', issuer: 'gitlab.example.org', }, # label: 'saml' # optional label for SAML login button, defaults to "Saml" } ]
Lataa Managerista SAML metatiedot https://gitlab.example.org/users/auth/saml/metadata
Grafana
Esimerkki konfiguraatio Grafanaan... Lisää tämä /etc/grafana/grafana.ini
tiedostoon.
[auth.generic_oauth] enabled = true allow_sign_up = true client_id = XXXXXXYYYYXXXXYYYYXX client_secret = XXXXXXYYYYXXXXYYYYXX scopes = openid,profile,email auth_url = https://auth.example.org/oauth2/authorize token_url = https://auth.example.org/oauth2/token api_url = https://auth.example.org/oauth2/userinfo
Huomaa että redirect URI:n tulee olla http://grafana.example.org:3000/login/generic_oauth riippuen missä portissa ajat sitä. Oletuksena 3000 portti.
Konfiguroi sitten LemonLDAPin Manageri:
- Ota käyttöön OpenID Connect,
General Parameters -> Issuer modules -> OpenID Connect -> Activation -> On
- Luo uusi OpenID Connect Relaying Parties.
- Määritä exported attributet:
email:mail, family_name:sn, name:cn
- Options alta konfiguroi Auhtentication, tulee olla samat avaimet kuin Grafanassa tai tulee virheilmoitus. Generoi avaimet itse.
- Konfiguroi lisäksi Allowed redirection address for login, se tulee olla
http://grafana.example.org:3000/login/generic_oauth
, eli osoite mistä kirjaudut niin palauttaa takaisin.
Testaa sitten toimiiko, muista käynnistää grafana uusiksi.
Mediawiki
- Lataa ja asenna Plugin Mediawikiin: https://github.com/Schine/MW-OAuth2Client
Liittyvä issue täälä: https://github.com/Schine/MW-OAuth2Client/issues/2
Nextcloud
Ohje testattu Nextcloud 12 version kanssa. Käytä apunasi virallista dokumentaatiota https://lemonldap-ng.org/documentation/latest/applications/nextcloud
- Ota käyttöön SAML Authentication moduuli Managerista käyttöön. Sen saat käyttöön General Parameters -> issuer Modules -> SAML -> Activation -> ON
- Ota käyttöön Nextcloudin Apps (sovelluksista) SAML laajennos käyttöön. Huomaathan että kun otat laajennoksen käyttöön et voi enään kirjautua Nextcloudin omilla tunnuksilla. Varmista tällöin että SAMLin avulla kirjautuvalla on järjestelmävalvojan oikeuden.
Konfiguroi SAML Nextcloudissa seuraavasti:
- Attribute to map the UID to: uid
- IDP Identify: https://auth.example.org/saml/metadata
- URL Target of the IdP: https://auth.example.org/saml/SingleSignOn
Lataa sitten metadata valitsemalla Download metadata XML.
Luo sitten SAML service providers nimellä nextcloud Managerista.
- Metadata kohtaan lataa juuri äskettäin lataamasi metatiedosto. Saat sen http://nextcloud.example.org/index.php/apps/user_saml/metadata ladattua.
- Lisää Exported attributes kohtaan vähintään uid.
WordPress
- Lataa ja asenna Plugini WordPressiin: https://github.com/daggerhart/openid-connect-generic
- Konfiguroi sinne määritetyt tiedot
Login Type: OpenID Connect button on login form (käytä tätä ainakin testauksessa) OpenID Scope: email profile openid Login Endpoint URL: https://auth.example.org/oauth2/authorize Userinfo Endpoint URL: https://auth.example.org/oauth2/userinfo Token Validation Endpoint URL: https://auth.example.org/oauth2/token End Session Endpoint URL: https://auth.example.org/oauth2/logout Identity key: sub Nickname Key: preferred_username Email Formatting: {email} Display Name Formatting: {given_name} Link Existing Users: TRUE Redirect Back to Origin Page: TRUE
Lisää manageriin uusi OpenID Conenct Relaying Party.
- Exported attributes:
email - mail given_name - givenName preferred_username - displayName sub - uid
- Options
- Authentication: Generoi tänne Client ID ja Client secret
- ID Token signature algorithm: RS256
- Allowed redirection address for login: https://wordpressurl/wp-admin/admin-ajax.php?action=openid-connect-authorize
- Allowed redirection address for logout: https://wordpress-url/wp-login.php/loggedout https://wordpress-url
Kokeile nyt kirjautua.
Linkkejä
https://elatov.github.io/2014/02/lemonldap-ng-ldap-saml-google-apps/