PAM: Verschlüsselte ZFS /usr/home/<username> und pam_zfs_key.so -> Funktioniert nicht...

Rosendoktor

Well-Known Member
Hallo,

ich habe auf meinen FreeBSD Desktop Rechnern die Home Verzeichnisse der Benutzer bisher mit PEFS verschlüsselt, und beim Anmelden des jeweiligen Benutzers dessen Home mit dem pam_pefs.so PAM Modul entsperrt.

Leider ist der pefs-kmod Port schon seit geraumer Zeit in 13-CURRENT und jetzt auch in 13-RELEASE und 14-CURRENT defekt, und ob es jemals wieder geht ist ungewiss.

Daher suche ich eine andere Möglichkeit, Benutzerverzeichnisse zu Verschlüsseln und beim Anmelden zu entsperren. Eine davon wäre, verschlüsselte ZFS Datasets anzulegen und diese bei der Anmeldung mit dem pam_zfs_key.so Modul zu entsperren.

Die einzige Dokumentation dazu ist diese hier für Solaris: https://docs.oracle.com/cd/E88353_01/html/E37853/pam-zfs-key-7.html

Wenn ich damit in einer 14-CURRENT herumprobiere, passieren zwar alle möglichen schrägen Dinge, aber nie, dass das Home Verzeichnis des Benutzers entsperrt und gemountet wird...

Leider ist der ganze PAM Mechanismus für mich ein Buch mit sieben Siegeln, und ich blicke nicht durch was ich da in welche Datei und wohin unter /etc/pam.d/ schreiben soll.

Momentan sieht meine /etc/pam.d/system so aus:
Code:
#
# $FreeBSD$
#
# System-wide defaults
#

# auth
auth        sufficient    pam_opie.so        no_warn no_fake_prompts
auth        requisite    pam_opieaccess.so    no_warn allow_local
#auth        sufficient    pam_krb5.so        no_warn try_first_pass
#auth        sufficient    pam_ssh.so        no_warn try_first_pass
auth            required        pam_zfs_key.so          homes=sadachbia_zuser debug
auth        required    pam_unix.so        no_warn try_first_pass nullok


# account
#account    required    pam_krb5.so
account        required    pam_login_access.so
account        required    pam_unix.so

# session
#session    optional    pam_ssh.so        want_agent
session        required    pam_lastlog.so        no_fail

# password
#password    sufficient    pam_krb5.so        no_warn try_first_pass
password        required        pam_zfs_key.so          homes=sadachbia_zuser debug
password    required    pam_unix.so        no_warn try_first_pass

Hier der reichlich nutzlose debug.log eines Anmeldeversuchs an der Konsole:
Code:
May 15 19:25:16 sadachbia login[1447]: in openpam_dispatch(): calling pam_sm_authenticate() in /usr/lib/pam_zfs_key.so.6
May 15 19:25:16 sadachbia login[1447]: in pam_get_authtok(): entering
May 15 19:25:16 sadachbia login[1447]: in pam_get_item(): entering: PAM_RHOST
May 15 19:25:16 sadachbia login[1447]: in pam_get_item(): returning PAM_SUCCESS
May 15 19:25:16 sadachbia login[1447]: in pam_get_item(): entering: PAM_OLDAUTHTOK
May 15 19:25:16 sadachbia login[1447]: in pam_get_item(): returning PAM_SUCCESS
May 15 19:25:16 sadachbia login[1447]: in openpam_get_option(): entering: 'try_first_pass'
May 15 19:25:16 sadachbia login[1447]: in openpam_get_option(): returning NULL
May 15 19:25:16 sadachbia login[1447]: in openpam_get_option(): entering: 'use_first_pass'
May 15 19:25:16 sadachbia login[1447]: in openpam_get_option(): returning NULL
May 15 19:25:16 sadachbia login[1447]: in openpam_get_option(): entering: 'authtok_prompt'
May 15 19:25:16 sadachbia login[1447]: in openpam_get_option(): returning NULL
May 15 19:25:16 sadachbia login[1447]: in pam_get_item(): entering: PAM_AUTHTOK_PROMPT
May 15 19:25:16 sadachbia login[1447]: in pam_get_item(): returning PAM_SUCCESS
May 15 19:25:16 sadachbia login[1447]: in openpam_subst(): entering: 'Password:'
May 15 19:25:16 sadachbia login[1447]: in openpam_subst(): returning PAM_SUCCESS
May 15 19:25:16 sadachbia login[1447]: in openpam_get_option(): entering: 'echo_pass'
May 15 19:25:16 sadachbia login[1447]: in openpam_get_option(): returning NULL
May 15 19:25:16 sadachbia login[1447]: in pam_vprompt(): entering
May 15 19:25:16 sadachbia login[1447]: in pam_get_item(): entering: PAM_CONV
May 15 19:25:16 sadachbia login[1447]: in pam_get_item(): returning PAM_SUCCESS
May 15 19:25:16 sadachbia login[1447]: in openpam_ttyconv(): entering
May 15 19:25:20 sadachbia login[1447]: in openpam_ttyconv(): returning PAM_SUCCESS
May 15 19:25:20 sadachbia login[1447]: in pam_vprompt(): returning PAM_SUCCESS
May 15 19:25:20 sadachbia login[1447]: in pam_set_item(): entering: PAM_AUTHTOK
May 15 19:25:20 sadachbia login[1447]: in pam_set_item(): returning PAM_SUCCESS
May 15 19:25:20 sadachbia login[1447]: in pam_get_item(): entering: PAM_AUTHTOK
May 15 19:25:20 sadachbia login[1447]: in pam_get_item(): returning PAM_SUCCESS
May 15 19:25:20 sadachbia login[1447]: in pam_get_authtok(): returning PAM_SUCCESS
May 15 19:25:20 sadachbia login[1447]: in pam_set_data(): entering: 'pam_zfs_key_authtok'
May 15 19:25:20 sadachbia login[1447]: in pam_set_data(): returning PAM_SUCCESS
May 15 19:25:20 sadachbia login[1447]: in openpam_dispatch(): /usr/lib/pam_zfs_key.so.6: pam_sm_authenticate(): Success
May 15 19:25:20 sadachbia login[1447]: in openpam_dispatch(): calling pam_sm_setcred() in /usr/lib/pam_zfs_key.so.6
May 15 19:25:20 sadachbia login[1447]: in openpam_dispatch(): /usr/lib/pam_zfs_key.so.6: pam_sm_setcred(): Success
May 15 19:25:20 sadachbia login[1447]: in openpam_dispatch(): calling pam_sm_setcred() in /usr/lib/pam_zfs_key.so.6
May 15 19:25:20 sadachbia login[1447]: in openpam_dispatch(): /usr/lib/pam_zfs_key.so.6: pam_sm_setcred(): Success

Und jetzt? Der Key wird bei der Anmeldung NICHT gesetzt, das Dataset NICHT gemountet. :confused:

Kennt sich hier jemand mit PAM besser aus und hat einen guten Rat?

Grüße,

Robert
 

Crest

rm -rf /*
Teammitglied
Nicht das es schön wäre, aber es sollte mit pam_exec möglich sein. Dafür setzt du use_first_pass und expose_authtok. Damit kannst du das Passwort von stdin lesen und für zfs load-key verwenden sowie zfs mount ausführen. Damit das ganze gut läuft muss entweder eine anderes sufficient Modul das Passwort geprüft haben oder du nimmst das zfs load-key Ergebnis und setzt bei pam_exec return_prog_exit_status. Dann können sich aber nur noch User anmelden, die ein verschlüsseltes ZFS dataset ihr eigen nennen. Außerdem kann natürlich jemand mit physikalischem Zugriff auf deine Hardware den unverschlüsselten Teil des Systems ändern und z.B. die systemeweite profile-Datei deiner Loginshell ändern.
 

Rosendoktor

Well-Known Member
Danke Dir, hat etwas gedauert bis ich mich wieder damit beschäftigt habe. Hab es inzwischen hinbekommen mit dem pam_zfs_key Modul, es hätte so wie ich es hatte schon funktioniert (bis auf ein paar Korrekturen), lediglich ein Reboot hat gefehlt...

Danke für den Hinweis auf pam_exec. Das sollte doch auch verwendbar sein um ein EncFS zu entsperren, was unter Linux das (in FreeBSD defekte) pam_mount Modul macht. Dazu bin ich aber auch noch nicht gekommen. :rolleyes:
 
Oben