Diese Anleitung beschreibt die vom RRZE empfohlene Grundkonfiguration zur Anbindung eines Ubuntu-Systems an die Kerberos Infrastruktur des RRZE. Die meisten Schritte sind allerdings allgemeingültig uns können für eigene Installationen leicht angepasst werden.
Nach Durchführung aller Schritte wird bei Systemanmeldung automatisch ein Kerberos-Ticket zur Verfügung gestellt und Anmeldungen per SSH an und von dem System sind per Kerberos-Authentifizierung möglich. Außerdem können CIFS und NFSv4 Netzlaufwerke kerberos-authentifiziert eingebunden werden.
Pakete für Ubuntu 20.04 und höher
# i-want-it-all one-liner
bash$ sudo DEBIAN_FRONTEND=noninteractive apt-get install krb5-user libsasl2-modules-gssapi-mit libpam-krb5 nfs-common keyutils cifs-utils openssh-server openssh-client
# single services
# for kerberos login authentication
bash$ sudo DEBIAN_FRONTEND=noninteractive apt-get install krb5-user libpam-krb5
# for kerberized ssh logins (client + server side)
bash$ sudo DEBIAN_FRONTEND=noninteractive apt-get install openssh-server openssh-client
# for kerberos nfsv4 mounts
bash$ sudo DEBIAN_FRONTEND=noninteractive apt-get install nfs-common keyutils
# for kerberized windows cifs mounts
bash$ sudo DEBIAN_FRONTEND=noninteractive apt-get install cifs-utils
# to enable kerberos support via GSSAPI for various software packages (e.g. pidgin)
bash$ sudo DEBIAN_FRONTEND=noninteractive apt-get install libsasl2-modules-gssapi-mit
Kerberos Join (LINUX.FAU.DE) / Download der Keytab
Wird benötigt, wenn NFSv4-Freigaben eingebunden oder Kerberos-authentifizierte Dienste auf dem Host betrieben werden sollen.
Der Kerberos Join ermöglicht eine Anbindung des Clients an die LDAP Infrastruktur des RRZE, sowie den Bezug einer Keytab mit ServicePrincipals, um eigene Dienste mit Kerberos-Authentifizierung anzubieten. Klassischerweise ist das unter Linux z.B. der Host-Principal für per Kerberos authentifizierte SSH Logins auf dem Client.
Der Join (genauer: eine Keytab mit NFS-Principal) wird ebenfalls benötigt, um NFSv4-Freigaben einbinden zu können.
Die entsprechende Anleitung zur Aktivierung von Kerberos für Ihr System finden Sie auf der Seite des rrzelinux Kommandozeilenwerkzeugs unter „Kerberos Join durchführen„.
Konfiguration
Einrichtung der verschiedenen Dienste.
Kerberos
Die Grundkonfiguration für Kerberos an der FAU ist können Sie nach folgendem Beispiel übernehmen.
Bitte beachten Sie die Kommentare und führen Sie ggf. notwendige Anpassungen durch.
bash$ for i in $(grep -l minimum_uid=1000 /etc/pam.d/* | grep -v -e bak -e old); do echo $i; sudo sed -i -e 's/minimum_uid=1000/minimum_uid=2000/' $i; done bash$ sudo cp /etc/krb5.conf /etc/krb5.conf_old bash$ sudo vi /etc/krb5.conf [libdefaults] default_realm = LINUX.FAU.DE kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true # maximum is 24h - but client defaults to 10h ticket_lifetime = 10h [realms] FAUAD.FAU.DE = { kdc = fauad.fau.de:88 auth_to_local = RULE:[1:$1] auth_to_local = DEFAULT } LINUX.FAU.DE = { kdc = linuxkdc.rrze.uni-erlangen.de:88 auth_to_local = RULE:[1:$1] auth_to_local = DEFAULT } EXCH.FAU.DE = { kdc = exch.fau.de:88 auth_to_local = RULE:[1:$1] auth_to_local = DEFAULT } UBAD.FAU.DE = { kdc = ubad.fau.de:88 auth_to_local = RULE:[1:$1] auth_to_local = DEFAULT } [domain_realm] # Add domain-realm mappings here # Additional mapping are necessary to map hostnames to a kerberos realm other than # the default realm set below # Examples: # some-windows-host.xyz.uni-erlangen.de = FAUAD.FAU.DE # some-linux-host.xyz.uni-erlangen.de = LINUX.FAU.DE # ... # some usual windows hosts mordor.rrze.uni-erlangen.de = FAUAD.FAU.DE moloch.rrze.uni-erlangen.de = FAUAD.FAU.DE home.rrze.uni-erlangen.de = FAUAD.FAU.DE projekte.rrze.uni-erlangen.de = FAUAD.FAU.DE fauprint.rrze.uni-erlangen.de = FAUAD.FAU.DE fauprint2.rrze.uni-erlangen.de = FAUAD.FAU.DE wisoprint.wiso.uni-erlangen.de = FAUAD.FAU.DE wisoprint2.wiso.uni-erlangen.de = FAUAD.FAU.DE rocky.rrze.uni-erlangen.de = FAUAD.FAU.DE newton.wiso.uni-erlangen.de = FAUAD.FAU.DE fausmb.rrze.uni-erlangen.de = FAUAD.FAU.DE mecke12.rrze.uni-erlangen.de = FAUAD.FAU.DE godzilla.rrze.uni-erlangen.de = FAUAD.FAU.DE .exch.fau.de = EXCH.FAU.DE .ubad.fau.de = UBAD.FAU.DE # choose what should be the default below # if not specified otherwise - all hosts will be seen as members of the FAUAD.FAU.DE realm by default #.fau.de = FAUAD.FAU.DE #.uni-erlangen.de = FAUAD.FAU.DE # if not specified otherwise - all hosts will be seen as members of the LINUX.FAU.DE realm by default .fau.de = LINUX.FAU.DE .uni-erlangen.de = LINUX.FAU.DE [login] #krb4_convert = true #krb4_get_tickets = false [logging] kdc = SYSLOG:INFO:DAEMON admin_server = SYSLOG:INFO:DAEMON default = SYSLOG:INFO:DAEMON
SSH Client
Folgende Einstellungen ermöglichen das kerberos-authentifizierte Einloggen auf anderen Systemen via SSH.
bash$ sudo cp /etc/ssh/ssh_config /etc/ssh/ssh_config_old bash$ sudo vi /etc/ssh/ssh_config ... GSSAPIAuthentication yes GSSAPIDelegateCredentials yes GSSAPITrustDns yes ...
SSH Server
Folgende Einstellungen ermöglichen das kerberos-authentifizierte Einloggen von anderen Systemen via SSH.
bash$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_old bash$ sudo vi /etc/ssh/sshd_config ... GSSAPIAuthentication yes GSSAPICleanupCredentials yes ...
NFS Client
Folgende Einstellungen konfigurieren das Name-Id-Mapping für NFSv4 Netzlaufwerke.
bash$ sudo cp /etc/idmapd.conf /etc/idmapd.conf_old bash$ sudo vi /etc/idmapd.conf [General] Verbosity = 0 Pipefs-Directory = /run/rpc_pipefs # have no fear - we only need fauad.fau.de as single unified namespace! Domain = fauad.fau.de Local-Realms = LINUX.FAU.DE,FAUAD.FAU.DE [Mapping] Nobody-User = nobody Nobody-Group = nogroup
CIFS Client
Folgende Einstellungen ermöglichen das kerberos-authentifizierte Einbinden von CIFS Netzlaufwerken.
bash$ sudo cp /etc/request-key.conf /etc/request-key.conf_old
bash$ sudo vi /etc/request-key.conf
...
create cifs.spnego * * /usr/sbin/cifs.upcall -t %k
...
bash$ sudo cp /etc/request-key.d/cifs.spnego.conf /etc/request-key.d/cifs.spnego.conf_old
bash$ sudo vi /etc/request-key.d/cifs.spnego.conf
create cifs.spnego * * /usr/sbin/cifs.upcall -t %k
Generic Security Api (GSS)
Stellen Sie sicher der der gssd gestartet ist:
bash$ ps aux | grep gssd root 1760 0.8 0.0 43796 3852 ? Ss Nov15 112:24 /usr/sbin/rpc.gssd
Sollte das nicht der Fall sein , so starten Sie den gssd mittels
# Ubuntu 20.04 und höher bash$ sudo systemctl start rpc-gssd
Restart/Reboot
Nach der Umstellung auf Kerberos – insbesondere bei Verwendung der NFS/CIFS Funktionalität – ist ein Reboot dringend empfohlen. Generell können Tests mit falschen oder unvollständigen Konfigurationen dazu führen, dass der Kernel ungültige Informationen cached und dadurch darauffolgende Versuche – sogar mit korrekter Konfiguration – fehlschlagen. Leider scheint der einzig effektive Weg ein Reboot zu sein, um sicher zu gehen, dass jegliche Caches geleert sind (Stichwort: Kernel keyring).
Test
Um die korrekte Einrichtung zu verifizieren können die hier beschriebenen Tests durchgeführt werden.
Kerberos
bash$ kinit [Kennung] bash$ klist Ticket cache: FILE:/tmp/krb5cc_[UID]_qdIQWB Default principal: [Kennung]@LINUX.FAU.DE Valid starting Expires Service principal 17.11.2016 16:07:22 18.11.2016 16:07:22 krbtgt/LINUX.FAU.DE@LINUX.FAU.DE
SSH Client
bash$ ssh dialog.rrze.uni-erlangen.de
# login success
bash$ klist
Ticket cache: FILE:/tmp/krb5cc_[UID]_fNDrEQQxAx
Default principal: [Kennung]@LINUX.FAU.DE
Valid starting Expires Service principal
17.11.2016 17:16:44 18.11.2016 16:07:22 krbtgt/LINUX.FAU.DE@LINUX.FAU.DE
NFS
bash$ sudo mkdir /mnt/rzlin bash$ sudo mount -t nfs4 -o minorversion=1,sec=krb5p rrzenfs4.rrze.uni-erlangen.de:/export/linuxhome /mnt/rzlin bash$ sudo su $USER bash$ cd /mnt/rrzelinuxhome/$USER bash$ ls -al insgesamt 1116 drwx------ 52 [Kennung] fau_user 12288 Nov 17 17:16 . drwx-----x 6254 root root 483328 Nov 17 15:05 .. ... bash$ exit bash$ sudo umount /mnt/rzlin bash$ sudo rmdir /mnt/rzlin
CIFS
bash$ id uid=[UID]([KENNUNG]) gid=100000(fau_user) Gruppen=100000(fau_user),... # root werden bash$ sudo su bash$ mkdir -p /mnt/rzwin/[KENNUNG] # WICHTIG: Der Mount-Befehl benötigt root-Rechte aber die Felder [KENNUNG]/[UID] (siehe Ausgabe des "id" Befehls) müssen auf einen unprivilegierten Zugang verweisen, für den ein Home-Verzeichnis tatsächlich existiert. bash$ mount -t cifs -o user=[KENNUNG],domain=FAUAD,sec=krb5,cruid=[UID],multiuser,noserverino,nodfs,vers=2.1 //home.rrze.uni-erlangen.de/[KENNUNG] /mnt/rzwin/[KENNUNG] # Anmerkung für Ubuntu 17.10: # Scheinbar ist hier außerdem die Angabe der SMB Version erforderlich # Beispiel: -o vers=2.1 bash$ su [KENNUNG] bash$ cd /mnt/rzwin/[KENNUNG] bash$ ls -al ... bash$ exit bash$ umount /mnt/rzwin/[KENNUNG] bash$ rmdir /mnt/rzwin/[KENNUNG] bash$ rmdir /mnt/rzwin