Mainos / Advertisement:

Ero sivun ”LemonLDAP::NG” versioiden välillä

Kohteesta Taisto
Siirry navigaatioon Siirry hakuun
 
(65 välissä olevaa versiota samalta käyttäjältä ei näytetä)
Rivi 1: Rivi 1:
LemonLDAP::NG on Single Sign On sovellus ja se on avointa lähdekoodia.
+
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/
  
 
== Asennus ==
 
== 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
 
Lisää APT-source.listiin
Rivi 14: Rivi 20:
 
deb-src https://lemonldap-ng.org/deb stable main
 
deb-src https://lemonldap-ng.org/deb stable main
 
</pre>
 
</pre>
 +
 +
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
 
Asenna lemonldap-ng paketti
  
   sudo apt update & sudo apt install install lemonldap-ng
+
   sudo apt update & sudo apt install lemonldap-ng
  
Muokkaa oletusdomain omaksi ow2.orgiksi. muuta tämä omaksi domainiksi. Ja aja sitten tämä komentorivillä.
+
Jos käytät Nginx asenna lisäksi
  
   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
+
   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
 
Konfiguroi hosts
  
 
   echo "127.0.0.1 reload.example.com" >> /etc/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
 +
 +
<pre>
 +
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/
 +
</pre>
 +
 +
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:
 +
 +
<syntaxhighlight lang="sql">
 +
CREATE TABLE lmConfig (
 +
    cfgNum INT(11) NOT NULL,
 +
    FIELD VARCHAR(255) NOT NULL DEFAULT '',
 +
    VALUE longblob,
 +
    PRIMARY KEY (cfgNum,FIELD)
 +
    );
 +
</syntaxhighlight>
 +
 +
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.
 +
 +
<pre>
 +
[configuration]
 +
type = RDBI
 +
dbiChain    = DBI:mysql:database=lemonldap-ng;host=1.2.3.4
 +
dbiUser    = lemonldap
 +
dbiPassword = password
 +
; optional
 +
dbiTable    = mytablename
 +
</pre>
 +
 +
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 <code>dwho</code> ja salasanalla <code>dwho</code>
 +
 +
==== Konfiguroi SSO:n eväste, verkkotunnus ja portaalin osoite ====
 +
 +
* Portal URL on verkko-osoite jonne ohjataan kaikki todennuspyynöt. Se konfiguroidaan <code>General Parameters -> Portal -> URL</code> 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 <code>General Parameters -> Cookies</code> alta.
 +
 +
==== SAML käyttöön ====
 +
 +
Otat käyttöön Managerista: General parameters -> SAML alta.
 +
 +
[[File:LemonLDAP_SAML_enable_1.PNG|400px]]
 +
 +
==== 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
 +
 +
<syntaxhighlight lang="sql">
 +
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
 +
    );
 +
</syntaxhighlight>
 +
 +
Tietokantaan luo käyttäjätili jolla kaikki oikeudet tähän tietokantaan.
 +
 +
Sitten Managerissa <code>General Parameters -> Sessions -> Sessions Storage</code> 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.
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
[[File:LemonLDAP_Manager_Session_Module_parameters.png|400px]]
 +
 +
Muuta sitten Apache::Session modules arvoksi: <code>Apache::Session::Browseable::MySQL</code> ja tallenna konfiguraatio. Jos sinulla ei ole <code>Session::Browseable::MySQL</code> 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:
 +
 +
* <code>General Parameters -> '''Authentication parameters</code>
 +
* 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.
 +
 +
[[File:LemonLDAP_LDAP_exported_variables.PNG|400px]]
 +
 +
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ä:
 +
 +
[[File:LemonLDAP_LDAP_password_settings.PNG|400px]]
 +
 +
==== 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'''.
 +
 +
[[File:LemonLDAP_luo_creditials_api_manager.png|400px]]
 +
 +
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
 +
<pre>
 +
cd /usr/share/lemonldap-ng/portal-skins/
 +
cd myskin/
 +
cp -a ../bootstrap/fonts/ .
 +
cp -a ../bootstrap/js/ .
 +
cp -a ../bootstrap/css/ .
 +
mkdir images
 +
</pre>
 +
 +
LemonLDAP 2.0 ja uudemmissa muuttui rakenne:
 +
<pre>
 +
cd /usr/share/lemonldap-ng/portal/templates/
 +
</pre>
 +
 +
== 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 <code>/etc/gitlab/gitlab.rb</code> konfigurointi tiedosto
 +
 +
Konfiguroi se seuraavanlaiseksi
 +
 +
<pre>
 +
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' }
 +
      },
 +
    }
 +
  }
 +
]
 +
</pre>
 +
 +
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
 +
 +
<pre>
 +
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"
 +
    }
 +
  ]
 +
</pre>
 +
 +
Lataa Managerista SAML metatiedot https://gitlab.example.org/users/auth/saml/metadata
 +
 +
=== Grafana ===
 +
 +
Esimerkki konfiguraatio Grafanaan... Lisää tämä <code>/etc/grafana/grafana.ini</code> tiedostoon.
 +
 +
<pre>
 +
[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
 +
</pre>
 +
 +
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, <code>General Parameters -> Issuer modules -> OpenID Connect -> Activation -> On </code>
 +
* Luo uusi '''OpenID Connect Relaying Parties'''.
 +
* Määritä exported attributet: <code>email:mail, family_name:sn, name:cn</code>
 +
* 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 <code>http://grafana.example.org:3000/login/generic_oauth</code>, 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
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
Lisää manageriin uusi '''OpenID Conenct Relaying Party'''.
 +
 +
* Exported attributes:
 +
 +
<pre>
 +
email - mail
 +
given_name - givenName
 +
preferred_username - displayName
 +
sub - uid
 +
</pre>
 +
 +
* 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/

Nykyinen versio 3. joulukuuta 2018 kello 18.22

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/

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.

LemonLDAP SAML enable 1.PNG

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

LemonLDAP Manager Session Module parameters.png

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.

LemonLDAP LDAP exported variables.PNG

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ä:

LemonLDAP LDAP password settings.PNG

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.

LemonLDAP luo creditials api manager.png

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.

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

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:

Lataa sitten metadata valitsemalla Download metadata XML.

Luo sitten SAML service providers nimellä nextcloud Managerista.

WordPress

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

Kokeile nyt kirjautua.

Linkkejä

https://elatov.github.io/2014/02/lemonldap-ng-ldap-saml-google-apps/

Mainos / Advertisement: