Skip to content

Commit 7c05a38

Browse files
committed
pam: implement a zfs_key pam module
currently the pam module does: * load a zfs key and mounts the dataset when a session opens * unmounts the dataset and unloads the key when the session closes * when the user is logged on and changes the password, the modules changes the encryption key. Signed-off-by: Felix Dörre <[email protected]> Closes #9886
1 parent 25df8fb commit 7c05a38

File tree

8 files changed

+692
-2
lines changed

8 files changed

+692
-2
lines changed

config/always-pam.m4

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PAM], [
2+
AC_ARG_ENABLE(pam,
3+
AC_HELP_STRING([--enable-pam],
4+
[install pam_zfs_key module [[default: check]]]),
5+
[enable_pam=$enableval],
6+
[enable_pam=check])
7+
8+
AC_ARG_WITH(pammoduledir,
9+
AC_HELP_STRING([--with-pammoduledir=DIR],
10+
[install pam module in dir [[/lib/security]]]),
11+
pammoduledir=$withval,pammoduledir=/lib/security)
12+
13+
AC_ARG_WITH(pamconfigsdir,
14+
AC_HELP_STRING([--with-pamconfigsdir=DIR],
15+
[install pam-config files in dir [[/usr/share/pamconfigs]]]),
16+
pamconfigsdir=$withval,pamconfigsdir=/usr/share/pam-configs)
17+
18+
AS_IF([test "x$enable_pam" != "xno"], [
19+
AC_CHECK_HEADERS([security/pam_modules.h security/pam_ext.h], [
20+
enable_pam=yes
21+
], [
22+
AS_IF([test "x$enable_pam" == "xyes"], [
23+
AC_MSG_FAILURE([*** security/pam_modules.h missing, libpam0g-dev package required])
24+
])
25+
])
26+
27+
])
28+
AM_CONDITIONAL([PAM_ZFS_ENABLED], [test "x$enable_pam" = xyes])
29+
AC_SUBST(pammoduledir)
30+
AC_SUBST(pamconfigsdir)
31+
])

config/zfs-build.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
162162
ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD
163163
ZFS_AC_CONFIG_ALWAYS_SYSTEM
164164
ZFS_AC_CONFIG_ALWAYS_ARCH
165+
ZFS_AC_CONFIG_ALWAYS_PAM
165166
ZFS_AC_CONFIG_ALWAYS_PYTHON
166167
ZFS_AC_CONFIG_ALWAYS_PYZFS
167168
ZFS_AC_CONFIG_ALWAYS_SED

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ AC_CONFIG_FILES([
9494
contrib/initramfs/hooks/Makefile
9595
contrib/initramfs/scripts/Makefile
9696
contrib/initramfs/scripts/local-top/Makefile
97+
contrib/pam_zfs_key/Makefile
9798
contrib/pyzfs/Makefile
9899
contrib/pyzfs/setup.py
99100
contrib/zcp/Makefile

contrib/Makefile.am

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
SUBDIRS = bash_completion.d bpftrace dracut initramfs pyzfs zcp
2-
DIST_SUBDIRS = bash_completion.d bpftrace dracut initramfs pyzfs zcp
1+
SUBDIRS = bash_completion.d bpftrace dracut initramfs pyzfs pam_zfs_key zcp
2+
DIST_SUBDIRS = bash_completion.d bpftrace dracut initramfs pyzfs pam_zfs_key zcp

contrib/pam_zfs_key/Makefile.am

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
include $(top_srcdir)/config/Rules.am
2+
3+
VPATH = \
4+
$(top_srcdir)/module/icp \
5+
$(top_srcdir)/module/zcommon \
6+
$(top_srcdir)/lib/libzfs
7+
8+
# Suppress unused but set variable warnings often due to ASSERTs
9+
AM_CFLAGS += $(NO_UNUSED_BUT_SET_VARIABLE)
10+
11+
if PAM_ZFS_ENABLED
12+
13+
pammodule_LTLIBRARIES = libpam_zfs_key.la
14+
15+
#libpam_zfs_key_ladir = $(pammoduledir)
16+
libpam_zfs_key_la_SOURCES = pam_zfs_key.c
17+
18+
libpam_zfs_key_la_LIBADD = \
19+
$(top_builddir)/lib/libnvpair/libnvpair.la \
20+
$(top_builddir)/lib/libuutil/libuutil.la \
21+
$(top_builddir)/lib/libzfs/libzfs.la \
22+
$(top_builddir)/lib/libzfs_core/libzfs_core.la
23+
24+
libpam_zfs_key_la_LDFLAGS = -version-info 1:0:0
25+
26+
libpam_zfs_key_la_LIBADD += -lm $(LIBSSL)
27+
28+
pamconfigs_DATA = zfs_key
29+
30+
31+
endif
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Name: Unlock zfs datasets for user
2+
Default: yes
3+
Priority: 128
4+
Auth-Type: Additional
5+
Auth:
6+
optional pam_zfs_key.so
7+
Session-Interactive-Only: yes
8+
Session-Type: Additional
9+
Session:
10+
optional pam_zfs_key.so
11+
Password-Type: Additional
12+
Password:
13+
optional pam_zfs_key.so

0 commit comments

Comments
 (0)