<!doctype html>
<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>
<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
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
<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
<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
<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
<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
<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
</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 │ └───────────────────────────┘
</div>
<h2>🧹 Domain verlassen (Unjoin)</h2>
<div class="card">
<pre><code>sudo realm leave companydomain.local
sudo systemctl restart sssd || true
<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
</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
</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>