summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorJakob Unterwurzacher2016-10-08 17:36:35 +0200
committerJakob Unterwurzacher2016-10-08 22:30:13 +0200
commit610a242ec6429436b37b47dd357b0c777c620d65 (patch)
treefae6233a497181b95b8f530b06b64608a8f80519 /contrib
parentd25fcc6a4b095e37c77cce8f9de2ec0f12007ed5 (diff)
contrib: pam_mount: add documentation and wrapper
See ticket #34
Diffstat (limited to 'contrib')
-rw-r--r--contrib/pam_mount/README.md63
-rwxr-xr-xcontrib/pam_mount/gocryptfs_pam_mount.bash31
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