[[Vorlage(archiviert, )]] 
[[Vorlage(Fortgeschritten)]] 

{{{#!vorlage Wissen
[:Pakete_installieren: Installation von Programmen] 
[:Terminal: Ein Terminal öffnen] 
[:Editor: Einen Editor öffnen] 
}}}
[[Inhaltsverzeichnis()]] 

[[Bild(Samba_Server/samba-logo.png, align=left)]]
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 [wikipedia:Active_Directory_Service: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. 

{{{#!vorlage Befehl
ping FQDN
}}}

FQDN steht hier für den Fully Qualified Domain Name des Domaincontrollers. (meinserver.example.com) Weitere Informationen zu FQDN unter [wikipedia:Domain#Fully_Qualified_Domain_Name_.28FQDN.29: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]: 

{{{#!vorlage Paketinstallation
krb5-user, universe
libpam-krb5, universe 
winbind 
samba 
smbclient
libnss-winbind
libpam-winbind
}}}

{{{#!vorlage Hinweis
Die beiden Pakete '''krb5-user''' und '''libpam-krb5''' sind nur bei der Installationsvariante mit ADS erforderlich. 
}}}


== Konfiguration ==

{{{#!vorlage Warnung
Es wird dringend empfohlen, vor jeder Änderung an den folgenden Konfigurationsdateien eine Sicherung davon anzulegen. 
}}}

=== Kerberos einrichten ===

{{{#!vorlage Hinweis
Dieser Schritt ist nur für die Variante mit ADS-Authentifizierung erforderlich.
}}}

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 ====

{{{#!vorlage Befehl
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. 

{{{#!vorlage Befehl
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 ====

{{{#!vorlage Befehl
net ads join -U Administrator
}}}

==== Domäne ohne ADS beitreten ====

{{{#!vorlage Befehl
net rpc join -U Administrator
}}}

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

{{{#!vorlage Befehl
/etc/init.d/winbind restart
}}}
Nun sollte man der Domäne erfolgreich beigetreten sein. Der Computer sollte auf dem Server unter "Computers" auftauchen. 

==== Testen ====

{{{#!vorlage Befehl
wbinfo -u
}}}
sollte eine Liste der Domainbenutzer ausgeben. 

{{{#!vorlage Befehl
wbinfo -g
}}}
Sollte eine Liste der Domaingruppen ausgeben. 

{{{#!vorlage 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 ====

{{{#!vorlage Befehl
/etc/init.d/winbind restart
}}}

{{{#!vorlage Befehl
getent passwd
}}}
sollte nun ebenfalls die Domänenbenutzer ausgeben. 

{{{#!vorlage Befehl
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
}}}

{{{#!vorlage 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 ====

{{{#!vorlage Befehl
/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
}}}


{{{#!vorlage 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 ====
{{{#!vorlage Paketinstallation
libpam-mount, universe, [2] 
cifs-utils
}}}

==== PAM Konfiguration erweitern ====
{{{#!vorlage 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:
 
{{{#!code xml
<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. 

{{{#!vorlage Befehl
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

{{{#!vorlage 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 [:Samba_Client_GNOME#Probleme-und-Loesungen: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
}}}


= Links =
 * [http://samba.org/samba/ Die englischsprachige Hauptseite des Samba-Teams] {en} 
 * [ubuntu_doc:community/ActiveDirectoryWinbindHowto:ActiveDirectoryWinbindHowto] {en} 
## * [http://gertranssmb3.berlios.de/output/winbind.html Winbind Dokumentation] {de}
 * [http://www.64-bit.de/dokumentationen/netzwerk/b/003/winbind.html Winbind-Dokumentation] {de} 
 * [http://ubuntuforums.org/showthread.php?t=5409 HOWTO: NT Domain Authentifizierung] {en}
 * [wikipedia:Active_Directory: Beschreibung Active Directory und FQDN]
 * [wikipedia:Active_Directory_Service:Beschreibung ADS]

# tag: System, Netzwerk