Samba Winbind

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

  3. Einen Editor öffnen

Inhaltsverzeichnis
  1. Vorteile/Funktionsweise Winbind
  2. Vor der Installation
    1. Bezeichnungen
    2. Testen der Verbindung
    3. Zeit synchronisieren
  3. Installation
    1. Beschreibung
    2. Installationsvorbereitungen
      1. Hosts ändern
    3. Installation
      1. Pakete installieren
    4. Konfiguration
      1. Kerberos einrichten
      2. Der Domäne beitreten
      3. Konfiguration der Authentication
      4. PAM Konfiguration
      5. root-Rechte
    5. Optionale Erweiterungen
      1. PAM Mount
  4. Problemlösungen
    1. no logon servers
    2. Die TLD der Domain ist .local (example.l...
    3. Namensauflösung
  5. Links

Samba_Server/samba-logo.png Dieser Artikel beschreibt, wie man Ubuntu an einer Windows-Domäne anmeldet, um die Benutzer am "Active Directory" zu authentifizieren. Weitere Informationen zu Samba findet man im Artikel Samba. Zusätzlich zur Domänen-Authentifizierung können bei der Anmeldung auch benutzerspezifische Netzwerkfreigaben verbunden werden. Diese Freigaben werden dann mit dem Domänen-Benutzer und dessen Rechten angesprochen. Bisher wurde dies mit Windows 2003 Domänen Controllern getestet (Enterprise und Small Business).

Außerdem ist es möglich, Ubuntu auch ohne ADS zu authentifizieren. Der Hauptunterschied ist, dass hierzu kein Kerberos notwendig ist. ADS ist der Active Directory Service. Die gesonderten Installationsschritte für diese Methode sind im Artikel besonders gekennzeichnet.

Vorteile/Funktionsweise Winbind

Winbind vereint die UNIX- und Windows NT-Konten-Verwaltung, indem es einer UNIX-Maschine erlaubt, ein vollwertiges Mitglied einer NT-Domäne zu werden. Als Endergebnis wird, immer wenn ein Programm auf der UNIX-Maschine das Betriebssystem nach einem Benutzer- oder Gruppen-Namen fragt, die Anfrage an den NT-Domänencontroller weitergegeben, der diese Namensabfrage durchführt. Weil Winbind sich auf einem sehr tiefgreifenden Level ins Betriebssystem einhängt, ist diese Umleitung zum NT-Domänencontroller völlig transparent.

Die Benutzer auf der UNIX-Maschine können dann NT-Benutzer- und NT-Gruppen-Namen so verwenden, als ob sie „native“ UNIX-Namen wären. Sie können mit chown Eigentümer von Dateien werden, so dass die Dateien NT-Domänen-Benutzern gehören, oder sich sogar auf einer UNIX-Maschine anmelden und eine UNIX-X-Window-Session als Domänen-Benutzer ausführen.

Das einzige sichtbare Anzeichen, dass Winbind verwendet wird, ist, dass Benutzer- und Gruppen-Namen die Form DOMÄNE\benutzer und DOMÄNE\gruppe annehmen. Das ist notwendig, da Winbind auf diese Weise erkennt, wann eine Umleitung zum Domänencontroller erforderlich ist und auf welche Domäne sich diese Anfrage bezieht.

Zusätzlich bietet Winbind einen Authentifikationsdienst, der sich ins PAM-System (Pluggable Authentication Modules) einhängt, um allen PAM-fähigen Applikationen die Authentifizierung über eine NT-Domäne anzubieten. Diese Fähigkeit löst das Problem der Synchronisation von Passwörtern zwischen Systemen, da alle Passwörter nur an einem Platz gespeichert werden - auf dem Domänencontroller.

Vor der Installation

Bezeichnungen

meinserver Name des Servers, der Domaincontroller ist
IPADRESSE IP-Adresse des Server, der Domaincontroller ist
example.com Domäne
EXAMPLE alternative Workgroup
UBUNTU Rechnername des Ubuntu Client PC's

Testen der Verbindung

Zuerst sollte man testen, ob eine Verbindung zum Server hergestellt werden kann. Dazu öffnet man ein Terminal[2] und verwendet den Befehl ping. Dies sollte etwa so aussehen.

ping FQDN 

FQDN steht hier für den Fully Qualified Domain Name des Domaincontrollers. (meinserver.example.com) Weitere Informationen zu FQDN unter FQDN.

Zeit synchronisieren

Anschließend sollte man sicherstellen, dass, die Zeit auf dem Client und auf dem Server nicht mehr als 2 Minuten abweicht. Andernfalls werden Fehler wie zum Beispiel

kinit(v5): Clock skew too great while getting initial credentials

beim Verbinden auftreten. Beachten sollte man auch das Ubuntu eventuell automatisch wieder eine andere Zeit aus dem Internet holt.

Installation

Beschreibung

Soll Ubuntu ein Mitglied einer Windows Domäne werden, dann wird hierzu Kerberos benötigt. Soll Ubuntu ohne ADS an die Domäne angebunden werden, dann wird Kerberos nicht benötigt. Die entsprechenden Installationsschritte können also ausgelassen werden.

Installationsvorbereitungen

Hosts ändern

Man öffnet die Datei /etc/hosts mit einem Editor[3]. Dann fügt man folgende Zeile ein:

  127.0.0.1 ubuntu.example.com localhost ubuntu
  IPADRESSE meinserver.example.com meinserver

Dies ist wichtig, da sonst beim Anmelden Probleme auftreten können. Unter Umständen kann man sich auch gar nicht mehr an der grafischen Oberfläche anmelden.

Installation

Pakete installieren

Nun müssen die benötigten Pakete installiert werden[1]:

  • krb5-user (universe)

  • libpam-krb5 (universe )

  • winbind

  • samba

  • smbclient

  • libnss-winbind

  • libpam-winbind

Paketliste zum Kopieren:

sudo apt-get install krb5-user libpam-krb5 winbind  samba  smbclient libnss-winbind libpam-winbind 

Oder mit apturl die Pakete installieren. Link: ,samba ,smbclient,libnss-winbind,libpam-winbind

Hinweis:

Die beiden Pakete krb5-user und libpam-krb5 sind nur bei der Installationsvariante mit ADS erforderlich.

Konfiguration

Achtung!

Es wird dringend empfohlen, vor jeder Änderung an den folgenden Konfigurationsdateien eine Sicherung davon anzulegen.

Kerberos einrichten

Hinweis:

Dieser Schritt ist nur für die Variante mit ADS-Authentifizierung erforderlich. Siehe auch Kerberos.

Zuerst wird der Kerberos-Authentifizierungsdienst auf dem Kerberos-Server des Windows-Domänencontrollers eingestellt. Dazu die Datei /etc/krb5.conf mit einem Editor öffnen. Neue Kerberos-Konfiguration:

[logging]
    default = FILE:/var/log/krb5.log

[libdefaults]
    ticket_lifetime = 24000
    clock_skew = 300
    default_realm = EXAMPLE.COM

[realms]
    EXAMPLE.COM = {
        kdc = meinserver:88
        admin_server = meinserver:464
        default_domain = EXAMPLE.COM
    }

[domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM
Testen

kinit Administrator@EXAMPLE.COM
Password for Administrator@EXAMPLE.COM: **** 

Wobei Administrator auch jeder andere User sein kann, der Domänen-Admin ist. War nun alles erfolgreich, dann gibt klist ein Ticket aus.

klist 
Ausgabe

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@EXAMPLE.COM
Valid starting     Expires            Service principal
12/20/06 12:10:43  12/20/06 18:50:43  krbtgt/EXAMPLE.COM@EXAMPLE.COM


Kerberos 4 ticket cache: /tmp/tkt1000
klist: You have no tickets cached

Damit ist die Installation von Kerberos abgeschlossen.

Der Domäne beitreten

Dazu muss zuerst eine neue Samba-Konfiguration (/etc/samba/smb.conf) erstellt werden. Natürlich sollte man sich vorher wieder eine Sicherung der Originaldatei anlegen. Die neue Samba-Konfiguration (/etc/samba/smb.conf) erstellt man mit einem Editor. Je nachdem, welche Domäne verwendet wird, nach einem der folgenden Beispiele.

Samba-Konfiguration für Active-Directory-Domänen

  [global]
  security = ads
  realm = EXAMPLE.COM
  password server = IPADRESSE     #IP des Domain Controllers
  workgroup = EXAMPLE
  idmap uid = 10000-20000
  idmap gid = 10000-20000
  winbind enum users = yes
  winbind enum groups = yes
  winbind cache time = 10
  winbind use default domain = yes
  template homedir = /home/%U
  template shell = /bin/bash
  client use spnego = yes
  client ntlmv2 auth = yes
  encrypt passwords = yes
  restrict anonymous = 2
  domain master = no
  local master = no
  preferred master = no
  os level = 0
Ohne ADS Authentifizierung

  [global]
  workgroup = EXAMPLE
  idmap uid = 10000-20000
  idmap gid = 10000-20000
  template shell = /bin/bash
  template homedir = /home/%U
  winbind enum users = yes
  winbind enum groups = yes
  winbind cache time = 10
  winbind separator = +
  winbind use default domain = yes
  security = domain
  password server = *
  encrypt passwords = yes
  domain master = no
  local master = no
  preferred master = no
  os level = 0

Jetzt tritt man der Domäne bei, bevor man winbind neu startet, da es sonst nicht hoch fährt.

Active Directory Domäne beitreten

net ads join -U Administrator 
Domäne ohne ADS beitreten

net rpc join -U Administrator 

Nach jeder Änderung an der Samba-Konfiguration (und auch nach jeder PAM-Änderung) muss Winbind neu gestartet werden.

/etc/init.d/winbind restart 

Nun sollte man der Domäne erfolgreich beigetreten sein. Der Computer sollte auf dem Server unter "Computers" auftauchen.

Testen

wbinfo -u 

sollte eine Liste der Domainbenutzer ausgeben.

wbinfo -g 

Sollte eine Liste der Domaingruppen ausgeben.

Hinweis:

Sollte man die Meldung Error looking up domain groups bekommen, startet man Winbind noch einmal neu.

Konfiguration der Authentication

Man öffnet die Datei /etc/nsswitch.conf in einem Editor und macht die folgenden Anpassungen:

  passwd:         compat winbind
  group:          compat winbind
  shadow:         compat
Testen

/etc/init.d/winbind restart 
getent passwd 

sollte nun ebenfalls die Domänenbenutzer ausgeben.

getent group 

sollte nun ebenfalls die Domänengruppen ausgeben.

PAM Konfiguration

Die Pluggable Authentication Modules (PAM) sind eine Softwarebibliothek, die eine allgemeine Programmierschnittstelle (API) für Authentifizierungsdienste zur Verfügung stellt. PAM muss nun an eine Authentifizierung mit Winbind angepasst werden. Die entsprechenden PAM-Konfigurationsdateien befinden sich alle im Verzeichnis /etc/pam.d/.

Benutzer, die mithilfe einer Active Directory bzw. Windows NT Domäne verwaltet werden, sind nicht in den Linuxgruppen, welche Ubuntu verwendet. Diese Gruppen sind jedoch wichtig, um zum Beipiel auf USB-Geräte oder die Soundkarte (Lautstärke) zuzugreifen. Um diesen Benutzern die richtigen Gruppen zuzuweisen, wird pam_group benötigt. Damit werden die Windows-User in die entsprechenden Linuxgruppen aufgenommen.

group.conf (/etc/security/group.conf):

 * ; * ; * ; Al0000-2400 ; floppy, audio, cdrom, video, usb, plugdev, users

Hinweis:

Eine manuelle Änderung der PAM-Konfiguration (Dateien in /etc/pam.d/) ist nicht mehr notwendig, sondern findet automatisiert bei der Installation statt. Lediglich das Erstellen der Home-Ordner muss nachträglich mit pam-auth-update aktiviert werden.

common-account (/etc/pam.d/common-account):

  account sufficient       pam_winbind.so
  account required         pam_unix.so

common-auth (/etc/pam.d/common-auth):

  auth required   pam_group.so use_first_pass 
  auth sufficient pam_winbind.so
  auth sufficient pam_unix.so nullok_secure use_first_pass
  auth required   pam_deny.so

common-session (/etc/pam.d/common-session):

  session required pam_unix.so
  session required pam_mkhomedir.so umask=0022 skel=/etc/skel
  session optional pam_foreground.so

sudo (/etc/pam.d/sudo):

  auth sufficient pam_winbind.so
  auth sufficient pam_unix.so use_first_pass
  auth required   pam_deny.so

  @include common-account
Testen

/etc/init.d/winbind stop
/etc/init.d/samba restart
/etc/init.d/winbind start 

Nun sollte man sich mit einem Domänenbenutzer anmelden können. Da es bei Fehlern an der obrigen Konfiguration vorkommen kann, dass man sich gar nicht mehr anmelden kann, ist es am besten, man testet die Anmeldung per SSH und meldet sich vorsichtshalber nicht ab. Wenn auf dem Client ein SSH-Server installiert ist, sollte es nun möglich sein, sich auf diesen mit einem Domänen-Benutzer anzumelden. Näheres dazu findet man im Artikel SSH.

GUI-Login

Um sich in neueren Ubuntu-Versionen mit einem Domain-Account über die GUI anmelden zu können, muss zunächst die Eingabe eines beliebigen Benutzernamens freigeschaltet werden. Hierzu in /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf die Konfiguration anpassen:

  [SeatDefaults]
  greeter-session=unity-greeter
  allow-guest=false
  greeter-show-remote-login=false
  greeter-show-manual-login=true
  greeter-hide-users=true

root-Rechte

Um einer Domain-Gruppe root-Rechte zu geben, muss diese in /etc/sudoers eingefügt werden:

  %gruppenname  ALL=(ALL:ALL) ALL

Hinweis:

Die Gruppen- oder Benutzernamen immer in Kleinbuchstaben angeben, auch wenn im Domain-Controller eine gemischte Schreibweise verwendet wird (z.B. GruppenName wird zu gruppenname)!

Optionale Erweiterungen

PAM Mount

Einhängen eines Netzlaufwerks mit den Rechten des entsprechenden Users.

Pakete installieren

  • libpam-mount (universe, [2] )

  • cifs-utils

Paketliste zum Kopieren:

sudo apt-get install libpam-mount cifs-utils 

Oder mit apturl die Pakete installieren. Link: apt://libpam-mount,cifs-utils

PAM Konfiguration erweitern

Hinweis:

Ab Ubuntu 14.04 ist eine manuelle Änderung der PAM-Konfiguration (Dateien in /etc/pam.d/) nicht mehr notwendig, sondern findet automatisiert bei der Installation statt.

common-auth (/etc/pam.d/common-auth):

  auth required   pam_mount.so
  auth sufficient pam_unix.so nullok_secure use_first_pass
  auth required   pam_group.so use_first_pass 
  auth sufficient pam_winbind.so use_first_pass
  auth required   pam_deny.so

common-session (/etc/pam.d/common-session):

  session required pam_unix.so
  session required pam_mkhomedir.so umask=0022 skel=/etc/skel
  session optional pam_foreground.so
  session optional pam_mount.so

Die pam_mount-Konfiguration befindet sich in /etc/security/pam_mount.conf.xml. Mögliche Einträge sind mittels man 5 pam_mount.conf ersichtlich; es stehen insbesondere die Variablen %(USER), %(DOMAIN_NAME), %(DOMAIN_USER) zur Verfügung.

Die Konfiguration sieht folgendermaßen aus:

1
2
3
4
5
<pam_mount>
  <!-- ... -->
  <volume fstype="cifs" server="MEINSERVER" path="FREIGABE" mountpoint="/media/freigabe" options="iocharset=utf8,uid=xyz,dmask=0700" />
  <!-- ... -->
</pam_mount>

Dabei ist zu beachten:

//meinserver/freigabe kann eingehängt werden
//meinserver/freigabe/unterverzeichnis kann NICHT eingehängt werden

Es ist also nicht möglich, Unterverzeichnisse von Freigaben zu verbinden.

Mit dem Eintrag <luserconf name=".pam_mount.conf.xml" /> aktiviert man, dass zusätzlich benutzerspezifisch die Datei $HOME/.pam_mount.conf.xml eingelesen wird.

Passwort-Text bei GUI-Login ändern

Nach der oben beschriebenen Änderung der /etc/pam.d/common-auth erscheint beim GUI-Login im Passwortfeld der Text pam_mount password:. Um wieder password: (oder jeden beliebigen anderen Text) anzuzeigen in /etc/security/pam_mount.conf.xml folgende Zeile vor </pam_mount> ergänzen:

<msg-authpw>password:</msg-authpw>

Problemlösungen

no logon servers

Sollte diese Meldung beim Anmelden eines Domänenbenutzers auftauchen, muss wahrscheinlich die Startreihenfolge von Winbind und Samba modifziert werden. Dazu müssen alle Dateien mit dem Namen S20winbind und S20samba in den Ordnern /etc/rc2.d, rc3.d, rc4.d, rc5.d in S45winbind und S45samba umbenannt werden.

mv /etc/rc2.d/S20winbind /etc/rc2.d/S45winbind
mv /etc/rc3.d/S20winbind /etc/rc3.d/S45winbind
mv /etc/rc4.d/S20winbind /etc/rc4.d/S45winbind
mv /etc/rc5.d/S20winbind /etc/rc5.d/S45winbind
mv /etc/rc2.d/S20samba /etc/rc2.d/S45samba
mv /etc/rc3.d/S20samba /etc/rc3.d/S45samba
mv /etc/rc4.d/S20samba /etc/rc4.d/S45samba
mv /etc/rc5.d/S20samba /etc/rc5.d/S45samba 

Dadurch wird Samba und Winbind in der Bootreihenfolge etwas nach hinten verschoben.

Bei selbigem Problem ab Ubuntu 16.10 kann es helfen die Zeile in /etc/systemd/system/multi-user.target.wants/winbind.service anzupassen:

After=network.target nmbd.target

zu

After=network-online.target

Die TLD der Domain ist .local (example.local)

Der Befehl

ping FQDN 

endet mit:

ping: unknown host meinserver.example.local

Das Problem lässt sich damit begründen, dass die TDL ".local" standardisiert via mDNS (Multicast-DNS) aufgelöst wird. Um dieses Verhalten abzuschalten, muss man in der Datei /etc/nsswitch.conf die Zeile

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

in

hosts: files dns mdns4

geändert werden.

Namensauflösung

Für alle, die Probleme bei der Namensauflösung von Hostnamen in einem Windowsnetzwerk haben, kann der folgende Tipp hilfreich sein. Da es sich um ein gerade bei Einsteigern recht häufiges Problem handelt, sollte man aber auch weitere Problemlösungen in Betracht ziehen.

Man editiert die Datei /etc/nsswitch.conf mit Root-Rechten und ergänzt diese um wins:

hosts: files wins dns