summaryrefslogtreecommitdiff
path: root/Mounting-on-login-using-pam_mount.md
blob: 483708d20c4bff5b365414c264638080b2b7803a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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.