diff options
-rw-r--r-- | contrib/pam_mount/README.md | 63 | ||||
-rwxr-xr-x | contrib/pam_mount/gocryptfs_pam_mount.bash | 31 |
2 files changed, 94 insertions, 0 deletions
diff --git a/contrib/pam_mount/README.md b/contrib/pam_mount/README.md new file mode 100644 index 0000000..9a64869 --- /dev/null +++ b/contrib/pam_mount/README.md @@ -0,0 +1,63 @@ +Mounting gocryptfs on login using pam_mount +=========================================== + +This works on Fedora 24 with active SELinux. Feedback on other platforms +is welcome. + +gocryptfs +--------- + +Copy the `gocryptfs` binary and `gocryptfs_pam_mount.bash` into +`/usr/local/bin` . + +The bash wrapper is neccessary because of the different calling +conventions between pam_mount and gocryptfs. + +Create a gocryptfs filesystem: +``` +$ mkdir /home/testuser/cipher /home/testuser/plain +$ gocryptfs -init /home/testuser/cipher +``` + +pam_mount config +---------------- + +Put the following into `/etc/security/pam_mount.conf.xml`, just before +the closing `</pam_mount>` tag at the bottom: + +``` +<volume user="testuser" fstype="fuse" options="defaults" +path="/usr/local/bin/gocryptfs_pam_mount.bash#/home/%(USER)/cipher" +mountpoint="/home/%(USER)/plain" /> +``` + +If you want to disable the display of the masterkey on mount, replace +`options="defaults"` with `options="quiet"`. + +PAM config +---------- + +An example `/etc/pam.d/login` on Fedora 24 is shown below. pam_mount +MUST be called AFTER `pam_selinux.so open` because that puts us in the +right SELinux context. + +``` +#%PAM-1.0 +auth substack system-auth +auth include postlogin +account required pam_nologin.so +account include system-auth +password include system-auth +session required pam_selinux.so close +session required pam_loginuid.so +session optional pam_console.so +session required pam_selinux.so open +session required pam_namespace.so +# vvv insert pam_mount here +session optional pam_mount.so +# ^^^ insert pam_mount here +session optional pam_keyinit.so force revoke +session include system-auth +session include postlogin +-session optional pam_ck_connector.so +``` diff --git a/contrib/pam_mount/gocryptfs_pam_mount.bash b/contrib/pam_mount/gocryptfs_pam_mount.bash new file mode 100755 index 0000000..3c7e48d --- /dev/null +++ b/contrib/pam_mount/gocryptfs_pam_mount.bash @@ -0,0 +1,31 @@ +#!/bin/bash +# +# Simple bash script to transform the command-line arguments that +# pam_mount passes to gocryptfs into something that gocryptfs +# understands. +# +# Currently understood: nonempty,allow_other,quiet. +# Unknown options are ignored. + +exec >&2 +set -eu + +if [[ $# != 4 ]]; then + MYNAME=$(basename $0) + echo "$MYNAME: expected 4 arguments, got $#" + echo "Example: $MYNAME /home/user.crypt /home/user.plain -o allow_other" + echo "Example: $MYNAME /home/user.crypt /home/user.plain -o defaults" + exit 1 +fi + +SRC=$1 +DST=$2 +GOPTS="" +for OPT in nonempty allow_other quiet; do + if [[ $4 == *$OPT* ]]; then + GOPTS="$GOPTS -$OPT" + fi +done + +cd "$(dirname "$0")" +exec ./gocryptfs $GOPTS $SRC $DST |