PAM

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche

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 noch
  • PAM_DENIED - Authentifizierung fehlgeschlagen
  • PAM_SUCCESS - Authentifizierung erfolgreich

PAM Modul anlegen

Um ein neues PAM Modul anzulegen braucht es 2 Schritte:

  1. Neuen Eintrag in die services/pam/config.in hinzufügen, ala 'Happy_Hour pam_happy_hour'
  2. 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.