joining script linux - .local szenario

yuno admin d93e0e19b5 'README.md' ändern 4 months ago
LICENSE 7d0cb6e8f2 Initial commit 4 months ago
README.md d93e0e19b5 'README.md' ändern 4 months ago
join_unix_ad_local.sh d7dd0c68c0 'join_unix_ad_local.sh' ändern 4 months ago

README.md

<!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) &amp; Kerberos-Stabilität.</p>
  <div class="badge">✅ 1× Copy &amp; 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 &amp; Paste)</h2>

<div class="grid">
  <div class="card">
    <h3>Variante A: Repo klonen &amp; Script starten</h3>
    <pre><code>sudo apt update -y &amp;&amp; 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

    <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> &amp; <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 &amp; 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>