Linux als Client

Aus dem IServ-Wiki
Version vom 7. Dezember 2017, 10:35 Uhr von Sören Müller (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
Information Diese Anleitung wird gerade überarbeitet -- Mirko Augsburger

Ziel ist es einen Client mit Linux vollständig in die IServ Umgebung zu integrieren, so dass sich die IServ-Benutzer dort anmelden können und auf ihre Daten zugreifen können.

Ubuntu 12.04 LTS, Ubuntu 14.04 LTS, Debian stable

Die aktuellen LTS-Versionen (Long Term Support) können einfach, so wie Windows, über den IDesk installiert werden. Weitere Informationen hierzu finden sich in der offiziellen IServ-Dokumentation

Ubuntu/Debian/Mint

Für Ubuntu LTS ab Version 12.04 wird ein Paket entwickelt, dieses läuft aktuell auch auf Ubuntu 10.04 LTS, Debian Stable und Linux Mint. Das Paket selbst ist abhängig von den benötigten Programmen, welche bei graphischer Installation mitinstalliert werden. Diese Programme werden dann automatisch konfiguriert.

Die Testversion kann man aus dem Repository herunterladen, wobei bis zu drei Versionen vorhanden sind, neuere Versionen erhalten eventuell mehr Funktionen, sind aber gleichzeitig eventuell noch nicht für den täglichen Einsatz geeignet. Die zugehörige Diskussionsplattform findet sich im Support-Forum. Bei der Installation des Clients werden alle nötigen Angaben abgefragt, unter anderem wie das Benutzerverzeichnis eingebunden werden soll. Hierfür gibt es vier Möglichkeiten:

  • gleicher Share wie bei Windows (home)
  • eigener Share (linux_home)
  • lokal
  • tmpfs
  • tmpfs + archive

Bei den ersten beiden Varianten läuft einige Software nicht besonders gut oder gar nicht (z.B. Firefox, KDE). Der Unterschied hier ist lediglich, ob das Linux-Homeverzeichnis gleich dem Eigene Dateien Verzeichnis von Windows sein soll oder ob es dem Homeverzeichnis auf dem Server entsprechen soll.

Bei der dritten Variante bleiben alle Dateien, welche direkt im Home-Verzeichnis liegen lokal erhalten, werden aber nicht auf den Server synchronisiert. Dadurch bleiben die Konfigurationen von Programmen erhalten, jedoch müssen die Festplatten ausreichend dimensioniert sein. Eventuell lohnt es sich hierbei Quotas zu benutzen.

Die vierte Variante bindet ein temporäres Dateisystem ein, wodurch die Schüler nicht die Festplatte überfüllen können, jedoch gehen bei jedem Log-Out alle Dateien außerhalb von Files und Groups verloren

Die letzte Methode ist die aktuell zu bevorzugende. Hier wird sowohl ein temporäres Dateisystem eingebunden, als auch alle Daten behalten, da bei einem Log-Out alle Dateien gepackt und auf den IServ hochgeladen werden.

Nötige Änderungen auf dem IServ

Es ist nicht mehr nötig auf dem IServ Änderungen vorzunehmen. Mit einer neuen Version des iserv-computer Pakets wurden die Änderungen in den IServ integriert und sind nun standardmäßig gesetzt.

Dokumentation des Pakets

Dieser Abschnitt dokumentiert, was das Paket automatisiert erledigt und ist insbesondere für Administratoren von nicht-unterstützten Systemen hilfreich.

Abhängigkeiten

  • winbind: Ein Systemdienst, welcher für die Authentifikation über eine Windows-Domäne nötig ist. Unter Debian-basierten Distributionen sind die folgenden beiden Pakete extra zu installieren.
    • libpam-winbind | winbind (<= 2:3.5.11): Authetifizierung des Benutzers über PAM
    • libnss-winbind | winbind (<= 2:3.6.5-2): Systemweite Benutzer/Gruppen-Abfrage von winbind-Benutzern
  • samba-common-bin: Liefert nmblookup, ein Tool zur Namensauflösung (vorinstalliert)
  • network-manager: Einfache Netzwerkverwaltung (vorinstalliert)
  • isc-dhcp-client | dhcp-client (vorinstalliert)
  • cifs-utils | smbfs: Programme zum Einbinden des Benutzerverzeichnisses
  • smbclient: Komandozeilenprogramme zum kommunizieren mit dem IServ-Samba-Server (vorinstalliert
  • libpam-mount (>= 0.18): Automatische Einbinden der Benutzerverzeichnisse beim Login
  • cups: Common Unix Printing System, der Druckserver (vorinstalliert)
  • ghostscript: Tools zum Erstellen von PDF-Dokumenten

Nötige Konfigurationsschritte

Information ISERVDOMAIN muss durch den Domänennamen ersetzt werden
/etc/samba/smb.conf
datei
[global]
workgroup = ISERVDOMAIN
security = DOMAIN
os level = 0
local master = No
domain master = No
template homedir = /home/%U
template shell = /bin/bash
winbind separator = +
winbind cache time = 10
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
idmap config * : range = 10000-20000
idmap config * : backend = tdb

Bei einem älteren Samba (z.B. Ubuntu 10.04) müssen die letzten beiden Zeilen stattdessen folgendermaßen lauten:

datei
idmap uid = 10000-20000
idmap gid = 10000-20000
/etc/nsswitch.conf

Hier muss an die beiden Zeilen beginnend mit passwd: und group: noch winbind drangehängt werden.

Aus

datei
passwd:  compat
group:   compat

wird also

datei
passwd:  compat winbind
group:   compat winbind
/etc/security/pam_mount.conf.xml

Die folgenden Zeilen müssen in der /etc/security/pam_mount.conf.xml direkt nach <!-- Volume definitions --> eingefügt werden.

Gleicher Share wie bei Windows
datei
<volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)" options="iocharset=utf8,dir_mode=0700"/>
<volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/>
Eigener Share (linux_home zeigend auf %H)
datei
<volume uid="10000-20000" fstype="cifs" server="iserv" path="linux_home" mountpoint="/home/%(USER)" options="iocharset=utf8,dir_mode=0700"/>
Lokal
datei
<volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)/Files" options="iocharset=utf8,dir_mode=0700"/>
<volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/>
tmpfs
datei
<volume uid="10000-20000" fstype="tmpfs" path="none" mountpoint="/home/%(USER)" options="nosuid,nodev,uid=%(USERUID),gid=%(USERGID),mode=700"/>
<volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)/Files" options="iocharset=utf8,dir_mode=0700"/>
<volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/>
Drucken

Wenn das drucken möglich sein soll muss bei allen Versionen außer Eigener Share (linux_home zeigend auf %H) noch die folgende Zeile hinzugefügt werden:

datei
<volume uid="10000-20000" fstype="cifs" server="iserv" path="linux_print" mountpoint="/home/%(USER)/Print" options="iocharset=utf8,dir_mode=0700"/>
/etc/rc.local

Da winbind, der für die Authentifizierung zuständige Dämon, manchmal schneller startet, als eine Netzwerkverbindung aufgebaut werden kann, empfiehlt es sich ihn nach dem Bootvorgang neuzustarten. Die einfachste Methode ist, folgende zwei Zeilen an das Ende der Datei /etc/rc.local, jedoch vor exit 0 hinzuzufügen:

datei
(sleep 5 && service winbind restart) &
(sleep 10 && service winbind restart) &
lightdm

Der aktuell in Ubuntu benutzte Desktop-Manager, lightdm, lässt sich mit folgendem Befehl so konfigurieren, dass er u.a. ein Eingabefeld für den Benutzer zeigt, anstatt einer Liste:

root
 /usr/lib/lightdm/lightdm-set-defaults --hide-users=true --show-manual-login=true --allow-guest=false --show-remote-login=false 

Bei älteren Systemen gibt es noch keine Option --show-remote-login, daher muss diese hier weggelassen werden:

root
 /usr/lib/lightdm/lightdm-set-defaults --hide-users=true --show-manual-login=true --allow-guest=false 
CUPS

Um Drucken zu können ist der einfachste Weg ein eigenes CUPS-Backend zu nutzen, welches gedruckte Dokumente einfach nach $HOME/Print schreibt. Dieses ist bei einem Debian unter /usr/lib/cups/backend/iserv zu speichern. Dabei ist zu beachten, dass die Zugriffsrechte 700 (rwx------) sein sollten.

datei
#!/bin/bash

set -e
# Device Discovery
if [ "$#" = "0" ]; then
  # device-class device-uri "device-make-and-model" "device-info" "device-id" "device-location"
  echo 'file iserv:/ "IServ" "IServ Printer" "Generic PDF Printer"' 
  #"MFG:Generic;MDL:CUPS-PDF Printer;DES:Generic CUPS-PDF Printer;CLS:PRINTER;CMD:POSTSCRIPT;'
  exit 0
fi


# If no filname is submitted the printjob is on stdin
PRINTJOB="-"
if test -n "$6"; then
  PRINTJOB="$6"
fi

JOB_NUMBER=$1
USER=$2
TITLE=$3
COPIES=$4
OPTIONS=$5
# Replace/delete all characters which might be troublemakers from the filename
DESTTITLE=`echo $TITLE | iconv -t US-ASCII//translit | sed 's/ /_/g' | tr -d '\0-\51\57\72-\100\133-\136\140\173-\177'`
HOMEDIR="`getent passwd $USER | cut -d: -f6`"
DESTDIR="$HOMEDIR/Print/"
DESTFILE="$DESTDIR$DESTTITLE"

if [ ! -d $DESTDIR ]; then
  sudo -u $USER mkdir $DESTDIR
fi

if [ ! -e $DESTFILE.ps ]; then
  cat $6 | sudo -u $USER tee $DESTFILE.ps
  exit 0
else
  NUMBER=2
  while [ -e "$DESTFILE-$NUMBER.ps" ]; do
    NUMBER=`expr $NUMBER + 1`
  done
  cat $6 | sudo -u $USER tee $DESTFILE-$NUMBER.ps
  exit 0
fi

Der Drucker kann nun entweder manuell hinzugefügt werden, oder mithilfe dieses Scripts:

datei
## IServ PRINTING SUPPORT
# with parts from cups-pdf's debian postinst and prerm scripts (Version: 2.6.1-8)
#
# COPYRIGHT
# © 2003-2011 Martin-Éric Racine <martin-eric.racine@iki.fi>
# © 2009,2011 Till Kamppeter <till.kamppeter@gmail.com>
# © 2013 IServ <info@iserv.eu>
#
# LICENSE
# This package is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License or (at
# your option) any later version.
#
	
# Ensure that CUPS is running before we manipulte its queues
if [ -f /etc/init/cups ] ; then
  service cups force-reload || service cups start || true
fi

# Wait until CUPS has reloaded its configuration.
if lpstat -h localhost -r 2>/dev/null | grep -q not; then
  t=0
  while lpstat -h localhost -r 2>/dev/null | grep -q not; do
     t=$(($t + 1))
     if [ $t = 10 ]; then
       echo "CUPS failed to reload its configuration!"
       break
     fi
     sleep 1
   done
fi

# Check if an IServ printer already exists
if [ -z "$( LC_ALL=C lpstat -h localhost -v 2>/dev/null | grep 'iserv:/' )" ]
then
  # 1) Find a name for the PDF queue.
  queue=IServ
  number=0
  while $(LC_ALL=C lpstat -h localhost -v 2>/dev/null | cut -d ':' -f 1 | cut -d ' ' -f 3 | grep -q ^$queue\$)
  do
    number=$(($number + 1))
    queue="IServ$number"
  done
  # 2) Find the default paper size.
  # Papersize is always A4!
  # size="$(LC_ALL=C paperconf 2>/dev/null)" || size=a4
  size=a4
  # 3) Find PPD
  if [ -e /usr/share/ghostscript/current/lib/ghostpdf.ppd ]; then
    # Current GS have this dir which makes it easy for us
    PPD="/usr/share/ghostscript/current/lib/ghostpdf.ppd"
  else
    # Older ones don't :/
    max=-1
    for version in `find /usr/share/ghostscript -maxdepth 3 -xdev  -regex "/usr/share/ghostscript/[0-9]+\.[0-9]+/lib/ghostpdf.ppd" | sed -e 's/^\/usr\/share\/ghostscript\///g' -e 's/\/lib\/ghostpdf.ppd$//g'`
    do
      [[ `echo $version | sed 's/\.//'` -gt `echo $max | sed 's/\.//'` ]] && max=$version
    done
    PPD="/usr/share/ghostscript/$version/lib/ghostpdf.ppd"
  fi
  # 4) Create the queue.
  echo | lpadmin -h localhost -p $queue -v iserv:/ -P $PPD -o printer-is-shared=no -o PageSize=$size 2>/dev/null || :
  # 5) Enable the queue.
  echo | cupsenable -h localhost $queue 2>/dev/null || :
  echo | cupsaccept -h localhost $queue 2>/dev/null || :
  # 6) Set the IServ queue as default if there is no default printer yet.
  if [ -z "$(LC_ALL=C lpstat -h localhost -d 2>/dev/null | grep 'system default destination:')" ]
  then
    echo | lpadmin -h localhost -d $queue 2>/dev/null || :
  fi
fi

Fedora 13

Voraussetzung

  • Ein Host mit (frisch installiertem?) Fedora 13 (inkl. einer gewünschten Oberfläche)
  • Benötigte Software-Pakete auf dem Linux-Client installieren:
Information Alle folgenden Terminal-Befehle sind als root auf dem Linux-Client und nicht auf dem IServ auszuführen! Falls für root auf dem Client kein Passwort gesetzt sein sollte, kann mit sudo -i eine root-Login-Shell emuliert werden.
root
yum install samba-winbind samba-winbind-clients authconfig

Client einbinden

  • das Tool authconfig starten, um die Benutzeranmeldung einzurichten:
root
authconfig-tui
  • Jetzt füge ich unter Benutzerinformation und unter Authentifizierung winbind hinzu, wähle "Weiter" und konfiguriere winbind:
    • als Sicherheitsmodell "domain"
    • Domain ist der Name meiner "Windows"-Domäne, wie sie im IServ eingetragen ist
    • Der Domain-Controller ist IServ
    • Wichtig: als Standard-Shell die bin/bash wählen!
    • nun die Arbeitsstation der Domäne hinzufügen:
      • "Domain-Mitglied werden" wählen
      • Benutzername und Passwort eines Domänen-Admins (der also Rechner in die Domäne aufnehmen darf) eingeben[1]
  • Jetzt noch dafür sorgen, dass neue (die sich auf diesem Host erstmals anmeldenden) Benutzer automatisch ein eigenes Home erhalten:
root
authconfig --update  --enablemkhomedir
  • Testen, ob der Client die Benutzer der Domäne kennt, Ergebnis sollte eine (lange) Liste sein:
root
wbinfo -u

Anmelden und Spaß haben

  • Jetzt können sich alle (!) Benutzer der Domäne sowohl an der Shell als auch an der womöglich installierten grafischen Oberfläche anmelden.
  • Ein benötigtes Home-Verzeichnis wird automatisch erstellt.
  • Achtung
    • Benutzername erfolgt in der Form MEINEDOMÄNE\vorname.nachname, also mit Angabe der Domäne!
    • Die GUI zeigt die Domänenbenutzer nicht in der Auswahlliste an, es ist also "Anderer Benutzer" zu wählen.

Screenshots


Zu erledigen:

  • Home des Benutzers automatisch einhängen
  • Quotas hinzufügen



  1. Achtung bei Rechnern mit Windows und Linux parallel: Es lässt sich jeder Rechnername nur einmal der Domäne hinzufügen. Bei einer Parallelinstallation müssen daher (nur!) die Hostnamen der beiden Betriebssysteme unterschiedliche sein!

Zugriff auf Ubuntu mittels VNC von außerhalb der Schule

Erstmal VNC auf dem Client starten. Dafür erst über SSH auf dem IServ in der Schule, dann mit SSH weiter zum Clientrechner Dabei die richtige XAuth-Datei auswählen, hier für lightdm (Ubuntu Standard).

mirko@mirko:~$ ssh root@schule.example
schule.example ~ # ssh -oStrictHostKeyChecking=no -i /var/lib/iserv/config/id_rsa root@ubunturechner.schule.example
root@ubunturechner:~# x11vnc -auth /var/lib/lightdm/.Xauthority

Dann in einem zweiten Terminal verbinden.

mirko@mirko:~$ vncviewer -via root@schule.example ubunturechner.schule.example:0

Nun öffnet sich nach kurzer Zeit ein Fenster mit dem Anmeldebildschirm. Es ist zwar alles etwas langsam und stockend, aber für Fehlersuche gut geeignet.

Direktes Drucken mit dem IServ Druckmodul

Das direkte Drucken mit dem IServ-Druckmodul ist mithilfe eines inoffiziellen Zusatzmoduls möglich und unter dem Artikel Direktes Drucken mit Linux-Clients beschrieben.