Linux als Mitglied einer Windows Domäne

Aftermath

Erfahrene Benutzer welche die Samba Konfiguration auswendig kennen können diesen Teil überspringen allerdings werden hier einige interessante Stolperfallen der smb.conf Datei behandelt.

  • netbios name
    Für [HOSTNAME] setzt man den DNS Hostnamen ein dieser ist identisch mit dem Netbios-Namen. Hier wird auch deutlich wieso die Namenauflösung so penibel beachten werden muß.
  • workgroup = SNAKEOIL
    Ein Realm ist natürlich keine Workgroup aber der Arbeitsgruppen-Name erfüllt hier die Aufgabe als Abkürzung für den Realm-Namen zu fungieren daher sollte dieser auch korrekt gesetzt sein.
  • security = ADS
    Veranlasst Winbind und Samba im Active Directory Modus zu agieren.
  • encrypt passwords = yes
    Für Windows Versionen höher als 98 und NT 4.0 SP3 werden verschlüsselte Passwörter verwendet. Wer mit steinalten früheren Versionen von Windows rumhantiert sollte hier no setzen denn diese beherrschen die Passwortverschlüsselung nicht. Gemischte Umgebungen sind aber nicht möglich denn jeder Windows Client der Verschlüsselung anfordert wird sich weigern Passwörter im Klartext über den Draht zu senden. Pikanterweise speichert Winbind selbst alle Passwörter in seinen Credentials Cache als Klartext ab. Wer schon immer mal wissen wollte was Windows so als Machine Credentials verwendet kann sich diese so anschauen:

    sudo apt-get install tdb-tools
    tdbdump /var/lib/samba/secrets.tdb

    Achtung!
    Gelingt es einem Angreifer diese Dateien zu kapern kann man den ganzen Realm getrost als kompromitiert betrachten und wegschmeißen. Diese Dateien sollten daher nur für den root-Benutzer zugriffsfähig sein.
    Dort finden sich noch weitere Datenbanken für die Gruppenbeziehungen, Registry-Einträge, Informationen zu Freigaben, etc.

  • password server = *
    Hier wird normalerweise der Hostname des Passwort-Servers angegeben, bei einer adequaten Namensauflösung kann man Winbind durch * aber auch veranlassen den Passwort-Server selbst im Realm zu ermitteln. Dies kann in Load Balancing-Szenarios sinnvoll sein wenn neben dem PDC noch ein BDC Server läuft oder mehrere parallele DCs.
  • idmap config …
    Hier nun der interessante Teil. Damit die IDs der lokalen Benutzer & Gruppen des Linux Hosts nicht mit denen aus dem Active Directory kollidieren werden zwei Konfigurationen definiert. Einmal idmap config * : … als Standarteinstellung welche immer verwendet wird wenn keine andere Konfiguration ermittelt werden konnte, als Backend verwendet sie eine tdb Datenbank und der Bereich der erlaubten IDs erstreckt sich von 1-9999.

    Achtung!
    Unter Linux verwenden Benutzer und Gruppen getrennte sich überlappende Zahlenbereiche von 1…n während Windows einen Zahlenbereich für beides verwendet.

    Die anderen idmap config SNAKEOIL : … Einstellungen sollen als Backend das Active Directory verwenden. Hier wird auch deutlich wieso die korrekte Definition des Arbeitsgruppennamens für den Realm so wichtig ist, man kann hier nicht einfach irgendeinen Namen angeben z.B. (idmap config BLAH : … oder idmap config MEH : …) denn dann versucht Winbind den Realm über diese Arbeitsgruppennamen auch aufzulösen, was scheitern dürfte da der dazugehörige Realm wahrscheinlich nicht existiert.
    Desweiteren möchten wir dass Winbind das RFC2307 Schema, welches wir in der Vorbereitung unseres Windows Server installiert hatten, verwendet um Linux relevante Information aus dem Active Directory zu verwenden. Der Zahlenbereich für Benutzer und Gruppen aus dem Realm schließt sich direkt dem Zuvorliegenden an.

    2xAchtung!
    Zahlenbereiche aus unterschiedlichen idmap Zuordnungen (vgl. *, SNAKEOIL) dürfen sich auf gar keinen Fall überlappen sonst veranstaltet Winbind äußerst verstörende Dinge.

  • winbind nss info = rfc2307
    Obwohl diese Einstellung scheinbar überflüssig ist weil wir diese bereits in

    idmap config SNAKEOIL : schema_mode = rfc2307

    angegeben haben muß man diese offenbar dennoch explizit definieren. In einigen Foren wird von seltsamen Problemen berichtet wenn man diese Einstellung weglässt.

  • winbind enum … = yes
    Diese Einstellung ermöglicht die Auflistung von Benutzern & Gruppen des Active Directory durch den Aufruf der setgrent(), getgrent() Funktionen. Durch getent kann man das ausprobieren z.B.:

    me@myComputer:~$ # Benutzer auflisten
    me@myComputer:~$ getent passwd
    ...
    me@myComputer:~$ # oder Gruppen
    me@myComputer:~$ getent group
    ...

    Achtung!
    Hier gibt es einige bekannte Bugs abhängig von der Samba Version, u.U. kann es sein das Gruppen nicht angezeigt werden. Bevor man verzweifelt sollte man testen ob Winbind wirklich keine Verbindung zur Domäne bekommt oder ob einfach nur der getent Aufruf aufgrund des Bugs nicht klappt aber z.B. wbinfo -u bzw. wbinfo -g trotzdem Benutzer & Gruppen der Domäne korrekt anzeigen.

  • winbind offline logon = yes
    Hiermit wird Winbind erlaubt Benutzer via PAM Login auch aus seinem Credentials Cache (vgl. /var/lib/samba/*.tdb) zu authentifizieren ohne zwingend auf eine Antwort eines DCs zu warten.
  • preferred master = no
    Nein, unsere Linux Maschine ist lediglich ein Domänenmitglied.
  • winbind nested groups = Yes
    Aktiviert die Verwendung von verschachtelten Gruppenzugehörigkeiten wie das unter Windows üblich ist.
  • winbind use default domain = Yes
    Die Differenzierung von Benutzer- & Gruppennamen der lokalen Linux Maschine und denen des Active Directory kann man anhand der Notation treffen. Die der Linux Maschine werden wie gewöhnlich notiert z.B. root, daemon, bin, sys, … während Benutzer & Gruppennamen des Realms hingegen in der Schreibweise [DOMAIN]\[USER] oder [DOMAIN]\[GROUP] angegeben werden, wie das bei Windows Maschinen auch üblich ist, z.B. SNAKEOIL\Administrator.
    Da der Backslash aber unter Linux auf dem Terminal für gewöhnlich das Escaping einleitet kann man sich auf zwei Arten behelfen. Entweder man bleibt bei der langen Schreibweise und definiert den Trenn-Char um z.B.

    winbind separator = '+'

    Dann wäre analog die Schreibweise: SNAKEOIL+Administrator oder man verwendet die Kurzschreibweise indem man die Namen aus dem Realm so behandelt als wären es gewöhnliche Linux Benutzer die zur lokalen Maschine gehören also Administrator. Dazu bestimmt man mit winbind use default domain = Yes einen Standart-Realm der immer verwendet wird wenn nicht explizit anders angegeben.

    2xAchtung!
    Die Verwendung von winbind use default domain = Yes kann sich nachteilig auswirken wenn Benutzer mit identischen Namen in beiden Domänen auftauchen z.B. ein lokaler Linux Benutzer namens “Administrator” und gleichzeitig ein Benutzer im Realm als “SNAKEOIL\Administrator” existiert, logischerweise kann Winbind solche Konflikte nicht auflösen da nun zwei Benutzer mit identischem Namen aber unterschiedlichen IDs existieren, in diesem Fall ist die lange geschwätzige Notation in jedem Fall erforderlich. Für gewöhnlich kollidieren jedoch die angelegten Standart-Benutzernamen einer Linux-Installation nicht mit Standart-Benutzernnamen einer Windows-Installation.

  • allow trusted domains = No
    Bei Vertrauensstellung von Domänen können ungewollte Authentifizierungskonstellationen auftreten z.B. einem Benutzer aus einer entfernten, vertrauten Domäne können ggfs. automatisch Rechte in der lokalen Domäne eingeräumt werden die durch die Vertrauensstellung entstehen. Um dies zu unterbinden werden vertraute Domänenstellungen auf dem Domänenmitglied mit dieser Einstellung ignoriert.
  • client use spnego = Yes
    Ermöglicht grundsätzlich Kerberos-Authentifizierung.
  • kerberos method = secrets and keytab
    Während normalerweise Credentials von Winbind nur in seinen Datenbanken gepuffert werden kann man mit dieser Anweisung sicherstellen das diese zusätzlich in der Datei /etc/krb5.keytab gespeichert werden. Das kann sinnvoll sein wenn man Kerberos noch in anderen Authentifizierungkonstellationen verwenden möchte evtl. auch ohne Winbind dann ist diese Einstellung zu empfehlen um den Kerberos Bibliotheken Zugriff auf die Schlüsseltabelle zu gewähren. Die Einstellung ist hier nur vorsorglich gewählt und für den Betrieb eines Linux-Domänenmitglieds per Winbind nicht zwingend erforderlich.
  • dedicated keytab file = /etc/krb5.keytab
    Hier gibt man explizit die Datei für die Kerberos-Schlüsseltabelle an. Die Angabe /etc/krb5.keytab ist ein häufig verwendeter Pfad in den Standarteinstellungen von vielen Daemons fast aller Debian-basierten Distributionen. Man sollte sich also gut überlegen ob man diese Datei an andere exotischere Plätze verlegt.
  • winbind refresh tickets = true
    Nach erfolgreicher Kerberos-Authentifzierung erhält man ein zeitlich beschränktes Ticket welches den Zugriff auf die kontrollierte Resource gewährt. Nach Ablauf dieser Zeitspanne wird der Zugriff wieder gesperrt wenn das Ticket nicht erneuert wird z.B. bei längeren Phasen von Inaktivität. Mit dieser Einstellung wird Winbind angewiesen abgelaufene Tickets zu erneuern.

Quellen:
idmap config … : schema_mode vs winbind nss info

Leave a Reply