# AD Beitritt Ubuntu LTS

Hier ist eine **komplette, kopierfertige Anleitung für Ubuntu (22.04 LTS / 24.04 LTS)** mit **SSSD + Realmd** für **AD-Integration inkl. Offline-Login** – **ohne Winbind**, da SSSD zuverlässiger für Offline-Szenarien ist.

---

### **📋 Ubuntu AD-Integration mit Offline-Login (SSSD + Realmd)**
**Voraussetzungen:**
- Ubuntu **22.04 LTS oder 24.04 LTS** (frisch installiert)
- Domänenname: **`BEISPIEL.DOMAENE.LAN`** (ersetzen!)
- AD-Admin-Benutzer: **`Administrator`** (oder anderer berechtigter Benutzer)
- Netzwerkverbindung zum **Domänencontroller (DC)**

---

### **1️⃣ Pakete installieren & System vorbereiten**
```bash
# System aktualisieren
sudo apt update && sudo apt upgrade -y

# Benötigte Pakete installieren
sudo apt install -y realmd sssd sssd-tools adcli krb5-user packagekit oddjob oddjob-mkhomedir pam_krb5 libnss-sss libpam-sss ntp

# Hostname setzen (muss im AD eindeutig sein)
sudo hostnamectl set-hostname ubuntu-client1.beispiel.domäne.lan
```

---

### **2️⃣ Kerberos konfigurieren**
```bash
sudo vi /etc/krb5.conf
```
**Inhalt ersetzen durch:**
```ini
[libdefaults]
    default_realm = BEISPIEL.DOMAENE.LAN
    dns_lookup_realm = true
    dns_lookup_kdc = true
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false

[realms]
    BEISPIEL.DOMAENE.LAN = {
        kdc = dc1.beispiel.domäne.lan
        admin_server = dc1.beispiel.domäne.lan
    }

[domain_realm]
    .beispiel.domäne.lan = BEISPIEL.DOMAENE.LAN
    beispiel.domäne.lan = BEISPIEL.DOMAENE.LAN
```

---

### **3️⃣ DNS prüfen & anpassen**
```bash
# Testen, ob der DC erreichbar ist
ping dc1.beispiel.domäne.lan
nslookup dc1.beispiel.domäne.lan

# Falls DNS nicht funktioniert, manuell anpassen:
sudo vi /etc/resolv.conf
```
**Inhalt ersetzen durch:**
```plaintext
nameserver 192.168.1.10  # IP des DC
search beispiel.domäne.lan
```
→ **Wichtig:** Falls `systemd-resolved` aktiv ist:
```bash
sudo systemctl disable --now systemd-resolved
sudo systemctl enable --now NetworkManager
```

---

### **4️⃣ Domäne mit `realmd` beitreten**
```bash
# Domäne entdecken (Test)
sudo realm discover BEISPIEL.DOMAENE.LAN

# Domäne beitreten (AD-Admin-Passwort eingeben)
sudo realm join -U Administrator BEISPIEL.DOMAENE.LAN --verbose
```
→ **Erwartete Ausgabe:**
`Successfully enrolled machine in realm`

---

### **5️⃣ SSSD für Offline-Login konfigurieren**
```bash
sudo vi /etc/sssd/sssd.conf
```
**Folgende Konfiguration einfügen:**
```ini
[sssd]
domains = BEISPIEL.DOMAENE.LAN
config_file_version = 2
services = nss, pam, sudo, ssh

[domain/BEISPIEL.DOMAENE.LAN]
ad_domain = BEISPIEL.DOMAENE.LAN
krb5_realm = BEISPIEL.DOMAENE.LAN
realmd_tags = manages-system joined-with-adcli
cache_credentials = true          # Offline-Login aktivieren!
krb5_store_password_if_offline = true
default_shell = /bin/bash
ldap_id_mapping = true
use_fully_qualified_names = false  # Kurze Benutzernamen (z. B. "user" statt "user@domäne.lan")
fallback_homedir = /home/%u
access_provider = ad
entry_cache_timeout = 1209600     # Cache-Gültigkeit: 14 Tage
account_cache_expiration = 14     # Account-Cache: 14 Tage
```
**Berechtigungen setzen:**
```bash
sudo chmod 600 /etc/sssd/sssd.conf
```

---

### **6️⃣ PAM für Home-Verzeichnisse & Offline-Login anpassen**
```bash
# Automatische Home-Verzeichnisse aktivieren
sudo pam-auth-update --enable mkhomedir

# Manuell prüfen (falls nötig)
sudo vi /etc/pam.d/common-session
```
**Folgende Zeile hinzufügen (falls nicht vorhanden):**
```plaintext
session required pam_mkhomedir.so skel=/etc/skel umask=0022
```

---

### **7️⃣ Dienste neu starten**
```bash
sudo systemctl restart sssd
sudo systemctl enable --now oddjobd
```

---

### **8️⃣ Test: Online-Anmeldung (Cache füllen)**
```bash
# Testbenutzer anmelden (ersetze "testuser" mit einem AD-Benutzer)
su - testuser
exit

# Kerberos-Ticket prüfen
klist
```
→ **Erwartet:** Ein gültiges Ticket für `testuser@BEISPIEL.DOMAENE.LAN`.

---

### **9️⃣ Test: Offline-Login**
```bash
# Netzwerk trennen (z. B. Kabel ziehen oder WLAN deaktivieren)
sudo systemctl stop NetworkManager

# Offline-Login testen
su - testuser  # Sollte funktionieren!
id testuser    # Sollte Benutzerdaten anzeigen
klist -l       # Sollte gecachte Tickets zeigen
```

---
### **🔧 Fehlersuche (falls nötig)**
| **Problem** | **Befehl zur Diagnose** |
|------------|-------------------------|
| **Anmeldung fehlgeschlagen** | `journalctl -u sssd -f` |
| **Keine Benutzer auflösbar** | `getent passwd testuser` |
| **Kerberos-Fehler** | `kinit testuser` (manueller Test) |
| **DNS-Probleme** | `dig dc1.beispiel.domäne.lan` |
| **SSSD-Cache löschen** | `sudo systemctl stop sssd; sudo rm -f /var/lib/sss/db/cache_*.ldb; sudo systemctl start sssd` |

---

### **✅ Fertig!**
- Ubuntu ist jetzt in der **AD-Domäne** und unterstützt **Offline-Login**.
- **Wichtig:** Jeder Benutzer muss sich **mindestens einmal online anmelden**, bevor er offline arbeiten kann.

---
### **📌 Optional: Automatische Ticket-Erneuerung**
Falls Kerberos-Tickets zu schnell ablaufen:
```bash
sudo vi /etc/krb5.conf
```
**Folgende Zeilen anpassen:**
```ini
[libdefaults]
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
```
Dann **SSSD neu starten**:
```bash
sudo systemctl restart sssd
```

---
### **💡 Warum SSSD statt Winbind?**
| **Kriterium** | **SSSD** | **Winbind** |
|--------------|---------|-------------|
| **Offline-Login** | ✅ Zuverlässig (cached credentials) | ❌ Oft problematisch |
| **Kerberos-Integration** | ✅ Voll unterstützt | ⚠ Teilweise manuelle Konfiguration nötig |
| **Performance** | ✅ Schneller (lokaler Cache) | ⚠ Langsamer (mehr DC-Abfragen) |
| **Gruppenrichtlinien (GPO)** | ❌ Nicht unterstützt | ✅ Teilweise möglich |
| **Einfachheit** | ✅ `realmd` macht viel automatisch | ⚠ Manuelle Konfiguration nötig |

---
### **🚀 Fazit**
- **SSSD + Realmd** ist die **beste Wahl für Ubuntu mit Offline-Login**.
- **Winbind** ist nur nötig, wenn **GPOs** oder **Samba-Freigaben** im Vordergrund stehen.
- **Smartcards?** → Dann zusätzlich `pam_pkcs11` installieren und konfigurieren.

Falls du **Samba-Freigaben** oder **Gruppenrichtlinien** brauchst, lass es mich wissen – dann ergänze ich die Anleitung! 😊