======Zentyal/HowTos/Ubuntu-Clients einbinden======
Normalerweise wird bei der Installation eines Rechners ein Benutzer, und später noch weitere Benutzer, angelegt. Mit diesen lokalen Benutzern kann man sich dann an diesem Rechner anmelden und den Rechner benutzen. Die Gespeicherten Dokumente und Einstellungen sind nur auf diesem Rechner vorhanden.
In einem Netzwerk, in dem ein Benutzer an mehreren Rechner arbeitet, ist dieses Herangehensweise aufwendig. Auf jedem Rechner muss für jeden Benutzer ein Benutzerkonto angelegt werden. Die Dokumente müssen zwischen den Rechnern hin und her kopiert werden. Außerdem hat der Benutzer auf jedem Rechner andere Einstellungen. Hat er z. B. auf einem Rechner ein Lesezeichen im Browser eingerichtet, so wird dieses nicht automatisch auf die anderen Rechner übertragen.
Das folgende HowTo beschreibt, wie man einen Ubuntu-Client so einrichtet, dass die auf dem Zentyal-Server eingerichteten Benutzernamen und Passwörter zur Anmeldung an jedem Rechner im Netzwerk genutzt werden können. Außerdem wird gezeigt, wie man die Benutzerverzeichnisse ([[grundlagen:benutzer_und_gruppen&#das_homeverzeichnis|Homeverzeichnisse]]), die auf dem Zentyal-Server angelegt wurden, auf den Rechnern eingebunden (gemounted) werden, und somit Dokumente und Einstellungen auf jedem Rechner gleich sind.
//Hinweis:// Eine weiter Möglichkeit Ubuntu Clients einzubinden, die nicht per NFS alle Homeverzeichnisse exportieren wird [[http://forum.zentyal.org/index.php/topic,12925.0.html|in diesem HowTo]] beschrieben
=====Authentifizierung - Benutzername und Passwort =====
Die Benutzernamen und Passwörter liegen in einem Datenbank-Verzeichnis, dass über [[wp>LDAP]] angesprochen wird. Die Kommunikation erfolgt über Port 390.
Um einen Client an die LDAP-Datenbank anzubinden muss auf dem Client das Paket ''ldap-auth-config'' und ''nscd'' installiert werden. Auf der Konsole geht das mit
<code terminal>
sudo apt-get install ldap-auth-config nscd
</code>
Während der Installation werden einige Eingaben bzgl. der Servers verlangt. Die einzugebenden Daten findet man auf Zentyal-Server im Untermenüpunkt //Office -> Benutzer und Gruppen -> %%LDAP%%-Einstellungen// (s. Abb.).
Die Eingaben werden im Folgenden erklärt, die Galerie unten zeigt jeweils einen Screenshot dazu.
- **%%LDAP%% server Uniform Resource Identifier:** Die Adresse des Zentyal-Servers und der Port 390 (**Achtung**: [[zentyal:firewall|Firewall]] darf diese Port nicht blockieren.)
- **Distinguished name of the search base**: Das %%LDAP%%-Basisverzeichnis, hier ''dc=acme,dc=intern''
- **%%LDAP%% version to use**: Die zu nutzende %%LDAP%%-Version, hier Version 3
- **Make local root Database admin**: ''Ja''
- **Does the %%LDAP%% database require login?**: ''Nein''
- **%%LDAP%% Account for Root**: Der Wurzeldomänenname, hier ''cn=zentyal,dc=acme,dc=intern ''
- **%%LDAP%% Root account password**: Das Zugangspasswort (wurde bei der Zentyalinstallation automatisch erzeugt).
{{gallery> :zentyal:howtos:ubuntu?ldap_*.png&nocache&lightbox }}
Die Angaben zum %%LDAP%% findet man unter dem Menüpunkt //Office -> Benutzer & Gruppen -> %%LDAP%%-Einstellungen//.
[{{ zentyal:howtos:ubuntu:ldap_einstellungen.png?800 |%%LDAP%%-Einstellungen unter dem Menüpunkt //Office > Benutzer & Gruppen > %%LDAP%%-Einstellungen//}}]
<WRAP 90% round box center>
**Hinweise**
* Beim Kopieren des Passworts muss man darauf achten, dass man keinen abschließenden Zeilenumbruch oder ein Leerzeichen am Anfang kopiert. Am Besten das Passwort vorher in einem Texteditor einfügen. Alternativ kann man auch zum Markieren doppelt auf das Passwort klicken.
* Funktioniert die Namensauflösung und hat der Zentyal-Server den z. B. Namen oder den Alias ''ldap-server'', so kann auch dieser hier verwendet werden.\\
Die Verwendung eines Namens ist der Verwendung einer IP-Adresse vorzuziehen. Zieht man irgendwann mit dem //Benutzer und Gruppe//-Modul auf einen anderen Server um, muss man nur dem neuen Server diesen Namen geben, auf den Clients muss keine Änderung durchgeführt werden.
{{ zentyal:howtos:ubuntu:ldap-hostname.png?600 |Hostname als %%LDAP%% server Uniform Resource Identifier}}
</WRAP>
Nun muss man noch angeben, dass die Namen, Gruppen, usw. per [[wp>Name_Service_Switch|nss]] aufgelöst werden sollen.
<code terminal>
sudo auth-client-config -t nss -p lac_ldap
</code>
Danach startet man noch die beiden zugrunde liegenden Dienste neu
<code terminal>
sudo /etc/init.d/libnss-ldap restart
sudo /etc/init.d/nscd restart
</code>
und man kann sich mit Benutzernamen vom Zentyal-Server einloggen. Allerdings noch nicht auf der grafischen Oberfläche, da die Benutzer noch keine Homeverzeichnisse haben und unter ''/home'' keine anlegen dürfen. Die Homeverzeichnisse muss man noch per [[grundlagen:dateirechte_dateisystem_und_verzeichnisstruktur#netzwerkfreigaben_und_nfs|NFS]] mounten.((Zum Testen kann man aber mit <code terminal>su %%<benutzer-vom-zentyal-server>%%</code> auf Konsole den Benutzer wechseln.))
=====Homeverzeichnisse per NFS mounten=====
====Auf dem Server====
Zunächst installiert man auf dem Server das Paket ''nfs-kernel-server'', damit dieser per [[grundlagen:dateirechte_dateisystem_und_verzeichnisstruktur#netzwerkfreigaben_und_nfs|NFS]] Ordner freigeben kann:
<code terminal>
sudo apt-get install nfs-kernel-server
</code>
Damit der Server weiß, dass er die Homerzeichnisse freigeben soll, trägt man dies in die Datei ''/etc/exports'' ein (z. B. mit ''sudo /etc/exports'' auf der Konsole öffnen). Die betreffende Zeile ist
<code>
/home 0.0.0.0/0.0.0.0(rw,async,no_subtree_check)
</code>
Dabei benennt die erste Angabe den freizugebenden Ordner an. Die zweite Angabe gibt an, dass alle Clients (IP-Adressenbereich) darauf zugreifen dürfen. Die Parameter in Klammern werden [[uu>NFS#Freigaben|hier]] erklärt.
Nun liest man mit
<code terminal>
sudo exportfs -ra
</code>
die neue Konfiguration ein.
====Auf dem Client====
Der Client liest aus der Datei ''/etc/fstab'', welche Freigaben er wo mounten muss. Um die Homeverzeichnisse zu mounten trägt man in die ''/etc/fstab''
<code>
10.0.2.60:/home /home nfs rw 0 0
</code>
ein. Dabei ist die erste Angabe ''10.0.2.60:/home'' der Ordner auf dem Server, und die zweite Angabe (''/home'') der Ordner auf dem Client, in den die Freigabe gemountet werden soll. Die 3 Angabe bedeutet, dass die Freigabe zum lesen und schreiben (read/write) gemountet wird. Weitere Angaben findet man [[uu>NFS#Auf-Freigaben-zugreifen|hier]].
\\ Nun werden bei nächsten Booten automatisch die Homeverzeichnisse des Zentyal-Servers im Ordner ''/home'' des Clients gemountet. Für einen Benutzer macht es dann keine Unterschied, wo er sich einloggt, er hat überall das gleich Homeverzeichnis.
Das Mounten kann man auch ohne Neustart durch
<code terminal>
sudo mount -a
</code>
erreichen.
<WRAP 90% round box center>
**Anmerkung:** Dadurch, dass beim Booten die Homeverzeichnisse unter ''/home'' gemountet werden, sind die lokalen Homeverzeichnisse nicht mehr vorhanden. Somit kann sich kein lokaler Benutzer mehr einloggen . Man kann aber mit dem Programm [[uu>usermod]] das Homeverzeichnis eines lokalen Benutzers verschieben. Man kann z. B. den Ordner ''/localhome'' anlegen, für die Benutzerverzeichnisse der lokalen Benuzer.\\
Ist ''fordperfect'' ein lokaler Benutzer, so wird mit
<code terminal>
mkdir /localhome # Ordner localhome erstellen
sudo usermod -m -d /localhome/fordperfect fordperfect
</code>
das Homeverzeichnis verschoben.
</WRAP>
=====Begrüßungsbildschirm einrichten=====
Ubuntu nutzt [[uu>lightdm|lightDM]] als Displaymanager. Dieser ist für den Begrüßungsbildschirm verantwortlich. Normalerweise werden die lokalen Benutzer angezeigt. Man wählt dann einen dieser Benutzer aus und gibt das Kennwort ein. Damit man jeden Benutzer anmelden kann, muss ein Eingabefeld für den Benutzernamen angezeigt werden.
Dazu gibt fügt man in der Datei ''/etc/lightdm/lightdm.conf'' die Zeile
<code>
greeter-hide-users=true
</code>
ein und startet mit
<code terminal>
sudo /etc/init.d/lightdm restart
</code>
den Displaymanager neu. Danach kann man sich mit jedem Benutzernamen anmelden.
=====Script zum automatischen Einbinden von Clients=====
Da man in einem Netzwerk meistens mehrere Clients nach der beschriebenen Methode einrichten muss, sollte man diesen Schritt automatisieren. Sämtliche oben aufgezeigten Befehle kann man in einem Script zusammenfassen. Die Eingaben, die man bei der [[#authentifizierung_-_benutzername_und_passwort|Installation des Pakets ldap-auth-client]] gemacht hat kann man mit Hilfe des Tools [[http://debiananwenderhandbuch.de/debconf.html#debconf-get-selections|debconf-get-selections]] im Vorfeld automatisch setzen, so dass die manuell Eingabe entfällt.
Das folgende Script übernimmt diese Aufgabe. Im Abschnitt ''Angaben zum LDAP'' am Anfang setzt man für die vier Variablen ''ldapserver'', ''basedn'', ''rootdn'' und ''passwort'' durch die Werte vom Zentyal-Server.\\
Dann kopiert man das Script auf den Client und macht es mit
<code terminal>
sudo chmod +x ubuntu_Client_Einbinden.sh
</code>
ausführbar. Mit
<code terminal>
sudo ./ubuntu_Client_Einbinden.sh
</code>
führt man das Script aus. Nach Abarbeitung des Scripts sind alle beschriebenen Einstellungen gemacht.
<file bash ubuntu_Client_Einbinden.sh>
#!/bin/sh
#########################################################
#########################################################
# Angaben zum LDAP
# Die folgenden Werte ersetzen
# keine Leerzeichen vor und nach dem Gleichheitszeichen
ldapserver=10.0.2.60 # ohne Port nur IP oder Hostname
basedn=dc=acme,dc=intern
rootdn=cn=zentyal,dc=acme,dc=intern
passwort=rVhH5PIgaDYwZFNdAPi2
#########################################################
#########################################################
# Werte für den Installer setzen
echo "Setze Werte für den 'ldap-auth-config'-Installer"
# LDAP-Server
echo "ldap-auth-config ldap-auth-config/ldapns/ldap-server string $ldapserver:390" | debconf-set-selections
# Distinguished Name (baseDN)
echo "ldap-auth-config ldap-auth-config/ldapns/base-dn string $basedn" | debconf-set-selections
# LDAP version
echo "ldap-auth-config ldap-auth-config/ldapns/ldap_version select 3" | debconf-set-selections
# Lokaler Datenbank-Root
echo "ldap-auth-config ldap-auth-config/dbrootlogin boolean true" | debconf-set-selections
# Kein Datenbanklogin erforderlich
echo "ldap-auth-config ldap-auth-config/dblogin boolean false" | debconf-set-selections
# LDAP root-Account
echo "ldap-auth-config ldap-auth-config/rootbinddn string $rootdn" | debconf-set-selections
# LDAP-root Passwd
echo "ldap-auth-config ldap-auth-config/bindpw password $passwort" | debconf-set-selections
echo "ldap-auth-config ldap-auth-config/rootbindpw password $passwort" | debconf-set-selections
# Installation der Pakete
echo "Installiere 'ldap-auth-config' und 'nscd'"
apt-get install -y ldap-auth-config nscd
# nss einrichten
echo "Richte nss ein"
auth-client-config -t nss -p lac_ldap
# Dienste neu starten
echo "Starte die Dienste 'libnss-ldap' und 'nscd' neu"
/etc/init.d/libnss-ldap restart
/etc/init.d/nscd restart
# Homeverzeichnisse per NFS mounten
# NFS-common installierne
echo "Installiere 'nfs-common'"
sudo apt-get install -y nfs-common
fstabEintrag="$ldapserver:/home /home nfs rw 0 0"
#Testen, ob schon ein entsprechender Eintrag in der /etc/fstab existiert
if grep -Exq "$ldapserver:/home[[:space:]]+/home[[:space:]]+nfs[[:space:]]+rw[[:space:]]+0[[:space:]]+0[[:space:]]*" /etc/fstab ||
#Oder, ob home schon Mountpunkt ist
grep -Exq ".+:/.+[[:space:]]+/home[[:space:]]+.*" /etc/fstab
then
echo "Der Mountpunkt"
echo "$fstabEintrag"
echo "existiert bereits."
else
echo "Füge $fstabEintrag zur /etc/fstab hinzu."
cp /etc/fstab /etc/fstab.orig
echo $fstabEintrag >> /etc/fstab
fi
#Testen, ob der NFS-Server die Homeverzeichnisse exportiert
if showmount -e $ldapserver | grep -Ex "/home[[:space:]]+.*"
then
echo "Mounte alles: mount -a"
mount -a
else
echo "Der Host $ldapserver exportiert nicht das Verzeichnis /home"
echo "Installiere dort das Paket 'nfs-kernel-server' und trage"
echo "/home in die Datei /etc/exports ein."
fi;
# LightDM einrichten
echo "Richte Anmeldebildschirm ein"
echo ""
cp /etc/lightdm/lightdm.conf /etc/lightdm/lightdm.conf.orig
if grep -Exq "greeter-hide-users=.*" /etc/lightdm/lightdm.conf
then
sed -i '/greeter-hide-users=.*/d' /etc/lightdm/lightdm.conf
fi
echo "greeter-hide-users=true" >= /etc/lightdm/lightdm.conf
echo "Konfiguration abgeschlossen. Probiere"
echo " su <benutzer-vom-ldap-server>"
echo "um sich mit einem Benutzer des LDAP-Servers anzumelden."
</file>
Diskussion
Hallo, vielen Dank für diese tolle Seite. Ich habe aber ein Problem: Bei grafischem login (LDM) ist kein Logout mehr möglich (auf der konsole geht's). Ich vermute irgendein PAM-Problem. Habe es mit zwei Servern und verschiedenen Clients probiert. Habt ihr eine Idee? Unter Zentyal 2.2 ging noch alles, unter 3.0 leider nicht.