====== 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?