contrib: pam_mount: add documentation and wrapper

See ticket #34
This commit is contained in:
Jakob Unterwurzacher 2016-10-08 17:36:35 +02:00
parent d25fcc6a4b
commit 610a242ec6
2 changed files with 94 additions and 0 deletions

View File

@ -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
```

View File

@ -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