libgocryptfs/contrib/pam_mount
Jakob Unterwurzacher a985096b50 contrib: pam_mount: check if something is already mounted on DST
pam_mount is supposed to check that as well, but it seems to get confused
by the "command#path" syntax used for FUSE. Let's do it here.
2016-10-09 00:32:49 +02:00
..
gocryptfs_pam_mount.bash contrib: pam_mount: check if something is already mounted on DST 2016-10-09 00:32:49 +02:00
README.md contrib: pam_mount: add instructions for whole-home-dir encryption 2016-10-08 22:30:19 +02:00

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" />

Replace testuser with your user name.

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. If are logging in via gcm, also add the line in /etc/pam.d/gdm-password.

#%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

Encrypting the whole home directory

Use this volume definition in /etc/security/pam_mount.conf.xml:

<volume user="testuser-whole-home" fstype="fuse" options="nonempty,allow_other"
path="/usr/local/bin/gocryptfs_pam_mount.bash#/home/%(USER).cipher"
mountpoint="/home/%(USER)" />

Replace testuser-whole-home with your user name.