Subsections

Probleme lösen

Gleicher User hat nur in einer session AFS-Zugriff (ein Token)

Dies wird Ã14ber sogenannte PAGs geregelt und ist sicherer. Wenn man das nicht will muss man das in /etc/pam.d in der entsprechenden Datei konfigurieren. z.B. so (Option nopag auf der letzten Zeile):

auth sufficient /lib/security/pam_krb5.so ignore_root debug
account sufficient /lib/security/pam_krb5.so ignore_root debug
session optional /lib/security/pam_krb5.so ignore_root debug
session optional /lib/security/pam_afs_session.so ignore_root nopag

Falsche Adressen werden verwendet, einzelne AFS-Server lassen sich nicht mehr ansprechen

AFS Prozesse, die Netzwerkverbindungen aufbauen, hören grundsätzlich auf allen IP-Adressen des Computers. Diese Adressen werden auch auf den AFS-Datenbankservern und Volume Location Servern eingetragen.

Probleme gibt es wenn:

Manchmal setzen sich die Fehler in den AFS-Datenbanken fest und lassen sich nur schwer korrigieren. Es kann helfen die Volume Location Datenbank einfach zu löschen. Diese enthält keine wichtigen Daten, sie wird nach einem Neustart einfach wieder aus den Daten der einzelnen Servern neu aufgebaut.

Um die Datenbank zu löschen müssen alle AFS-Server kurzzeitig gleichzeitig gestoppt werden, die Datenbankdateien gelöscht werden, und dann die AFS-Server neu gestartet werden.

Das Vorgehen ist folgendes:

Erst mal die Grundkonfiguration des Netzwerks unter Linux richtig einstellen.

Bei Bedarf kann man Openafs mitteilen, welche Adressen es verwenden soll. In /etc/openafs (für den Client) und /etc/openafs/server (für den Server) können die Dateien NetInfo und NetRestrict abgelegt werden. NetInfo enthält IP-Adressen, die verwendet werden sollen, NetRestrict solche, die nicht verwendet werden sollen. Die IP-Adressen in diesen Dateien stehen übereinander. Also jede Zeile eine IP-Adresse. Die Zahl 255 wird als Wildcard verwendet um ganze Subnetze auszuwählen. Folgende NetRestrict-Datei könnte die Verwendung von lokalen Netzen und Adressen verhindern:

127.0.0.1
192.168.255.255

Zu beachten ist, dass die Einstellungen in NetInfo und NetRestrict nur den Clients mitteilen welche IP-Adressen verwendet werden sollen. Die Server binden sich trotzdem an alle Interfaces des Rechners. Des Weiteren bleiben die falschen Verbindungen von früher in den Datenbanken, deshalb scheinen NetInfo und NetRestrict unter manchen Bedingungen wirkungslos. Auch da muss dann die Datenbank bereinigt, oder einfacher, gelöscht und neu erstellt werden. Dies wird im folgenden Kapitel erklärt.

Volume Location Datenbank (vldb) neu erzeugen

Auf allen ausser einem AFS-Server folgende Befehle ausführen:

/etc/init.d/openafs-fileserver stop
rm -f /var/lib/openafs/db/vldb.*

Auf dem letzten Server folgendes ausführen:

/etc/init.d/openafs-fileserver stop
rm -f /var/lib/openafs/db/vldb.*
/etc/init.d/openafs-fileserver start

Nun auf den verbleibenden Rechnern auch noch die Server neu starten:

/etc/init.d/openafs-fileserver start

Nacher müssen alle Fileserver angewiesen werden, ihre Konfiguration wieder in die Datenbank zu übermitteln. Dazu folgenden Befehl für alle Fileserver ausführen:

vos syncvldb fileservername

Wichtig ist, dass die Datenbankserver einen Moment lang alle aus sind, dann alle Files gelöscht werden, und die Server erst dann wieder gestartet werden. Wenn ein Server wieder gestartet wird während ein anderer noch mit falschen Daten läuft, werden diese sofort wieder verteilt und nichts ist gewonnen.

Anmerkung: Angebich ([*], Kapitel VLDB neu aufbauen) sollte man auch den Volserver alleine ohne den Fileserver anhalten können (bos stop servername vlserver), dies ist mir aber bei meinen Versuchen aus unerklärlichen Gründen nicht gelungen.

fs: Invalid argument; it is possible that /afs is not in AFS

Problem:

fs setacl /afs system:anyuser rl
fs: Invalid argument; it is possible that /afs is not in AFS.

Leider noch keine L"osung bekannt.

No such file or directory while initializing kadmin.local interface

kadmin.local -q "ank -randkey afs"
Authenticating as principal root/admin@INFORMATIK.UNI-MANNHEIM.DE with password
kadmin.local: No such file or directory while initializing kadmin.local interface

Lösung:

Die Principal-Datenbank muss initialisiert werden:

kdb5_util create -s

Decrypt integrity check failed

Symptom: kinit geht, aber login mit pam geht nicht.

Fehlermeldung auf dem Kerberosserver:

May 09 17:37:59 newseismo krb5kdc[660](info): AS_REQ (7 etypes
 {18 17 16 23 1 3 2}) 129.132.17.2: NEEDED_PREAUTH: guest@SED.ETHZ.CH 
  for krbtgt/SED.ETHZ.CH@SED.ETHZ.CH, Additional pre-authentication required
May 09 17:37:59 newseismo krb5kdc[660](info): preauth (timestamp) verify failure:
  Decrypt integrity check failed
May 09 17:37:59 newseismo krb5kdc[660](info): AS_REQ (7 etypes {18 17 16 23 1 3 2})
  129.132.17.2: PREAUTH_FAILED: guest@SED.ETHZ.CH for 
  krbtgt/SED.ETHZ.CH@SED.ETHZ.CH, Decrypt integrity check failed

Grund: User war auf dem Clientsystem nicht bekannt. Muss in /etc/password eingetragen sein oder über LDAP, NIS, ... verfügbar sein.

Credentials cache I/O operation failed XXX when initializing cache

Symptom:

Der beschriebene Fehler trat auf bei ``kinit guest'' nach Eingabe des Passworts. Grund:

Die Platte des Clientrechners war voll.

bos: you are not authorized for this operation

Problem:

newseismo:~# bos create -server newseismo -instance ptserver -type simple -cmd /usr/lib/openafs/ptserver -cell sed.ethz.ch -noauth
bos: failed to create new server instance ptserver of type 'simple' (you are not authorized for this operation)

Lösung: Zugriffsreche /etc/openafs/server und /etc/openafs/server-local

chmod  755 /etc/openafs/server
chmod  770 /etc/openafs/server-local
pkill bosserver
bosserver -noauth

Bosserver läuft nicht richtig

Symptom:

rx failed to send packet: rx_sendmsg: Invalid argument
rx failed to send packet: rx_sendmsg: Invalid argument
rx failed to send packet: rx_sendmsg: Invalid argument

Problem (zu finden in /var/log/openafs/BosLog):

Mon Feb 21 14:58:59 2005: unhappy with /etc/openafs/server which
 is a dir that should have at least rights 755, at most rights 775 ,
 owned by root
Mon Feb 21 14:58:59 2005: Server directory access is not okay

Die Zugriffsrechte für /etc/openafs/server stimmen nicht.

Lösung:

chmod  755 /etc/openafs/server
chmod  770 /etc/openafs/server-local
pkill bosserver
bosserver -noauth

Anderes Problem: bosserver Funktioniert immer noch nicht

Lösung:

Loopback Device war nicht konfiguriert. Eintrag in /etc/hosts und /etc/network/interfaces überprüfen. ping localhost muss funktionieren.

Server not found in Kerberos database

Auf dem Client beim aklog Befehl:

aklog 
aklog: Couldn't get sed.ethz.ch AFS tickets:
aklog: Server not found in Kerberos database while getting AFS tickets

In krb5kdc.log:

 129.132.17.2: UNKNOWN_SERVER: authtime 1107795618,  admin@SED.ETHZ.CH
   for krbtgt/ETHZ.CH@SED.ETHZ.CH, Server not found in Kerberos database

Mögliche Lösungen:

- DNS/etc/hosts falsch konfiguriert. Server wird in ETHZ.CH statt in SED.ETHZ.CH gesucht.

- In /etc/krb5.conf fehlt der Eintrag für die eigene Domain und das eigene Realm. In dem Fall wird bei Rechnern der DNS-Domain ethz.ch und das Kerberos-Realm ETHZ.CH angenommen, anstatt dem von uns konfigurierten SED.ETHZ.CH. Lösung:

[domain_realm]                                          
  .ethz.ch = SED.ETHZ.CH                                                  
  ethz.ch  = SED.ETHZ.CH

Andere Lösung: Zelle und Realm explizit angeben:

aklog sed.ethz.ch -k SED.ETHZ.CH

(Frage: Wieso wird default_realm = SED.ETHZ.CH ignoriert?)

Wenn es so auch nicht funktioniert: Auf dem Client ist in /etc/krb5.conf für den kdc ein Alias statt dem canonical Name verwendet.

z.B. gibt es bei uns einen Kerberos-Server mit den Namen newseismo.ethz.ch und newseismo.ethz.ch. /bin/hostname auf dem Server gibt newseismo aus, also muss auf dem Client in /etc/krb5.conf kdc=newseismo.ethz.ch gesetzt werden, und nicht newseismo.ethz.ch.

Client not found in Kerberos database while getting initial credentials

Problem:

newseismo:/mnt/boot/grub# kinit admin && klist
kinit(v5): Client not found in Kerberos database while getting initial credentials

Grund:

Principal admin existiert nicht. Aus irgend einem Grund wurde admin/admin statt admin eingetragen.

Lösung:

kadmin.local
kadmin.local:  addprinc admin

Couldn't get sed.ethz.ch AFS tickets

Problem:

newseismo:~# aklog
aklog: Couldn't get sed.ethz.ch AFS tickets:
aklog: Server not found in Kerberos database while getting AFS tickets

Debuginformation anzeigen:

newseismo:~# aklog -d
Authenticating to cell sed.ethz.ch (server newseismo.ethz.ch).
We've deduced that we need to authenticate to realm ETHZ.CH.
Getting tickets: afs/sed.ethz.ch@ETHZ.CH
Kerberos error code returned by get_cred: -1765328377
aklog: Couldn't get sed.ethz.ch AFS tickets:
aklog: Server not found in Kerberos database while getting AFS tickets

Offensichtlich wird versucht, sich im Realm ETHZ.CH statt SED.ETHZ.CH anzumelden. Angeblich sei das wegen einer Fehlkonfigurtion des Hosts. Der Fehler lässt sich aber umgehen, wenn man die afs Zelle und das Kerberos-Realm explizit angibt:

newseismo:~# aklog -d  sed.ethz.ch -k SED.ETHZ.CH
Authenticating to cell sed.ethz.ch (server newseismo.ethz.ch).
We were told to authenticate to realm SED.ETHZ.CH.
Getting tickets: afs/sed.ethz.ch@SED.ETHZ.CH
Identical tokens already exist; skipping.

ioctl failed oder pioctl failed

aklog: unable to obtain tokens for cell sed.ethz.ch (status: a pioctl failed).

Grund: Eine Inkompatibilität zwischen den verwendeten Versionen von AFS und dem Linux-Kernel.

Lösung: Eine ältere Kernelversion (2.4.x) oder eine neuere AFS-Version und einen ganz neuen Kernel verwenden. Hier funktionieren Kernel 2.4.27 und AFS 1.3.74 gut zusammen. Die gleiche AFS-Version funktionierte nicht richtig mit Kernel 2.6.8.

OpenAFS 1.3.81 funktioniert problemlos mit dem Debian-Kernel 2.6.8-2-686.

status: Cache Manager is not initialized / afsd is not running

Problem:

aklog: unable to obtain tokens for cell sed.ethz.ch (status: Cache Manager is not initialized / afsd is not running).

Lösung:

afsd läuft nicht.

Das Startskript will das libafs modul laden, es sucht es in /lib/modules/`uname -r`/fs/. Das Startskript sucht nach openafs.ko, bei uns heisst das Modul aber libafs.ko. Auch wenn das Modul schon geladen ist, gibt /etc/init.d/openafs start einfach auf.

Aus dem fehlerhaften Skript muss der Abschnitt mit load_client durch modprobe libafs ersetzt werden.

vicepa does not exist

Problem:

vos create -server newseismo.ethz.ch -partition /vicepa -name root.afs -cell sed.ethz.ch -noauth                                             
vos : partition /vicepa does not exist on the server

Lösung:

a) /vicepa existiert nicht

b) /vicepa war nicht gemountet, als der AFS-Server gestartet wurde.

mount /dev/sda1 /vicepa
/etc/init.d/openafs-fileserver stop
/etc/init.d/openafs-fileserver start

VLDB: no permission access for call

Problem:

VLDB: no permission access for call

Lösung:

Wenn man mit ``kinit admin'' und ``aklog'' angemeldet ist und bosserver ohne -noauth gestartet ist, muss man bei den Befehlen -noauth auch weglassen.

ldap_add: No such object (32)

Problem:

newseismo:/etc/ldap# ldapadd  -x  -D "cn=admin,dc=sed,dc=ethz,dc=ch" -W  -f /root/conti.ldif
Enter LDAP Password: 
adding new entry "uid=conti,ou=people,dc=sed,dc=ethz,dc=ch"
ldap_add: No such object (32)
        matched DN: dc=sed,dc=ethz,dc=ch

Lösung:

ou=People muss initialisiert werden.

Siehe Abschnitt 6.1 (``Einrichtung des LDAP-Servers'').

no quorum elected

Problem:

newseismo:~# pts createuser -name admin -cell sed.ethz.ch -noauth
pts: no quorum elected ; unable to create user admin

Lösung:

Bei uns: Falsche IP-Nummer in /etc/openafs/server/CellServDB

Andere Möglichkeiten:

Man liest, es habe etwas mit der Systemzeit auf verschiedenen Maschinen zu tun. Manchmal löse sich das Problem von selbst, wenn man wartet. Leider nicht hier.

Die Uhr von allen Dbservern und Fileservern muss synchronisiert werden.

Auch ein Zeitsprung auf einem Server kann Probleme bereiten. Man muss dann so lange warten, wie der Zeitsprung gedauert hat.

fs: cell dynroot not in /etc/openafs/CellServDB

Problem:

newseismo:/var/log/openafs# fs mkmount /afs/sed.ethz.ch root.cell
fs: cell dynroot not in /etc/openafs/CellServDB

Lösung:

Die Option dynroot muss in /etc/openafs/afs.conf und /etc/openafs/afs.conf.client ausgeschaltet werden, danach:

/etc/init.d/openafs-client stop
/etc/init.d/openafs-client start
kinit admin
aklog

Cannot contact any KDC

Problem:

slave1:/afs/sed.ethz.ch/home/conti# aklog sed.ethz.ch -k SED.ETHZ.CH
aklog: Couldn't get sed.ethz.ch AFS tickets:
aklog: Cannot contact any KDC for requested realm while getting AFS tickets

In krb5kdc.log:

Apr 20 12:20:06 newseismo krb5kdc[987](info): AS_REQ (7 etypes {18 17
16 23 1 3 2}) 192.168.1.31: NEEDED_PREAUTH: admin@SED.ETHZ.CH for
krbtgt/SED.ETHZ.CH@SED.ETHZ.CH, Additional pre-authentication required
Apr 20 12:20:09 newseismo krb5kdc[987](info): AS_REQ (7 etypes {18 17
16 23 1 3 2}) 192.168.1.31: ISSUE: authtime 1145528409, etypes {rep=16
tkt=16 ses=16}, admin@SED.ETHZ.CH for krbtgt/SED.ETHZ.CH@SED.ETHZ.CH
Apr 20 12:20:20 newseismo krb5kdc[987](info): TGS_REQ (1 etypes {1})
192.168.1.31: UNKNOWN_SERVER: authtime 1145528409,  admin@SED.ETHZ.CH
for afs/sed.ethz.ch@SED.ETHZ.CH, Server not found in Kerberos database
Apr 20 12:20:20 newseismo krb5kdc[987](info): TGS_REQ (1 etypes {1})
192.168.1.31: ISSUE: authtime 1145528409, etypes {rep=16 tkt=1 ses=1},
admin@SED.ETHZ.CH for afs@SED.ETHZ.CH

Lösung:

Wir haben zwei Netze: Internet und ein lokales LAN. slave1 ist im lokalen LAN und kommt nur über einen NAT/Masquerading Gateway ins Internet. Der krb und afs Server ist in beiden Netzen. Der Zugriff über die Internetadresse des Servers funktionierte nicht, aber wenn man in /etc/krb5.conf für den kdc die Adresse im lokalen Netz angibt funktioniert alles.

TODO: Weshalb geht es nicht über NAT und die Internetadresse?

no such partition

Problem: Beim Versuch, eine neue Partition anzulegen, erscheint folgende Fehlermeldung, obwohl unter /vicepb eine Partition gemountet ist.

newseismo:~# vos create newseismo /vicepb signals
vos : partition /vicepb does not exist on the server

Lösung: Partitionen müssen gemountet werden, bevor der AFS Fileserver gestartet wird. Also muss der Fileserver neu gestartet werden.

newseismo:~# /etc/init.d/openafs-fileserver stop
Stopping AFS Server: bosserver.
newseismo:~# /etc/init.d/openafs-fileserver start
Starting AFS Server: bosserver.

Ein User kann sich nicht einloggen

Problem:

Ein User kann sich über ssh nicht einloggen, alle anderen funktionieren. In /var/log/auth.log steht unter anderem folgende Fehlermeldung:

Aug  4 11:50:05 newseismo sshd[16759]: pam_krb5: pam_sm_acct_mgmt(ssh conti): entry: 
Aug  4 11:50:05 newseismo sshd[16759]: pam_krb5: pam_sm_acct_mgmt(ssh conti): exit: failure
Aug  4 11:50:05 newseismo sshd[16759]: error: PAM: Authentication service cannot retrieve authentication info. for conti from foehr.ethz.ch

Lösung:

Im Homeverzeichnis des Users befindet sich eine Datei .k5login. Nachdem diese gelöscht wurde funktionierte es bei uns wieder.

Cron hängt manchmal

Problem:

Cron führt jobs nicht aus, ps -ef zeigt viele Prozesse mit dem Namen /USR/SBIN/CRON (grossgeschrieben).

Das Problem wird auch hier beschrieben:

http://groups.google.ch/group/linux.debian.user/browse_thread/thread/f8466ceeee6e553d/4846e31d3c1edf44?lnk=st&q=&rnum=5&hl=en#4846e31d3c1edf44

Lösung:

Das Problem scheint in der Zusammenarbeit von Cron mit LDAP zu liegen. Eine neue Version von libnss-ldap muss installiert werden. Ich habe die Quellen für Debian Etch genommen und in Sarge kompililert.

echo ``deb-src http://debian.ethz.ch/debian/ testing main  non-free contrib'' >> /etc/apt/sources.list
apt-get update
apt-get install cdbs libldap2-dev libsasl2-dev automake1.9
apt-get source --compile libnss-ldap
dpkg -i libnss-ldap*deb

Einzelne Volumes sind nicht mehr erreichbar

Problem:

Einzelne Volumes sind nicht mehr erreichbar. In den Logfiles steht etwas von ``volume needs salvage''

Kontrolle, z.B. für das Volume ``home'':

vos examine -id home

Lösung:

bos salvage -server 129.132.17.20 -all
/etc/init.d/openafs-fileserver stop
/etc/init.d/openafs-fileserver start

Bei ssh login kein aklog, HOME nicht lesbar

Problem:

Bei ssh login kein aklog, HOME nicht lesbar

Lösung:

/lib/security/pam_openafs_session.so fehlt

asetkey: can't initialize conf dir '/etc/openafs/server'

Problem:

asetkey: can't initialize conf dir '/etc/openafs/server'

Lösung:

In /etc/openafs/server/ThisCell muss eine AFS-Zelle eingetragen sein.

Probleme beim Failover auf zweite Maschine

Problem: Timeout auf Client beim Zugriff, manche Serverprozesse laufen nicht.

Lösung: Folgende Befehle auf dem zweiten Server nochmals ausführen (wie bei Grundinstallation auf dem ersten Server):

bos create -server newseismo.ethz.ch -instance fs -type fs \
  -cmd /usr/lib/openafs/fileserver \
  -cmd /usr/lib/openafs/volserver \
  -cmd /usr/lib/openafs/salvager \
  -cmd /usr/lib/openafs/vlserver  -cell sed.ethz.ch

heimers@newseismo:~$ kpasswd 
Password for xxxx@SED.ETHZ.CH: 
Enter new password: : 
Enter it again: : 
kpasswd: Connection timed out changing password

Lösung:

Der Prozess kadmind läuft nicht.

 /etc/init.d/krb5-admin-server start

Server nach Failover nicht mehr erreichbar

Problem:

In einem Failoversystem sollte ein zweiter Server die AFS-Partitionen von einem externen RAID mounten und den Server starten. Nach dem Absturz des einen Servers wird der ander zwar gestartet, aber Clients erhalten keinen Zugriff.

Lösung:

Der Salvager-Prozess wurde nicht gestarter, weil die Datei /etc/openafs/server-local/SALVAGE.fs auf dem alten Server liegt.

Das Verzeichnis /etc/openafs/server-local muss ebenfalls auf gemeinsamem Storage abgelegt werden.

Disk quota exceeded

Problem: Disk quota exceeded

Lösung:

fs setquota /afs/sed.ethz.ch/ 0

aklog: Couldn't figure out realm for cell sed.ethz.ch.

Problem:

aklog
aklog: Couldn't figure out realm for cell sed.ethz.ch.

Lösung:

In /etc/openafs/CellServDB muss vorne die IP, hinter dem # der Hostname stehen. Im Problemfall stand hinten auch die IP.

Richtig:

>sed.ethz.ch
129.132.17.20           #newseismo.ethz.ch

Wrong principal in request

Problem bei kprop:

newfront:/etc/krb5kdc# /usr/sbin/kprop -d   -f  /var/lib/krb5kdc/slave_datatrans kerberos3.seismo.ethz.ch
/usr/sbin/kprop: Server rejected authentication (during sendauth exchange) while authenticating to server
Generic remote error: Wrong principal in request

Lösung:

In /etc/hosts auf dem client muss die IP-Adresse und der Hostname mit Domain stehen. In unserem Problemfall hat kprop nach host/zak@SED.ETHZ.CH gesucht, während in kerberos host/zak.ethz.ch@SED.ETHZ.CH eingetragen war.

Connection timed out

Problem:

Ohne ersichtlichen Grund kommt es immer wieder zu Fehlermeldungen ``Connection timed ou''.

Lösung:

Nicht gesichert, eine Vermutung, die in einer Newsgroup genannt wurde:

Der AFS-Cache (bei Debian /var/cache/openafs) ist in nicht konsistentem Zustand (z.B. nach Systemabsturz oder Stromausfall).

Eventuell hilft ``fs flush''. Sonst muss der AFS-Client gestoppt und dann /var/cache/openafs/* gelöscht werden. Danach den Client wieder starten.

Stefan Heimers 2011-02-25