PAM: Unterschied zwischen den Versionen
(kein Unterschied)
|
Version vom 3. August 2009, 20:47 Uhr
Ethersex besitzt eine PAM Metaschicht, die es erlaubt Authentifizierung leicht einzubauen, und auch das schreiben neuer Authentifizierungsmethoden erleichtert. Einige Beschränkungen gibt es dabei jedoch, so kann immer nur ein PAM Mechanismus ausgewählt werden, gegen den sich dann alle Module die PAM verwenden authentifizieren.
│ │ Load a Default Configuration ---> │ │ General Setup ---> | | ... │ │ [*] PAM Support ---> │ │ (Single_User) PAM Submodule
PAM im ECMD (TCP)
Wenn man PAM für ECMD aktiviert hat, so werden Kommandos nur dann ausgeführt wenn vorher eine Authentifizierung stattgefunden hat. Für diese gibt es 2 Möglickeiten:
auth username password
oder
auth username password befehl
Beim zweiten wird nach erfolgreicher Authentifizierung gleich der angehängte Befehl ausgeführt.
PAM im Code benutzen
Um PAM zu benutzen braucht man, da PAM unter Umständen auch asynchron laufen kann (LDAP Authentifizierung) eine Variabele die vom PAM System je nach dem Status der Authentifizierung auffüllt.
#include "services/pam/pam_prototypes.h"
...
uint8_t pam_state = PAM_UNKOWN;
pam_auth(username, password, &state);
Das PAM Subsystem verspricht, dass username und password gegebenfalls gecached werden, der Speicher kann also nach dem Aufruf sofort wiederverwendet werden. In diesem Beispiel kann die Variabele pam_state nach dem Aufruf von pam_auth 3 Werte haben:
- PAM_PENDING - Die Authentifizierung läuft nocht
- PAM_DENIED - Authentifizierung fehlgeschlagen
- PAM_SUCCESS - Authentifizierung erfolgreich
PAM Modul anlegen
Um ein neues PAM Modul anzulegen braucht es 2 Schritte:
- Neuen Eintrag in die services/pam/config.in hinzufügen, ala 'Happy_Hour pam_happy_hour'
- In services/pam eine C-Datei pam_happy_hour.c anlegen die eine pam_auth Funktion bereit stellt.
Anforderungen an die pam_auth Funktion sind:
- Muss den Wert der Variabele auth_state in einem der 3 validen Zustände halten (siehe oben)
- Muss username und password gegenfalls cachen.