Tumblelog by Soup.io
Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

PAM und ich

Heute musste ich fuer Selfnet mal wieder Pam anfassen, da wir immer noch das Problem hatten, dass man sich zwar als lokaler Root-User anmelden kann, aber nicht wenn das Netzwerk weg ist. Dies lag daran, dass “ignore_unknown_user” nur funktioniert wenn das Ldap pam-modul auch noch den Ldap-Server erreicht.
Also mal wieder zu allem Graus die Pam Doku angeschaut mit dem Vorsatz diesmal wirklich zu wissen wie es funktioniert und nicht nur intelligent guessing zu betreiben. Jetzt mal die tiefen Einsichten in PAM.

Alle Realms funktionieren als ACL. Es gibt Standardmaessig 4 Realms naemlich auth, account, session und password. Die Bedeutung sowie fast alles Nachfolgende kann man hier in Englisch nachlesen. Ich hab hier und da noch Ergaenzungen gemacht und es gibt nochn Beispiel.

required: Wenn ein Modul, welches auf “required” gesetzt ist, einen Status ungleich “Success” zurueckgibt, wird der Vorgang nicht Erfolgreich beendet. Allerdings werden noch alle folgenden PAM-Module aufgerufen, damit angeblich es Angreifern erschwert wird den Fehler zu finden. Sprich wenn irgendein Modul das “required” ist fehlschlaegt wird alles kaputt gehen und es werden alle “required” Module ausgewertet.

requisite: Wenn ein “requisite” Modul fehlschlaegt, wird sofort abgebrochen ohne weitere Module auszuwerten.

sufficient: Wenn ein “sufficient” Modul Erfolgreich ist, dann reicht es damit das ganze Realm Erfolgreich ist. Weitere Module die als “sufficient” markiert sind werden nicht ueberprueft wenn eines erfolgreich war. Wenn es fehlschlaegt wird so lange weiter geprueft bis ein “sufficient” erfolgreich war oder das Gesamtergebnis ein Fehlschlag ist. Falls ein “required” Modul vor einem “sufficient” Fehlschlaegt, schlaegt das gesamte Realm fehl. Wenn aber ein “required” nach einem Erfolgreichen “sufficient” fehlschlagen wuerde wird das Realm trotzdem Erfolgreich beendet.

optional: Tut nix ausser es ist allein in dem Realm, dann wird bei seinem Fehlschlag das ganze Realm nicht erfolgreich beendet.

So jetzt Beispiele, zumindest ich hatte nachdem diesem Text nicht so ganz verstanden.
Also Ziel ist es jetzt, dass Root immer ueber die lokale Datenbank authentifiziert und autorisiert wird und alle anderen User ueber Ldap und das Hostflag beruecksichtigt wird:


/etc/pam.d/common-account
account required pam_unix.so # Dieses Modul ruft standard Routinen auf und wird fuer den Root-User benoetigt, schlaegt aber auch nicht Fehl fuer die Ldap User
account sufficient pam_succeed_if.so user = root #Diese Zeile laesst das Account Realm fuer den User Root erfolgreich enden
account sufficient pam_ldap.so #Falls man nicht Root ist wird noch diese Zeile ausgewertet
account required pam_deny.so #Nun muss noch ein Modul geladen werden was immer Fehlschlaegt, damit falls die beiden Sufficients fehlschlagen (dadurch wird das Realm nicht fehlerhaft beendet) auch die “requireds” fehlschlagen und somit das ganze Realm, da man ansonsten durch das erfolgreiche pam_unix.so trotzdem eingeloggt wird.


/etc/pam/common-auth
auth sufficient pam_unix.so nullok_secure #wieder das Standard Pam-Plugin welches mit nullok_secure ueberprueft, dass das Passwort nicht leer ist.
auth requisite pam_succeed_if.so user != root # nun wird mit “requisite” die ACL abgebrochen falls man User root ist damit dann bloss nicht der Ldap-Server gefragt wird, falls u.a. das Netz weg ist und der eh nicht mehr erreichbar ist.
auth sufficient pam_ldap.so use_first_pass #Nun wird fuer alle anderen User der Ldap-Server nach der Authentifizierung gefragt und zwar mit dem ersten eingegebenen Passwort, sonst muss man zwei eingeben
auth required pam_deny.so #Hier wieder das obligatorische Deny falls die “sufficients” Fehlschlagen das erste “required” aber erfolgreich war.


/etc/pam.d/common-session
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 #hiermit wird dem User ein Homedir angelegt, falls er noch keines besitzt, ansonsten hat das keine Auswirkung
session sufficient pam_ldap.so #jetzt wird das Ldap befragt ob du ne Session bekommst
session required pam_unix.so #und jetzt wieder der Standard Inix kruscht, hier gibts effektiv nix spannendes


/etc/pam.d/common-password
#auch hier ist alles Standard nix spannendes nur der Vollstaendigkeit halber.
password sufficient pam_unix.so md5 min=8 nullok
password sufficient pam_ldap.so
password required pam_deny.so


So hoffe das war halbwegs verstaendlich, da ich nur Leute kenne die PAM hassen wegen der Unverstaendlichkeit

Don't be the product, buy the product!

Schweinderl