|
@@ -1,254 +1,52 @@
|
|
|
-<!doctype html>
|
|
|
|
|
-<html lang="de">
|
|
|
|
|
-<head>
|
|
|
|
|
- <meta charset="utf-8" />
|
|
|
|
|
- <meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
|
|
|
- <title>README – Linux Domain Join (Synology AD / .local)</title>
|
|
|
|
|
- <style>
|
|
|
|
|
- :root{
|
|
|
|
|
- --bg:#0b0f14; --card:#111827; --text:#e5e7eb; --muted:#9ca3af;
|
|
|
|
|
- --accent:#22c55e; --accent2:#60a5fa; --warn:#f59e0b; --danger:#ef4444;
|
|
|
|
|
- --code:#0f172a; --border:#1f2937;
|
|
|
|
|
- }
|
|
|
|
|
- body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
|
|
|
|
- .wrap{max-width:980px;margin:0 auto;padding:28px 18px 56px}
|
|
|
|
|
- .hero{background:linear-gradient(135deg, rgba(34,197,94,.18), rgba(96,165,250,.12));border:1px solid var(--border);border-radius:18px;padding:22px 18px;margin-bottom:18px}
|
|
|
|
|
- h1{margin:0 0 6px;font-size:28px}
|
|
|
|
|
- .sub{color:var(--muted);margin:0}
|
|
|
|
|
- .badge{display:inline-block;background:rgba(34,197,94,.15);border:1px solid rgba(34,197,94,.35);color:#bbf7d0;padding:4px 10px;border-radius:999px;font-size:12px;margin-top:10px}
|
|
|
|
|
- h2{margin:26px 0 10px;font-size:20px}
|
|
|
|
|
- h3{margin:18px 0 8px;font-size:16px;color:#d1d5db}
|
|
|
|
|
- .card{background:var(--card);border:1px solid var(--border);border-radius:18px;padding:16px 16px;margin:12px 0}
|
|
|
|
|
- .note{border-left:4px solid var(--accent2);padding:10px 12px;background:rgba(96,165,250,.08);border-radius:10px}
|
|
|
|
|
- .warn{border-left:4px solid var(--warn);padding:10px 12px;background:rgba(245,158,11,.08);border-radius:10px}
|
|
|
|
|
- .danger{border-left:4px solid var(--danger);padding:10px 12px;background:rgba(239,68,68,.08);border-radius:10px}
|
|
|
|
|
- code, pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}
|
|
|
|
|
- pre{background:var(--code);border:1px solid var(--border);border-radius:14px;padding:12px 12px;overflow:auto}
|
|
|
|
|
- .grid{display:grid;grid-template-columns:1fr;gap:12px}
|
|
|
|
|
- @media (min-width:900px){.grid{grid-template-columns:1fr 1fr}}
|
|
|
|
|
- ul{margin:8px 0 0 18px}
|
|
|
|
|
- a{color:#93c5fd}
|
|
|
|
|
- .k{color:#a7f3d0}
|
|
|
|
|
- .m{color:var(--muted)}
|
|
|
|
|
- .hr{height:1px;background:var(--border);margin:18px 0}
|
|
|
|
|
- .pill{display:inline-block;border:1px solid var(--border);background:rgba(255,255,255,.03);padding:2px 8px;border-radius:999px;font-size:12px;color:var(--muted)}
|
|
|
|
|
- </style>
|
|
|
|
|
-</head>
|
|
|
|
|
-<body>
|
|
|
|
|
- <div class="wrap">
|
|
|
|
|
- <section class="hero">
|
|
|
|
|
- <h1>tora_join-domain-linux <span class="pill">README (HTML)</span></h1>
|
|
|
|
|
- <p class="sub">Linux automatisiert an <b>Synology Directory Server / Active Directory</b> joinen – inkl. Fixes für <code>.local</code> (mDNS/Avahi) & Kerberos-Stabilität.</p>
|
|
|
|
|
- <div class="badge">✅ 1× Copy & Paste · ✅ Preflight Checks · ✅ SSSD + realmd + adcli</div>
|
|
|
|
|
- </section>
|
|
|
|
|
|
|
+# tora_join-domain-linux 🚀
|
|
|
|
|
+**Linux automatisch an Synology Active Directory (.local) joinen – 1× Copy & Paste**
|
|
|
|
|
|
|
|
- <div class="card note">
|
|
|
|
|
- <b>Wichtig:</b> Diese README nutzt ausschließlich <u>fiktive</u> Beispielwerte:
|
|
|
|
|
- <ul>
|
|
|
|
|
- <li><code>companydomain.local</code></li>
|
|
|
|
|
- <li>AD/DNS-IP: <code>192.0.2.10</code> (RFC 5737 Dokumentationsnetz)</li>
|
|
|
|
|
- <li>Admin-User: <code>Administrator@COMPANYDOMAIN.LOCAL</code></li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- <div class="m">➡️ Bitte passe die Werte im Script vor der Nutzung an.</div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+Dieses Repo enthält ein Script, das einen Linux-Rechner automatisch an eine **Synology Directory Server / Active Directory** Domain joined – inkl. Fixes für typische `.local`-Probleme (mDNS/Avahi) und Kerberos-Stabilität.
|
|
|
|
|
|
|
|
- <h2>✅ Was das Script macht</h2>
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <ul>
|
|
|
|
|
- <li>Installiert benötigte Pakete (<code>realmd</code>, <code>sssd</code>, <code>adcli</code>, <code>krb5-user</code>, …)</li>
|
|
|
|
|
- <li>Setzt DNS zuverlässig auf den AD/DNS-Server (wichtig für Kerberos)</li>
|
|
|
|
|
- <li>Entschärft <code>.local</code>-Probleme durch mDNS/Avahi/NSS-Anpassung (optional/empfohlen)</li>
|
|
|
|
|
- <li>Stabilisiert Kerberos durch <code>rdns = false</code> (optional/empfohlen)</li>
|
|
|
|
|
- <li>Führt Domain Join aus (<code>realm join</code>)</li>
|
|
|
|
|
- <li>Startet <code>sssd</code> neu und optional <code>mkhomedir</code></li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+---
|
|
|
|
|
|
|
|
- <h2>⚠️ Vorher: Domain-Daten im Script anpassen</h2>
|
|
|
|
|
- <div class="card warn">
|
|
|
|
|
- <p><b>Öffne</b> <code>join_unix_ad_local.sh</code> und passe im <b>CONFIG</b>-Block mindestens an:</p>
|
|
|
|
|
- <ul>
|
|
|
|
|
- <li><code>DOMAIN</code> → <code>companydomain.local</code></li>
|
|
|
|
|
- <li><code>REALM</code> → <code>COMPANYDOMAIN.LOCAL</code> (GROSS)</li>
|
|
|
|
|
- <li><code>AD_DNS_IP</code> → z. B. <code>192.0.2.10</code></li>
|
|
|
|
|
- <li><code>ADMIN_USER</code> → <code>Administrator@COMPANYDOMAIN.LOCAL</code></li>
|
|
|
|
|
- <li>optional: <code>DC_HOST</code>, <code>TEST_USER</code>, <code>COMPUTER_OU</code></li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- <p class="m">💡 Bei <code>.local</code> Domains ist es sehr empfehlenswert, mDNS/Avahi zu deaktivieren bzw. <code>hosts: files dns</code> zu erzwingen.</p>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+## ✅ Beispielwerte (nur fiktiv!)
|
|
|
|
|
+Diese README nutzt ausschließlich **fiktive** Beispielwerte:
|
|
|
|
|
|
|
|
- <h2>⚡ Quickstart (voll automatisch – Copy & Paste)</h2>
|
|
|
|
|
|
|
+- Domain: `companydomain.local`
|
|
|
|
|
+- Realm: `COMPANYDOMAIN.LOCAL`
|
|
|
|
|
+- AD/DNS-IP: `192.0.2.10` *(RFC 5737 Dokumentationsnetz)*
|
|
|
|
|
+- Admin-User: `Administrator@COMPANYDOMAIN.LOCAL`
|
|
|
|
|
|
|
|
- <div class="grid">
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <h3>Variante A: Repo klonen & Script starten</h3>
|
|
|
|
|
- <pre><code>sudo apt update -y && sudo apt install -y git
|
|
|
|
|
|
|
+➡️ **Vor Nutzung musst du die Werte im Script anpassen.**
|
|
|
|
|
|
|
|
-# Repo klonen
|
|
|
|
|
-git clone https://git.example.com/company/tora_join-domain-linux.git
|
|
|
|
|
-cd tora_join-domain-linux
|
|
|
|
|
-
|
|
|
|
|
-# Script ausführbar machen & starten
|
|
|
|
|
-chmod +x join_unix_ad_local.sh
|
|
|
|
|
-sudo ./join_unix_ad_local.sh</code></pre>
|
|
|
|
|
- <div class="m">✅ Empfohlen, weil du dann Änderungen am Script direkt im Repo pflegen kannst.</div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <h3>Variante B: Nur das Script holen (ohne Clone)</h3>
|
|
|
|
|
- <pre><code># Script herunterladen (Beispiel-URL – an deinen Git-Server anpassen)
|
|
|
|
|
-curl -L -o join_unix_ad_local.sh \
|
|
|
|
|
- "https://git.example.com/company/tora_join-domain-linux/raw/branch/master/join_unix_ad_local.sh"
|
|
|
|
|
-
|
|
|
|
|
-chmod +x join_unix_ad_local.sh
|
|
|
|
|
-sudo ./join_unix_ad_local.sh</code></pre>
|
|
|
|
|
- <div class="m">💡 Funktioniert nur, wenn dein Git-Server eine Raw-URL anbietet.</div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <h2>🔐 Login nach erfolgreichem Join</h2>
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <p>Typischerweise ist das Login-Format:</p>
|
|
|
|
|
- <pre><code>user@companydomain.local</code></pre>
|
|
|
|
|
|
|
+---
|
|
|
|
|
|
|
|
- <p>Beispieltests:</p>
|
|
|
|
|
- <pre><code>realm list
|
|
|
|
|
-id someuser@companydomain.local
|
|
|
|
|
-getent passwd someuser@companydomain.local
|
|
|
|
|
-su - someuser@companydomain.local</code></pre>
|
|
|
|
|
- <div class="note">
|
|
|
|
|
- <b>Merke:</b> Wenn <code>id</code> & <code>getent</code> funktionieren, ist <code>sssd</code> korrekt angebunden.
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+## ✅ Was das Script macht
|
|
|
|
|
+- installiert benötigte Pakete (`realmd`, `sssd`, `adcli`, `krb5-user`, …)
|
|
|
|
|
+- setzt DNS auf den AD/DNS-Server (wichtig!)
|
|
|
|
|
+- entschärft `.local`-Probleme durch mDNS/Avahi/NSS-Fix (optional/empfohlen)
|
|
|
|
|
+- setzt Kerberos stabiler (`rdns = false`) (optional/empfohlen)
|
|
|
|
|
+- führt den Domain Join durch (`realm join …`)
|
|
|
|
|
+- startet `sssd` neu
|
|
|
|
|
+- optional: `mkhomedir` (Home-Verzeichnis automatisch beim Login)
|
|
|
|
|
|
|
|
- <h2>🧪 Diagnose-Kommandos (wenn etwas hängt)</h2>
|
|
|
|
|
- <div class="grid">
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <h3>1) DNS prüfen</h3>
|
|
|
|
|
- <pre><code>resolvectl status | sed -n '/DNS Servers/,+3p' || true
|
|
|
|
|
-cat /etc/resolv.conf
|
|
|
|
|
-dig +short _ldap._tcp.companydomain.local SRV
|
|
|
|
|
-dig +short _kerberos._udp.companydomain.local SRV</code></pre>
|
|
|
|
|
- <div class="m">DNS muss auf den AD/DNS zeigen – Router/Google-DNS parallel ist oft der Killer.</div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+---
|
|
|
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <h3>2) Zeit prüfen (Kerberos ist zeitkritisch)</h3>
|
|
|
|
|
- <pre><code>timedatectl</code></pre>
|
|
|
|
|
- <div class="m">Schon wenige Minuten Drift können Kerberos brechen.</div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+## ⚠️ Vorher: Domain-Daten im Script anpassen
|
|
|
|
|
+Öffne `join_unix_ad_local.sh` und passe im **CONFIG**-Block mindestens an:
|
|
|
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <h3>3) Kerberos Ticket testen</h3>
|
|
|
|
|
- <pre><code># Wenn kinit nicht geht, geht realm join nie.
|
|
|
|
|
-kinit Administrator@COMPANYDOMAIN.LOCAL
|
|
|
|
|
-klist</code></pre>
|
|
|
|
|
- <div class="m">Wenn hier Fehler kommen: erst DNS/Zeit fixen, dann erneut versuchen.</div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+- `DOMAIN="companydomain.local"`
|
|
|
|
|
+- `REALM="COMPANYDOMAIN.LOCAL"` *(GROSS)*
|
|
|
|
|
+- `AD_DNS_IP="192.0.2.10"`
|
|
|
|
|
+- `ADMIN_USER="Administrator@COMPANYDOMAIN.LOCAL"`
|
|
|
|
|
+- optional: `DC_HOST`, `TEST_USER`, `COMPUTER_OU`
|
|
|
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <h3>4) Realm prüfen</h3>
|
|
|
|
|
- <pre><code>realm discover companydomain.local
|
|
|
|
|
-realm list</code></pre>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+> 💡 Bei `.local` Domains ist es sehr empfehlenswert, mDNS/Avahi zu deaktivieren bzw. `hosts: files dns` zu erzwingen.
|
|
|
|
|
|
|
|
- <h2>🧠 Typische Stolperfallen & Lösungen</h2>
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <h3>Problem: <code>.local</code> wird von Linux als mDNS behandelt</h3>
|
|
|
|
|
- <p class="m">Symptome: Domain wird entdeckt, aber Join/Kerberos scheitert oder verhält sich inkonsistent.</p>
|
|
|
|
|
- <div class="warn">
|
|
|
|
|
- <b>Fix:</b> Avahi/mDNS deaktivieren oder in <code>/etc/nsswitch.conf</code> erzwingen:
|
|
|
|
|
- <pre><code>hosts: files dns</code></pre>
|
|
|
|
|
- <div class="m">Das Script kann das automatisch erledigen (empfohlen bei <code>.local</code>).</div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+---
|
|
|
|
|
|
|
|
- <div class="hr"></div>
|
|
|
|
|
|
|
+## ⚡ Quickstart (voll automatisch – Copy & Paste)
|
|
|
|
|
|
|
|
- <h3>Problem: <code>KDC reply did not match expectations</code></h3>
|
|
|
|
|
- <p class="m">Ursachen: DNS nicht exklusiv AD/DNS, Reverse-DNS/PTR inkonsistent, Kerberos stolpert über rdns.</p>
|
|
|
|
|
- <div class="danger">
|
|
|
|
|
- <b>Fix:</b>
|
|
|
|
|
- <ul>
|
|
|
|
|
- <li>DNS ausschließlich auf den AD/DNS setzen</li>
|
|
|
|
|
- <li>in <code>/etc/krb5.conf</code>: <code>rdns = false</code></li>
|
|
|
|
|
- <li>PTR prüfen (Beispiel-IP):</li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- <pre><code>dig -x 192.0.2.10</code></pre>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <h2>🗺️ Ablauf (als “Bild”)</h2>
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <pre><code>┌───────────────┐
|
|
|
|
|
-│ Script Start │
|
|
|
|
|
-└───────┬───────┘
|
|
|
|
|
- │
|
|
|
|
|
- v
|
|
|
|
|
-┌───────────────────────────┐
|
|
|
|
|
-│ Pakete installieren │
|
|
|
|
|
-│ realmd/sssd/adcli/krb5... │
|
|
|
|
|
-└─────────┬─────────────────┘
|
|
|
|
|
- │
|
|
|
|
|
- v
|
|
|
|
|
-┌───────────────────────────┐
|
|
|
|
|
-│ DNS auf AD/DNS pinnen │
|
|
|
|
|
-└─────────┬─────────────────┘
|
|
|
|
|
- │
|
|
|
|
|
- v
|
|
|
|
|
-┌───────────────────────────┐
|
|
|
|
|
-│ .local Fix (mDNS/Avahi) │
|
|
|
|
|
-│ + NSS: hosts: files dns │
|
|
|
|
|
-└─────────┬─────────────────┘
|
|
|
|
|
- │
|
|
|
|
|
- v
|
|
|
|
|
-┌───────────────────────────┐
|
|
|
|
|
-│ Kerberos: rdns=false │
|
|
|
|
|
-│ + kinit Preflight │
|
|
|
|
|
-└─────────┬─────────────────┘
|
|
|
|
|
- │
|
|
|
|
|
- v
|
|
|
|
|
-┌───────────────────────────┐
|
|
|
|
|
-│ realm join + sssd restart │
|
|
|
|
|
-│ + mkhomedir (optional) │
|
|
|
|
|
-└─────────┬─────────────────┘
|
|
|
|
|
- │
|
|
|
|
|
- v
|
|
|
|
|
-┌───────────────────────────┐
|
|
|
|
|
-│ Tests: realm list / id │
|
|
|
|
|
-└───────────────────────────┘</code></pre>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <h2>🧹 Domain verlassen (Unjoin)</h2>
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <pre><code>sudo realm leave companydomain.local
|
|
|
|
|
-sudo systemctl restart sssd || true</code></pre>
|
|
|
|
|
- <div class="m">Optional (nur wenn du komplett „aufräumen“ willst):</div>
|
|
|
|
|
- <pre><code>sudo rm -f /etc/sssd/sssd.conf
|
|
|
|
|
-sudo rm -f /etc/krb5.keytab
|
|
|
|
|
-sudo systemctl restart sssd || true</code></pre>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <h2>✅ Unterstützte Systeme</h2>
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <ul>
|
|
|
|
|
- <li>Debian / Ubuntu (APT-basiert)</li>
|
|
|
|
|
- <li>systemd</li>
|
|
|
|
|
- <li>realmd/sssd stack</li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- <div class="m">Für RHEL/Rocky/Alma (dnf/yum) muss die Paketinstallation angepasst werden.</div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <h2>📎 Logs für Support</h2>
|
|
|
|
|
- <div class="card">
|
|
|
|
|
- <pre><code>sudo journalctl -u sssd --no-pager -n 200
|
|
|
|
|
-sudo journalctl -u realmd --no-pager -n 200</code></pre>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <div class="card note">
|
|
|
|
|
- <b>Hinweis zu Beispiel-Daten:</b> Alle Namen, IPs und URLs in dieser README sind fiktiv
|
|
|
|
|
- und dienen nur als Vorlage. Bitte setze deine echten Werte ausschließlich im Script oder in deiner privaten Dokumentation.
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-</body>
|
|
|
|
|
-</html>
|
|
|
|
|
|
|
+### Variante A: Repo klonen & Script starten
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo apt update -y && sudo apt install -y git
|
|
|
|
|
+git clone https://git.example.com/company/tora_join-domain-linux.git
|
|
|
|
|
+cd tora_join-domain-linux
|
|
|
|
|
+chmod +x join_unix_ad_local.sh
|
|
|
|
|
+sudo ./join_unix_ad_local.sh
|