|
|
@@ -1,3 +1,254 @@
|
|
|
-# tora_join-domain-linux
|
|
|
+<!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>
|
|
|
|
|
|
-joining script linux - .local szenario
|
|
|
+ <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>
|
|
|
+
|
|
|
+ <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>
|
|
|
+
|
|
|
+ <h2>⚡ Quickstart (voll automatisch – Copy & Paste)</h2>
|
|
|
+
|
|
|
+ <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
|
|
|
+
|
|
|
+# 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>
|
|
|
+
|
|
|
+ <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>
|
|
|
+
|
|
|
+ <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>
|
|
|
+
|
|
|
+ <div class="card">
|
|
|
+ <h3>4) Realm prüfen</h3>
|
|
|
+ <pre><code>realm discover companydomain.local
|
|
|
+realm list</code></pre>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <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>
|
|
|
+
|
|
|
+ <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>
|