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
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.
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.
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.
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
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.
Symptom:
Der beschriebene Fehler trat auf bei ``kinit guest'' nach Eingabe des Passworts. Grund:
Die Platte des Clientrechners war voll.
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
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.
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.
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
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.
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.
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.
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
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.
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'').
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.
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
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?
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.
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.
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
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
Problem:
Bei ssh login kein aklog, HOME nicht lesbar
Lösung:
/lib/security/pam_openafs_session.so fehlt
Problem:
asetkey: can't initialize conf dir '/etc/openafs/server'
Lösung:
In /etc/openafs/server/ThisCell muss eine AFS-Zelle eingetragen sein.
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
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.
Problem: Disk quota exceeded
Lösung:
fs setquota /afs/sed.ethz.ch/ 0
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
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.
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