Skip to content

Commit d3c5f7e

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 d3c5f7e

File tree

7 files changed

+777
-2
lines changed

7 files changed

+777
-2
lines changed

config/always-pam.m4

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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([
24+
*** security/pam_modules.h missing, libpam0g-dev package required
25+
])
26+
])
27+
])
28+
])
29+
AM_CONDITIONAL([PAM_ZFS_ENABLED], [test "x$enable_pam" = xyes])
30+
AC_SUBST(pammoduledir)
31+
AC_SUBST(pamconfigsdir)
32+
])

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: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
if PAM_ZFS_ENABLED
9+
10+
pammodule_LTLIBRARIES = libpam_zfs_key.la
11+
12+
libpam_zfs_key_la_SOURCES = pam_zfs_key.c
13+
14+
libpam_zfs_key_la_LIBADD = \
15+
$(top_builddir)/lib/libnvpair/libnvpair.la \
16+
$(top_builddir)/lib/libuutil/libuutil.la \
17+
$(top_builddir)/lib/libzfs/libzfs.la \
18+
$(top_builddir)/lib/libzfs_core/libzfs_core.la
19+
20+
libpam_zfs_key_la_LDFLAGS = -version-info 1:0:0
21+
22+
libpam_zfs_key_la_LIBADD += -lm $(LIBSSL)
23+
24+
pamconfigs_DATA = zfs_key
25+
26+
endif

0 commit comments

Comments
 (0)