Skip to content

Commit 9629bd0

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 ca7ea23 commit 9629bd0

File tree

8 files changed

+844
-2
lines changed

8 files changed

+844
-2
lines changed

config/always-pam.m4

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PAM], [
2+
AC_ARG_ENABLE([pam],
3+
[AS_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+
[AS_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+
[AS_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+
AS_IF([test "x$enable_pam" == "xyes"], [
30+
DEFINE_PAM='--define "_pam 1" --define "_pammoduledir $(pammoduledir)" --define "_pamconfigsdir $(pamconfigsdir)"'
31+
])
32+
AC_SUBST(DEFINE_PAM)
33+
AM_CONDITIONAL([PAM_ZFS_ENABLED], [test "x$enable_pam" = xyes])
34+
AC_SUBST(pammoduledir)
35+
AC_SUBST(pamconfigsdir)
36+
])

config/zfs-build.m4

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
163163
ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD
164164
ZFS_AC_CONFIG_ALWAYS_SYSTEM
165165
ZFS_AC_CONFIG_ALWAYS_ARCH
166+
ZFS_AC_CONFIG_ALWAYS_PAM
166167
ZFS_AC_CONFIG_ALWAYS_PYTHON
167168
ZFS_AC_CONFIG_ALWAYS_PYZFS
168169
ZFS_AC_CONFIG_ALWAYS_SED
@@ -280,6 +281,7 @@ AC_DEFUN([ZFS_AC_RPM], [
280281
RPM_DEFINE_UTIL+=' $(DEFINE_INITRAMFS)'
281282
RPM_DEFINE_UTIL+=' $(DEFINE_SYSTEMD)'
282283
RPM_DEFINE_UTIL+=' $(DEFINE_PYZFS)'
284+
RPM_DEFINE_UTIL+=' $(DEFINE_PAM)'
283285
RPM_DEFINE_UTIL+=' $(DEFINE_PYTHON_VERSION)'
284286
RPM_DEFINE_UTIL+=' $(DEFINE_PYTHON_PKG_VERSION)'
285287

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 -avoid-version -module
21+
22+
libpam_zfs_key_la_LIBADD += -lpam $(LIBSSL)
23+
24+
pamconfigs_DATA = zfs_key
25+
EXTRA_DIST = $(pamconfigs_DATA)
26+
endif

0 commit comments

Comments
 (0)