====== LDAP i et Linux Enterprise-Miljø med Keycloak og Nextcloud ======
Denne side beskriver, hvordan **LDAP** (Lightweight Directory Access Protocol) integreres i et **Linux enterprise-miljø** til brugerstyring og login, og hvordan det kan arbejde **parallelt med et eksisterende Windows-miljø** — herunder integration med **[[keycloak|Keycloak]]** og løsninger som **Nextcloud**. Beskrivelsen tager udgangspunkt i behovet for at understøtte både åben kildekode og eksisterende proprietary systemer.
----
==== LDAP: Grundlaget for centraliseret brugerstyring ====
===== Hvad er LDAP? =====
LDAP (**Lightweight Directory Access Protocol**) er en **åben standardprotokol** (RFC 4510) til at hente, opdatere og søge i **hierarkiske directory-tjenester** over et netværk. Den bruges primært til:
* **Centraliseret lagring** af brugere, grupper, enheder og rettigheder.
* **Autentificering** (login) og **autorisation** (adgangskontrol).
* **Multi-platform understøttelse** (Linux, Windows, applikationer, tjenester).
===== Typisk struktur i LDAP =====
dc=example,dc=com
├── ou=users
│ ├── uid=bruger1
│ └── uid=bruger2
└── ou=groups
├── cn=admins
└── cn=developers
===== Implementeringer =====
* **OpenLDAP**: Åben kildekode, fleksibel.
* **389 Directory Server**: Red Hat, enterprise-venlig.
* **Apache Directory Server**: Java-baseret, skalerbar.
----
==== LDAP i Linux-miljøer ====
I Linux integreres LDAP med:
* //nsswitch.conf//: Konfigurerer systemet til at hente brugere/grupper fra LDAP.
* //pam_ldap// eller //sssd// (System Security Services Daemon): Håndterer autentificering via LDAP.
* **Kerberos**: Til **Single Sign-On (SSO)** med LDAP som backend.
===== Eksempel på opsætning =====
# /etc/nsswitch.conf (Ubuntu/Debian)
passwd: compat ldap
group: compat ldap
shadow: compat ldap
----
==== Keycloak: Identity and Access Management (IAM) ====
===== Hvad er Keycloak? =====
Keycloak er en **open-source IAM-løsning** (udviklet af Red Hat) til:
* **Federeret identitet** (understøtter **LDAP, Active Directory, SAML 2.0, OIDC, OAuth2**).
* **Single Sign-On (SSO)** på tværs af applikationer.
* **Centraliseret autentificering** med multi-factor authentication (MFA).
* **Brugerselvbetjening** (self-service password reset, profiladministration).
----
==== Integration mellem LDAP og Keycloak ====
Keycloak kan **synkronisere brugere fra LDAP** og fungere som en **Identity Provider (IdP)** for både Linux- og Windows-tjenester.
===== Opsætning af LDAP i Keycloak =====
1. **Opret en LDAP User Federation** i Keycloak:
* Angiv LDAP-serverens URL (f.eks. ldap://ldap.example.com:389).
* Konfigurer **bind DN** (admin-bruger til LDAP-adgang) og adgangskode.
* Definer **bruger- og gruppe-mapping** (f.eks. uid → username, memberOf → grupper).
2. **Synkronisering**:
* Keycloak kan **importere brugere** fra LDAP ved opstart eller på planlagte tidspunkter.
3. **Autentificeringsflow**:
* Brugere logger ind via **Keycloak login-portal** (web, API, eller integrerede applikationer).
* Keycloak **validerer credentials mod LDAP**.
* Udsteder **JWT-tokens** (OIDC) eller **SAML-assertions** til klienter.
===== Fordele ved Keycloak + LDAP =====
* **Enkelt login** (SSO) på tværs af Linux/Windows/applikationer.
* **Understøttelse af MFA** (SMS, TOTP, hardware tokens).
* **Fleksibel integration** med både åbne og proprietary systemer.
* **Audit logs** og **compliance** (GDPR, ISO 27001).
----
==== Parallel Integration med Windows (Active Directory) ====
===== Hvorfor beholde Windows-miljøet? =====
* **Eksisterende infrastruktur**: AD bruges til Windows-klienter, GPO, og legacy-applikationer.
* **Kerberos/NTLM**: Nødvendigt for ældre Windows-tjenester.
* **Group Policy**: Centraliseret konfiguration af Windows-maskiner.
===== Løsninger for interoperabilitet =====
^ Metode ^ Beskrivelse ^ Fordele ^ Ulemper ^
| Samba som AD DC | Samba kan fungere som en **fuldgyldig AD Domain Controller**. | Fuldt kompatibelt med Windows. | Kræver avanceret opsætning. |
| LDAP + AD Sync | Synkroniser brugere fra AD til LDAP (f.eks. med //ldap-sync//). | Beholder AD som kilden. | Risiko for synkroniseringskonflikter. |
| Keycloak + AD | Keycloak forbinder direkte til AD via **LDAP eller Kerberos**. | Ingen manuel synkronisering. | Kræver AD-adgang for Keycloak. |
| Cross-Forest Trust | Opret en **trust-relation** mellem Linux LDAP og AD. | Transparent adgang på tværs. | Kompleks opsætning. |
----
===== Anbefalet opsætning: Keycloak + LDAP + AD =====
1. **LDAP som primær brugerdatabase**:
* Alle brugere (Linux/Windows) lagres i **LDAP** (eller AD, hvis AD er primært).
* **Keycloak forbinder til LDAP/AD** for autentificering.
2. **Samba som AD-medlem**:
* Linux-servere **slutter sig til AD-domænet** via Samba.
* Brugere kan logge ind på Linux-maskiner med **AD-credentials** (via sssd + ad backend).
3. **Keycloak som SSO-portal**:
* Applikationer (f.eks. Nextcloud) **autentificerer via Keycloak**.
* Keycloak **validerer mod LDAP/AD** og udsteder tokens.
----
==== Nextcloud og andre applikationer ====
===== Integration med Nextcloud =====
Nextcloud kan integreres med **LDAP + Keycloak** på to måder:
====== Option 1: Direkte LDAP-integration ======
* Nextcloud forbinder direkte til **LDAP-serveren**.
* **Fordele**: Simpel opsætning, ingen ekstra lag.
* **Ulemper**: Ingen SSO (brugere skal logge ind separat).
1. Installer **LDAP/Active Directory app** i Nextcloud.
2. Konfigurer LDAP-server, bind DN, og søgefiltre.
3. Map LDAP-felter til Nextcloud-brugere (f.eks. uid → username).
====== Option 2: Keycloak SSO (anbefalet) ======
* Nextcloud **autentificerer via Keycloak** (OIDC eller SAML).
* **Fordele**: Single Sign-On, MFA, centraliseret styring.
1. **Konfigurer Keycloak**:
* Opret en **OIDC-klient** for Nextcloud.
* Angiv **redirect URIs** (f.eks. https://nextcloud.example.com/apps/sociallogin/custom_oidc).
2. **Konfigurer Nextcloud**:
* Installer **Social Login & OIDC app**.
* Angiv Keycloak **client ID**, **client secret**, og **discovery endpoint**.
3. **Test login**:
* Brugere klikker på **"Log ind med Keycloak"** → omdirigeres til Keycloak → logger ind med LDAP/AD-credentials.
===== Eksempel på andre applikationer =====
^ Applikation ^ Integrationsmetode ^ Protokol ^
| Jira/Confluence | Keycloak (SAML/OIDC) | SAML 2.0 / OIDC |
| GitLab | LDAP eller Keycloak (OIDC) | LDAP / OIDC |
| Mattermost | Keycloak (OIDC) | OIDC |
| Grafana | LDAP eller Keycloak (OAuth2) | LDAP / OAuth2 |
----
==== Arkitekturoverblik ====
LDAP Server
│
├── Users (uid=bruger1, uid=bruger2)
└── Groups (cn=admins, cn=developers)
│
├───┬───────────────┬─────────────────┐
│ │ │ │
▼ ▼ ▼ ▼
Linux Servers Windows AD Keycloak Nextcloud
│ │ │ │
│ │ ├─────────────────┘
│ │ │
▼ ▼ ▼
SSSD (PAM) Samba (AD) OIDC/SAML
│ │ │
└───────────┬───────────────────┘
│
▼
Central Brugerdatabase
----
==== Workflow for brugerlogin ====
1. Bruger åbner **Nextcloud** (eller anden applikation).
2. Viderestilles til **Keycloak login-portal**.
3. Keycloak **validerer credentials mod LDAP/AD**.
4. Hvis godkendt, udsteder Keycloak et **JWT-token** (OIDC) eller **SAML-assertion**.
5. Nextcloud **modtager tokenet** og giver adgang.
----
==== Praktiske overvejelser ====
===== Fordele ved denne opsætning =====
* **Digital suverænitet**: LDAP og Keycloak er **open source** (ingen vendor lock-in).
* **Fleksibilitet**: Understøtter både **Linux og Windows** uden at erstatte AD.
* **Skalerbarhed**: LDAP og Keycloak kan håndtere **tusindvis af brugere**.
* **Sikkerhed**: MFA, centraliseret audit, krypteret kommunikation.
===== Udfordringer og løsninger =====
^ Udfordring ^ Løsning ^
| Synkronisering mellem AD og LDAP | Brug **FreeIPA** eller **Univention Corporate Server (UCS)**. |
| Performance med mange brugere | Implementér **LDAP-replikering** og **caching i Keycloak**. |
| Kompleksitet i opsætning | Brug **Ansible/Terraform** til automatiseret deployment. |
| Legacy Windows-applikationer | Behold AD og brug **Keycloak som broker** til moderne applikationer. |
----
==== Anbefalede værktøjer til drift ====
===== Monitorering =====
* **Prometheus + Grafana**: Overvågning af LDAP/Keycloak.
* **ELK Stack**: Logs (Elasticsearch, Logstash, Kibana).
===== Backup =====
* **LDAP**: slapcat (OpenLDAP) eller db2ldif (389 DS).
* **Keycloak**: Database dump (PostgreSQL/MySQL).
===== High Availability =====
* **LDAP-replikering**: Multi-master eller master-slave.
* **Keycloak clustering**: Flere instanser bag en load balancer.
----
==== Trin-for-trin implementeringsguide ====
===== Fase 1: Opsæt LDAP =====
1. Installer **OpenLDAP** eller **389 Directory Server**:
# Ubuntu/Debian
sudo apt install slapd ldap-utils
2. Konfigurer **base DN** (f.eks. dc=example,dc=com).
3. Opret **admin-bruger** og **ou=users/ou=groups**.
4. Test med ldapsearch:
ldapsearch -x -H ldap://localhost -b "dc=example,dc=com"
----
===== Fase 2: Integrer LDAP med Linux =====
1. Installer sssd og ldap-utils:
sudo apt install sssd ldap-utils
2. Konfigurer /etc/sssd/sssd.conf:
[sssd]
services = nss, pam
domains = example.com
[domain/example.com]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com
ldap_id_use_start_tls = true
cache_credentials = true
3. Opdater nsswitch.conf og test login:
sudo systemctl restart sssd
id bruger1 # Skal vise LDAP-brugerinfo
----
===== Fase 3: Opsæt Keycloak =====
1. Start Keycloak med Docker:
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=password quay.io/keycloak/keycloak:24.0 start-dev
2. Log ind på **http://localhost:8080** (admin/password).
3. Opret et **realm** (f.eks. example).
4. Tilføj **LDAP User Federation**:
* Gå til **User Federation** → **Add provider** → **LDAP**.
* Udfyld LDAP-serverdetaljer (URL, bind DN, password).
* Test forbindelse med **"Test connection"** og **"Test authentication"**.
5. Opret en **OIDC-klient** for Nextcloud:
* Gå til **Clients** → **Create**.
* Client ID: nextcloud.
* Root URL: https://nextcloud.example.com.
* Tilføj **Redirect URI**: https://nextcloud.example.com/apps/sociallogin/custom_oidc.
----
===== Fase 4: Integrer Nextcloud med Keycloak =====
1. Installer **Social Login & OIDC** app i Nextcloud:
* Gå til **Apps** → **Social Login & OIDC** → **Enable**.
2. Konfigurer OIDC:
* **Provider URL**: https://keycloak.example.com/auth/realms/example/.well-known/openid-configuration.
* **Client ID**: nextcloud.
* **Client Secret**: (Hentes fra Keycloak under klienten).
* **Button Text**: Log ind med Keycloak.
3. Test login via Keycloak.
----
===== Fase 5: Integrer med Windows AD (valgfrit) =====
1. **Option A: Samba som AD-medlem**:
* Installer Samba og slut til AD:
sudo apt install samba krb5-config winbind
sudo net ads join -U admin
* Konfigurer /etc/sssd/sssd.conf til at bruge ad provider.
2. **Option B: Keycloak + AD (direkte)**:
* Opret en **ny LDAP User Federation** i Keycloak for AD:
* LDAP URL: ldap://ad.example.com:389.
* Bind DN: CN=admin,CN=Users,DC=example,DC=com.
* Base DN: DC=example,DC=com.
----
==== Brugeroplevelse ====
===== Bruger på Linux-maskine =====
* Logger ind med **AD/LDAP-credentials** (via sssd).
* Åbner Nextcloud → **automatisk logget ind via Keycloak SSO**.
===== Bruger på Windows-maskine =====
* Logger ind på Windows med **AD-credentials**.
* Åbner Nextcloud i browser → **viderestilles til Keycloak** → logger ind med **samme AD-credentials**.
===== Admin =====
* Styrer **alle brugere/grupper centralt** i LDAP/AD.
* Konfigurerer **rettigheder i Keycloak** (f.eks. hvilke grupper har adgang til Nextcloud).
----
==== Sikkerhedsanbefalinger ====
===== LDAP =====
* Brug **LDAPS** (port 636) eller **StartTLS** for krypteret kommunikation.
* Begræns **bind DN-rettigheder** (kun læs/adgang til nødvendige felter).
===== Keycloak =====
* Aktiver **HTTPS** (aldrig HTTP i production).
* Brug **stærke adgangskoder** til admin-brugere.
* Aktiver **brute-force beskyttelse** (f.eks. max 5 forsøg).
===== Nextcloud =====
* Konfigurer **CORS** korrekt for at tillade Keycloak-domænet.
* Brug **AppArmor/SELinux** til at begrænse Nextclouds adgang.
----
==== Alternativer og udvidelser ====
^ Komponent ^ Alternativ ^ Bemærkninger ^
| LDAP | FreeIPA, Univention Corporate Server | Inkluderer Kerberos, DNS, og CA. |
| Keycloak | Authelia, LemonLDAP::NG | Lettervægtsalternativer til IAM. |
| Nextcloud | ownCloud, Seafile | Andre open-source fil-delingsløsninger. |
| Samba | Winbind (del af Samba) | Til integration med AD. |
----
==== Opsummering ====
^ Krav ^ Løsning ^
| Central brugerstyring | LDAP + Keycloak (alle brugere ét sted). |
| Single Sign-On (SSO) | Keycloak (OIDC/SAML) til Nextcloud og andre applikationer. |
| Windows-kompatibilitet | Samba (AD-integration) + Keycloak (federeret identitet). |
| Digital suverænitet | OpenLDAP, Keycloak, Nextcloud (alle open source). |
| Skalerbarhed | LDAP-replikering, Keycloak clustering. |
| Sikkerhed | MFA, LDAPS, HTTPS, audit logs. |
----
==== Næste skridt ====
1. **Prøv opsætningen i et testmiljø**:
* Brug **Docker** til at køre LDAP (f.eks. osixia/openldap) og Keycloak.
* Test integration med Nextcloud (Docker-container).
2. **Vurder SUSE-certificeringer**:
* **SUSE Certified Administrator (SCA)** i **Enterprise Linux**.
* **SUSE Certified Engineer (SCE)** i **Identity Management**.
3. **Overvej FreeIPA**:
* Red Hat’s løsning til **integreret LDAP + Kerberos + DNS + Certificate Authority**.
4. **Automatiser med Ansible**:
* Skriv playbooks til at deploye LDAP, Keycloak, og Nextcloud.
----
==== Spørgsmål til refleksion ====
* Har du allerede en **LDAP-server** eller **Active Directory** i drift, som du ønsker at integrere med?
* Skal **Nextcloud** være den eneste applikation, eller er der andre (f.eks. GitLab, Jira)?
* Ønsker du at **erstatte AD** på sigt, eller skal det kun være parallelt?