EDV:OpenAFS: Difference between revisions

From KIP Wiki
⧌kip-jumptonavigation⧜⧌kip-jumptosearch⧜
mNo edit summary
(→‎Linux-Client: kerberos login und single-sign-on :))
Line 280: Line 280:
| Admin Server von Kerberos || '''ldap.kip.uni-heidelberg.de'''
| Admin Server von Kerberos || '''ldap.kip.uni-heidelberg.de'''
|}
|}



==== OpenAFS installieren ====
==== OpenAFS installieren ====
Line 320: Line 321:
drwxr-xr-x 2 root root 2048 2007-02-12 12:05 kip.uni-heidelberg.de
drwxr-xr-x 2 root root 2048 2007-02-12 12:05 kip.uni-heidelberg.de



==== NSS-Konfigurieren ====
==== NSS-Konfiguration (Namensauflösung) ====
FĂŒr die Namensauflösung (Nutzername/Gruppenname zu uid/gid-Nummer) ist [[EDV:LDAP|LDAP]] zustĂ€ndig.
FĂŒr die Namensauflösung (Nutzername/Gruppenname zu uid/gid-Nummer) ist [[EDV:LDAP|LDAP]] zustĂ€ndig.


Hier ist beschrieben, wie die Konfiguration erfolgen sollte: [[EDV:LDAP#NSS (Namensauflösung)]]
Wichtige Angaben:
{| {{Prettytable}}
| 1. LDAP-Server || '''ldap'''.kip.uni-heidelberg.de (129.206.176.40)
|-
| 2. LDAP-Server || '''ldap2'''.kip.uni-heidelberg.de (129.206.176.149)
|-
| search base || '''dc=kip.uni-heidelberg,dc=de'''
|-
| LDAP Version || 3
|-
|}


Deswegen installieren wir nun die entsprechenden Tools vom [[EDV:LDAP|LDAP]]-Client:
aptitude install libnss-ldap ldap-utils


==== PAM-Konfiguration (Pluggable Authentication Modules) ====
Die '''/etc/ldap/ldap.conf''' sollte nun so aussehen:
Wenn zum Login die AFS bzw. LDAP-Accounts verwendet werden sollen, muss PAM entsprechend konfiguriert werden.
URI ldap://ldap.kip.uni-heidelberg.de ldap://ldap2.kip.uni-heidelberg.de
BASE dc=kip.uni-heidelberg,dc=de
ldap_version 3
TLS_REQCERT allow
tls_cacert /etc/ssl/kip.crt


Zur Vorbereitung muss erst einmal das LDAP-PAM-Module wie hier beschrieben konfiguriert werden: [[EDV:LDAP#PAM (Pluggable Authentication Modules)]]
Die Datei '''kip.crt''' gibt es hier: [[EDV:KIP-Wurzelzertifikat|KIP-Wurzelzertifikat]]


Nun die PAM-Module installieren:
In der '''/etc/libnss-ldap.conf''' muss folgendes enthalten sein:
aptitude install libpam-heimdal libpam-openafs-session
uri ldap://ldap.kip.uni-heidelberg.de/ ldap://ldap2.kip.uni-heidelberg.de/
base dc=kip.uni-heidelberg,dc=de


Jetzt nur noch einen Eintrag fĂŒr '''pam_krb5.so''' fĂŒr den jeweiligen Dienst hinzufĂŒgen oder
An den EintrÀgen '''passwd''' und '''group''' in der '''/etc/nsswitch.conf''' muss ldap angehÀngt werden:
allgemein in den '''common-*'''-Dateien.
passwd: compat ldap
Damit es nicht zu einfach wird teilen wir jetzt alles auf.
group: compat ldap
Die Authentisierung lĂ€uft ĂŒber Kerberos, das Accountmanagement ĂŒber LDAP und fĂŒr die Session benötigen wir AFS.
shadow: compat
Die fertigen PAM-Dateien/EintrÀge sehen dann zum Beispiel so aus:


#/etc/pam.d/common-auth
auth sufficient '''pam_krb5.so''' ignore_root '''minimum_uid=1000'''
auth required pam_unix.so nullok_secure


#/etc/pam.d/common-account
==== PAM-Konfigurieren ====
account sufficient '''pam_ldap.so''' ignore_unknown_user
account required pam_unix.so


#/etc/pam.d/common-session
libpam-heimdal
session optional '''pam_krb5.so''' ignore_root
libpam-ldap
session optional '''pam_openafs_session.so'''
libpam-openafs-kaserver
session required pam_unix.so
libpam-openafs-session




==== Single-Sign-On ĂŒber SSH ====
common-auth
Gleich vorweg, die normale Public-Key-Authentisierung von SSH funktioniert nicht,
auth sufficient pam_krb5.so debug ignore_root
da kein anonymer Zugriff auf das '.ssh'-Verzeichnis im AFS möglich ist und auch nicht sein sollte!
auth required pam_unix.so nullok_secure


Aber als Lösung fĂŒr ein Single-Sign-On bietet sich die GSSAPI-Authentisierung von SSH an.
common-account
Nun sind dazu einige Schritte nötig:
account sufficient pam_ldap.so debug ignore_unknown_user ignore_root
account required pam_unix.so


common-session
session optional pam_krb5.so debug ignore_root
session optional pam_openafs_session.so debug
session required pam_unix.so


===== SSH-Server konfigurieren =====
/etc/pam_ldap.conf
In der '''/etc/ssh/sshd_config''' folgendes rein schreiben:
...
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

SSH-Server neustarten:
/etc/init.d/ssh restart


===== SSH-Client konfigurieren =====
Damit der Client auch GSSAPI verwendet muss dies explizit eingestellt werden.
Dazu entweder in der globales '''/etc/ssh/ssh_config''' oder in der Nutzerspezifischen '''~/.ssh/config''' folgendes eintragen:
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes


===== Kerberos Host-Key erstellen =====
FĂŒr die Authentisierung ist ein Host-Key von Kerberos notwendig!
{{Achtung|{{IconAchtung}} Dieser kann allerdings nur von der [[EDV:EDV-Abteilung|EDV-Abteilung]] erstellt und eingetragen werden!}}

Dazu Key im LDAP erstellen ('''gq''')!

Nun als root auf dem Rechner einloggen (hostY):
root@'''hostY''':~# kadmin -p '''user/admin'''
kadmin> cpw -r host/'''hostY'''.kip.uni-heidelberg.de
kadmin> get host/'''hostY'''.kip.uni-heidelberg.de
kadmin> ext host/'''hostY'''.kip.uni-heidelberg.de
kadmin> quit

Kontrolle:
root@'''hostY''':~# ktutil list


===== Kerberos Key holen und einloggen =====
Damit wir uns nun einloggen können mĂŒssen wir uns den entsprechenden Kerberos-Key holen.
kinit userX
klist -v

{{Achtung|Das '''krbtgt''' (Kerberos-Ticket-Granting-Ticket) muss '''forwardable''' sein! Das kann mit 'klist -v' kontrolliert werden:
klist -v}}

Nun sollte ein Login ohne weitere Passwordeingabe auf den Server möglich sein:
ssh -l userX hostY


=== Solaris ===
=== Solaris ===

Revision as of 10:53, 7 March 2007

OpenAFS am KIP


Allgemeines


Was ist (Open)AFS?

AFS ist ein sicheres, verteiltes Dateisystem, welches an der Carnegie Mellon UniversitĂ€t entwickelt wurde. Danach wurde es von der Transarc Corporation, die mittlerweile von IBM ĂŒbernommen wurde, vermarktet.

IBM ermöglichte dann eine parallele Weiterentwicklung als w:de:Open Source (http://www.openafs.org).


Warum (Open)AFS?

Es gibt mehrere Vorteile von AFS (ohne Anspruch auf VollstÀndigkeit):

  • Die Daten können transparent ĂŒber mehrere Server verteilt werden.
  • Jeder kann auf das AFS mit einem Client zugreifen.
  • Es gibt w:de:Access Control Listen (ACL), welche eine bessere Rechteverwaltung ermöglichen.
  • w:de:Disk Quotas sind elementare Bestandteile von AFS.

Verwendung

Authentisieren

Um mit AFS arbeiten zu können, muss man sich erst authentisieren (w:de:Authentisierung), da man sonst nur die Reche der Gruppe system:anyuser (also Anonymous) hat.

AFS arbeitet dabei mit Kerberos4-Token (w:de:Kerberos (Informatik)).


Arbeiten mit AFS-Kommandos

Die folgenden Kommondos sind alle bei (Open)AFS dabei und können ohne zusÀtzliches Kerberos verwendet werden.

Mit dem tokens-Kommando kann ĂŒberprĂŒft werden, ob ein solches Token existiert und wie lange es gĂŒltig ist:

userX@pcY:~$ tokens

Tokens held by the Cache Manager:

User's (AFS ID 1000) tokens for afs@kip.uni-heidelberg.de [Expires Feb 27 18:15]
   --End of list--

Zum Erhalten oder Erneuern eines Tokens, wird klog verwendet:

userX@pcY:~$ klog userX

Die GĂŒltigkeit eines solchen Tokens bezieht sich standardmĂ€ĂŸig auf einen Nutzer auf einem Rechner, in allen Shells (w:de:Betriebssystem-Shell, w:de:Unix-Shell). Um diese GĂŒltikeit nur auf eine Shell zu beziehen, muss man diese mit kpagsh kapseln und danach erst das Token holen:

userX@pcY:~$ pagsh
userX@pcY:~$ klog userX

Zum Zerstören des Tokens vor dem Ende seiner Laufzeit gibt es unlog:

userX@pcY:~$ unlog
userX@pcY:~$ tokens

Tokens held by the Cache Manager:

   --End of list--

Arbeiten mit Kerberos-Kommandos

Da wir Heimdal-Kerberos fĂŒr die Authentisierung von AFS verwenden, können auch die Heimdal-Clients zur Authentisierung verwendet werden. Wenn OpenAFS gestartet ist, wird dann neben dem Kerberos-Ticket auch automatisch ein AFS-Token geholt.

Zur Abfrage der Tickets wird klist verwendet. Mit der Option '-T' wird auch gleich das AFS-Token angezeigt, falls vorhanden:

userX@pcY:~$ klist -T
Credentials cache: FILE:/tmp/krb5cc_1000
        Principal: userX@KIP.UNI-HEIDELBERG.DE

  Issued           Expires          Principal
Feb 27 16:25:00  Feb 28 02:24:59  krbtgt/KIP.UNI-HEIDELBERG.DE@KIP.UNI-HEIDELBERG.DE
Feb 27 16:25:00  Feb 28 02:24:59  afs@KIP.UNI-HEIDELBERG.DE

Feb 27 16:25:00  Feb 28 02:24:59  User's (AFS ID 1000) tokens for kip.uni-heidelberg.de

Um ein Ticket zu erhalten, gibt es kinit. Das Token wird automatisch mit erzeugt:

userX@pcY:~$ kinit userX

Innerhalb der GĂŒligkeit kann das Kerberos-Ticket auch verlĂ€ngert werden, ohne das Passwort nochmal neu eingeben zu mĂŒssen:

userX@pcY:~$ kinit -R

Um die eigene Shell zu kapseln, gibt es dann kpagsh:

userX@pcY:~$ kpagsh

Zum Zerstören aller Tickets (und des Tokens) dient kdestroy:

userX@pcY:~$ kdestroy
userX@pcY:~$ klist -T
klist: No ticket file: /tmp/krb5cc_1000

Access Control Lists (ACLs)

Achtung: Von den Unix/Linux-Protection-Bits fĂŒr User, Group und Others werden nur die von User verwendet. Dies erfolgt, nachdem die ACL ausgewertet wurde.


Unterschied der AFS-ACLs zu Unix-Dateirechten

Im typischen Unix-/Linux-Dateisystem existieren nur die drei Klassen EigentĂŒmer, Gruppe, Alle. Eine Datei hat dann genau einen EigentĂŒmer und genau eine Gruppe. Nun können jeder dieser Klassen fĂŒr jede Datei bestimmte Rechte gegeben werden. Zum Beispiel (Ausgabe von ls -l):

-rw-r--r-- 1 floh users 396811 2006-11-10 17:12 Neuenheimer_Feld_Plan.jpg

Es ist eine feinere Rechteaufteilung implementiert (siehe Punkt EDV:OpenAFS#Rechte im AFS) und vor allem können beliebig viele Gruppen und Personen in einer ACL vorkommen. Zum Beispiel (Ausgabe von fs listacl):

Access list for /afs/kip/user/home1/sesselm is
Normal rights:
  s3 rl
  system:administrators rlidwka
  system:authuser l
  sesselm rlidwka
Leider können solche ACLs nur auf Verzeichnisse angewendet werden.

Besondere Gruppen im AFS

Gruppe Wer gehört zu dieser Gruppe
system:anyusers Jeder (Anonym)
system:authusers Alle Nutzer, die sich (erfolgreich gegenĂŒber dem AFS) authentisiert haben.
system:administrators Gruppe der Administratoren

Rechte im AFS

Es existieren sieben Zugriffsrechte im AFS:

Recht Langform Bedeutung
l Lookup Auflisten des Inhaltes des Verzeichnisses und Anzeige der ACL
i Insert EinfĂŒgen/Anlegen von Dateien/Verzeichnissen in dem Verzeichnis
d Delete Löschen von Dateien/Verzeichnissen in dem Verzeichnis
a Administer Ändern der ACL des Verzeichnisses
r Read Lesen von Dateien
w Write Schreiben/Ändern von Dateien (Achtung.svg nicht neue Dateien anlegen)
k Lock Sperren von Dateien mit flock

Damit man diese Rechte nicht immer alle einzeln angeben muss, gibt es folgende kurzen Aliase:

Alias AusfĂŒhrlich Bedeutung
write rlidwk Schreiben (alle außer Administer)
read rl Lesen und Lookup
all rlidwka Alle Rechte (auch a)
none Kein Recht, dient zum Entfernen von Rechten

Rechte lesen und setzen

Mit fs listacl [Eintrag]+ erhĂ€lt man die gĂŒltige ACL des Eintrages (Datei/Verzeichnis):

fs listacl *

Mit fs setacl kann eine ACL geÀndert werden (oder gleich mehrere):

fs setacl -dir ./mydirectory -acl system:anyuser read
fs setacl -dir ./mydirectory ./mydir2 -acl system:anyuser none userX read groupY l

Um sich mit den Befehlen vertraut zu machen, kann fs help verwendet werden:

fs help
fs help listacl
fs help setacl
Achtung.svg Es gibt auch negative Rechte (verbieten).

Diese haben Vorrang vor normalen Rechten und sollten nur mit Ă€ußerster Vorsicht verwendet werden (daher auch hier nur am Rande erwĂ€hnt)!

fs setacl -dir ./mydir -acl userY rl -negative

NĂŒtzliche Kommandos

Die Hilfeseiten der Kommandos sind meist schon sehr selbsterklÀrend und sollten deshalb auch verwendet werden:

fs help
fs help listquota
fs help listacl
pts help
pts help listentries

Auflisten der ACLs:

fs listacl /afs/kip/temp

Ändern der ACL:

fs setacl /afs/kip/temp system:administrator all

Auflisten der Quota:

fs quota /afs/kip/temp
fs listquota /afs/kip/temp

Herausfinden des Volumes zum Mountpoint:

fs lsmount /afs/kip/temp

Löschen des Eintrags im Cache des AFS-Clients:

fs flush /afs/kip/temp

Auflisten aller Nutzer im AFS:

pts listentries

Auflisten aller Gruppen im AFS:

pts listentries -groups

Auflisten der Nutzer in einer AFS-Gruppe:

pts members users

Client-Installation (Zugang zum AFS)

Die CellServDB/ThisCell

Unsere Zelle (Cell) im KIP ist natĂŒrlich kip.uni-heidelberg.de, daher sieht die ThisCell-Datei so aus:

kip.uni-heidelberg.de 

In der CellServDB sollte fĂŒr die KIP-Zelle folgender Eintrag stehen:

>kip.uni-heidelberg.de
129.206.176.40          # ldap.kip.uni-heidelberg.de
129.206.176.149         # ldap2.kip.uni-heidelberg.de

Diese Datei ist auch unter /afs/kip/common/etc/CellServDB zu finden.

Linux-Client

Hier am Beispiel von Debian mit einem 2.6.x Kernel.


Heimdal Kerberos (Client) installieren

Dies ist optional, kann aber unter UmstĂ€nden einiges vereinfachen, da unser AFS auch auf Heimdal zurĂŒckgreift.

aptitude install heimdal-clients 

Die folgenden Fragen wie folgt beantworten:

Kerberos Realm KIP.UNI-HEIDELBERG.DE
Hesiod-Domain .kip.uni-heidelberg.de
Kerberos Server ldap.kip.uni-heidelberg.de ldap2.kip.uni-heidelberg.de
Admin Server von Kerberos ldap.kip.uni-heidelberg.de


OpenAFS installieren

Binaries installieren:

aptitude install openafs-client

Die folgenden Fragen wie folgt beantworten:

AFS-Zelle kip.uni-heidelberg.de
GrĂ¶ĂŸe des AFS-Cache (kb) 50000
/afs dynamisch ? Nein
Rechnernamen des Datenbank-Servers afsdb1.kip.uni-heidelberg.de afsdb2.kip.uni-heidelberg.de
Openafs-Client starten Ja (oder Nein wenn nicht erwĂŒnscht)


OpenAFS Kernel Modul erstellen/installieren

Um das Kernel-Modul fĂŒr OpenAFS zu erstellen, ist Folgendes zu tun:

aptitude install module-assistant openafs-module-source
cd /usr/src
module-assistant prepare openafs
module-assistant build openafs
dpkg -i openafs-modules-2.6.18-3-686_1.4.2-4+2.6.18-7_i386.deb
Dies gilt nur fĂŒr den aktuellen Kernel und muss dann fĂŒr andere Kernel wiederholt werden!

Nun kann auch der OpenAFS-Client gestartet werden:

/etc/init.d/openafs-client force-start

Test

$ ls -l /afs
lrwxr-xr-x 1 daemon root   21 2007-01-31 12:37 kip -> kip.uni-heidelberg.de
drwxr-xr-x 2 root   root 2048 2007-02-12 12:05 kip.uni-heidelberg.de


NSS-Konfiguration (Namensauflösung)

FĂŒr die Namensauflösung (Nutzername/Gruppenname zu uid/gid-Nummer) ist LDAP zustĂ€ndig.

Hier ist beschrieben, wie die Konfiguration erfolgen sollte: EDV:LDAP#NSS (Namensauflösung)


PAM-Konfiguration (Pluggable Authentication Modules)

Wenn zum Login die AFS bzw. LDAP-Accounts verwendet werden sollen, muss PAM entsprechend konfiguriert werden.

Zur Vorbereitung muss erst einmal das LDAP-PAM-Module wie hier beschrieben konfiguriert werden: EDV:LDAP#PAM (Pluggable Authentication Modules)

Nun die PAM-Module installieren:

aptitude install libpam-heimdal libpam-openafs-session

Jetzt nur noch einen Eintrag fĂŒr pam_krb5.so fĂŒr den jeweiligen Dienst hinzufĂŒgen oder allgemein in den common-*-Dateien. Damit es nicht zu einfach wird teilen wir jetzt alles auf. Die Authentisierung lĂ€uft ĂŒber Kerberos, das Accountmanagement ĂŒber LDAP und fĂŒr die Session benötigen wir AFS. Die fertigen PAM-Dateien/EintrĂ€ge sehen dann zum Beispiel so aus:

#/etc/pam.d/common-auth
auth     sufficient   pam_krb5.so   ignore_root minimum_uid=1000
auth     required     pam_unix.so   nullok_secure
#/etc/pam.d/common-account
account  sufficient   pam_ldap.so   ignore_unknown_user
account  required     pam_unix.so 
#/etc/pam.d/common-session
session  optional     pam_krb5.so   ignore_root
session  optional     pam_openafs_session.so 
session  required     pam_unix.so


Single-Sign-On ĂŒber SSH

Gleich vorweg, die normale Public-Key-Authentisierung von SSH funktioniert nicht, da kein anonymer Zugriff auf das '.ssh'-Verzeichnis im AFS möglich ist und auch nicht sein sollte!

Aber als Lösung fĂŒr ein Single-Sign-On bietet sich die GSSAPI-Authentisierung von SSH an. Nun sind dazu einige Schritte nötig:


SSH-Server konfigurieren

In der /etc/ssh/sshd_config folgendes rein schreiben:

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

SSH-Server neustarten:

/etc/init.d/ssh restart


SSH-Client konfigurieren

Damit der Client auch GSSAPI verwendet muss dies explizit eingestellt werden. Dazu entweder in der globales /etc/ssh/ssh_config oder in der Nutzerspezifischen ~/.ssh/config folgendes eintragen:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes


Kerberos Host-Key erstellen

FĂŒr die Authentisierung ist ein Host-Key von Kerberos notwendig!

Achtung.svg Dieser kann allerdings nur von der EDV-Abteilung erstellt und eingetragen werden!

Dazu Key im LDAP erstellen (gq)!

Nun als root auf dem Rechner einloggen (hostY):

root@hostY:~# kadmin -p user/admin
kadmin> cpw -r host/hostY.kip.uni-heidelberg.de
kadmin> get host/hostY.kip.uni-heidelberg.de
kadmin> ext host/hostY.kip.uni-heidelberg.de
kadmin> quit

Kontrolle:

root@hostY:~# ktutil list


Kerberos Key holen und einloggen

Damit wir uns nun einloggen können mĂŒssen wir uns den entsprechenden Kerberos-Key holen.

kinit userX
klist -v
Das krbtgt (Kerberos-Ticket-Granting-Ticket) muss forwardable sein! Das kann mit 'klist -v' kontrolliert werden:
klist -v

Nun sollte ein Login ohne weitere Passwordeingabe auf den Server möglich sein:

ssh -l userX hostY

Solaris

Windows

Backup

Dateien von gestern, Àltere Dateien ...