2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
1 |
eCryptfs: A stacked cryptographic filesystem for Linux |
2 |
||
3 |
eCryptfs is free software. Please see the file COPYING for details. |
|
4 |
For documentation, please see the files in the doc/ subdirectory. For |
|
5 |
building and installation instructions please see the INSTALL file. |
|
6 |
||
271
by Dustin Kirkland
update some sourceforge -> launchpad links |
7 |
Lead developers: |
8 |
Tyler Hicks (kernel) |
|
9 |
Dustin Kirkland (userspace) |
|
10 |
Contributors: |
|
11 |
Michael Halcrow |
|
12 |
Michael C. Thompson |
|
13 |
Kent Yoder |
|
14 |
Trevor Highland |
|
15 |
Theresa Nelson |
|
16 |
Former maintainers: |
|
17 |
Phillip Hellewell |
|
18 |
Michael Halcrow |
|
690
by Dustin Kirkland
* debian/control, debian/copyright, doc/manpage/ecryptfs.7, |
19 |
Web Site: http://ecryptfs.org/ |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
20 |
|
21 |
As you should do with any filesystem, make sure to maintain a backup |
|
22 |
copy of any data you write into eCryptfs. In addition, you should |
|
23 |
reliably store your secret keys in a secure location. eCryptfs uses |
|
24 |
industry-standard cryptographic ciphers, key generation, and |
|
25 |
passphrase protection mechanisms; without your salt/passphrase or |
|
26 |
private key, nobody will be able to retrieve your data. |
|
27 |
||
690
by Dustin Kirkland
* debian/control, debian/copyright, doc/manpage/ecryptfs.7, |
28 |
eCryptfs requires the userspace tools available at: |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
29 |
|
690
by Dustin Kirkland
* debian/control, debian/copyright, doc/manpage/ecryptfs.7, |
30 |
<http://ecryptfs.org/downloads.html> |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
31 |
|
32 |
Requirements include: |
|
33 |
- Kernel version 2.6.19 or above |
|
34 |
- Build crypto API support with at least one symmetric key cipher |
|
35 |
- Build key retention support |
|
36 |
- If you have an older kernel, try the latest eCryptfs full package |
|
37 |
release to build a stand-alone kernel module |
|
38 |
- Userspace tools obtainable from the site listed above; requirements |
|
39 |
for the userspace tools are: |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
40 |
- keyutils |
41 |
- David Howells' userspace keyring headers and libraries (version |
|
42 |
1.0 or higher) |
|
43 |
- Finding its way into some distros |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
44 |
- Obtainable from <http://people.redhat.com/~dhowells/keyutils> |
45 |
||
46 |
||
47 |
KERNEL BUILD OPTIONS |
|
48 |
||
49 |
Code maturity level options ---> |
|
50 |
[*] Prompt for development and/or incomplete code/drivers |
|
51 |
||
52 |
Security options ---> |
|
53 |
<M> Enable access key retention support |
|
54 |
||
55 |
Cryptographic options ---> |
|
162
by Mike halcrow
Update README to reflect namespaced key module parameters. |
56 |
<M> CBC support |
57 |
<M> ECB support |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
58 |
<M> MD5 digest algorithm |
59 |
<M> AES cipher algorithms |
|
60 |
||
61 |
File systems ---> |
|
62 |
Miscellaneous filesystems ---> |
|
63 |
<M> eCrypt filesystem layer support (EXPERIMENTAL) |
|
64 |
||
65 |
||
66 |
NOTES
|
|
67 |
||
68 |
eCryptfs is still in a developmental stage. When you upgrade the |
|
69 |
eCryptfs kernel module, it is possible that the eCryptfs file format |
|
70 |
has been updated. For this reason you should copy your files to an |
|
71 |
unencrypted location and then copy the files back into the new |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
72 |
eCryptfs mount point to migrate the files. File format version 3 |
73 |
and beyond (in kernel version 2.6.24) is expected to remain readable, |
|
74 |
however. |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
75 |
|
76 |
||
77 |
BUILD AND INSTALL INSTRUCTIONS |
|
78 |
||
79 |
1) Consult the INSTALL file. In the majority of cases, this step |
|
80 |
should involve the standard procedure for Linux packages: |
|
81 |
% ./configure --prefix=/usr && make && make install |
|
82 |
||
83 |
2) Make sure that you have sysfs mounted and that a valid entry for |
|
84 |
the sysfs mount point is in your /etc/mtab file. |
|
85 |
||
86 |
||
87 |
INTERACTIVE MOUNTING |
|
88 |
||
89 |
Create a new directory into which eCryptfs will write its encrypted |
|
90 |
files (i.e., /root/crypt). Then, create the mount point directory |
|
91 |
(i.e., /mnt/crypt). Here is an example of how you might mount |
|
92 |
eCryptfs: |
|
93 |
||
94 |
mount -t ecryptfs /root/crypt /mnt/crypt |
|
95 |
||
96 |
Note that you can also perform a layover mount (essentially, |
|
97 |
converting an existing path into an eCryptfs mount point) to reduce |
|
98 |
the likelihood of contention between eCryptfs and other applications |
|
99 |
for access to the lower files; this is generally the recommended way |
|
100 |
to mount eCryptfs: |
|
101 |
||
102 |
mount -t ecryptfs /secret /secret |
|
103 |
||
104 |
Navigate the menus to select your preferred mount options. |
|
105 |
||
106 |
||
107 |
NON-INTERACTIVE MOUNTING |
|
108 |
||
109 |
eCryptfs supports mounting through command-line options. You can do so |
|
110 |
by passing groups of name=value attribute pairs as a -o option to the |
|
111 |
mount helper. Each key type has a set of name=value pairs associated |
|
112 |
with it. For instance, the ``passphrase'' key type can accept a |
|
113 |
``passwd=XXX'' name=value pair and a ``salt=XXX'' name=value pair. |
|
114 |
Attributes that apply to a particular key type immediately follow the |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
115 |
key type specifier ``key=XXX'' and are separated by colons. |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
116 |
Attributes that do not apply to any specific key type (general |
117 |
attributes) are separated by comma's. The option string will take the |
|
118 |
form: |
|
119 |
||
120 |
name1=value1,key=alias:name2=value2:name3=value3,name4=value4,name5=value5 |
|
121 |
||
122 |
name1=value1, name4=value4, and name5=value5 are all generic global |
|
123 |
attributes that can apply to any key type. name2=value2 and |
|
124 |
name3=value3 are specific to the key type. |
|
125 |
||
126 |
A BNF grammar for the option set follows: |
|
127 |
||
128 |
<NULL> ::= |
|
129 |
<letter> ::= (a | b | c | ... | z) |
|
130 |
<letter-string> ::= <letter> (<letter-string> | <NULL>) |
|
131 |
<character> ::= <any printable ASCII character that is not , or :> |
|
132 |
<character-elem> ::= (<character> | <NULL>) |
|
133 |
<character-string> ::= <character-elem> (<character-string> | <NULL>) |
|
134 |
<name> ::= <letter-string> |
|
135 |
<value> ::= <character-string> |
|
136 |
<attr> ::= <name> "=" <value> |
|
137 |
<comma-attr-list> ::= <attr> ("," <comma-attr-list> | <NULL>) |
|
138 |
<colon-attr-list> ::= <attr> (":" <colon-attr-list> | <NULL>) |
|
139 |
<key-attr-list> ::= "key=" <letter-string> (<colon-attr-list> | <NULL>) |
|
140 |
<attr-list> ::= (<comma-attr-list> | <key-attr-list>) |
|
141 |
<options-set> ::= <attr-list> (<attr-list> | <NULL>) |
|
142 |
||
143 |
Values read from a file should be specified with name value pairs. For |
|
144 |
example, a passphrase may be specified in a file by adding the following |
|
145 |
line to the file: |
|
146 |
||
147 |
passwd=<passphrase> |
|
148 |
||
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
149 |
Currently supported aliases and attributes parsed by the mount helper include: |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
150 |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
151 |
key=passphrase: |
162
by Mike halcrow
Update README to reflect namespaced key module parameters. |
152 |
passphrase_passwd=<passphrase> |
153 |
passphrase_passwd_file=/path/to/file |
|
164
by Mike halcrow
Clean up code and parameter names in documentation and key module. |
154 |
passphrase_passwd_fd=<file descriptor> |
162
by Mike halcrow
Update README to reflect namespaced key module parameters. |
155 |
passphrase_salt=<salt value> |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
156 |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
157 |
key=openssl: |
162
by Mike halcrow
Update README to reflect namespaced key module parameters. |
158 |
openssl_keyfile=/path/to/key |
159 |
openssl_passwd=<passphrase> |
|
160 |
openssl_passwd_file=/path/to/file |
|
161 |
openssl_passwd_fd=<file descriptor> |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
162 |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
163 |
The following general attributes are valid kernel mount options, |
164 |
and may also be acted upon by the mount helper, mount.ecryptfs: |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
165 |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
166 |
ecryptfs_cipher=<cipher> |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
167 |
Currently supported ciphers include: |
168 |
aes
|
|
169 |
blowfish
|
|
170 |
des3_ede
|
|
171 |
cast5
|
|
172 |
cast6
|
|
173 |
twofish
|
|
174 |
||
175 |
ecryptfs_key_bytes=<key bytes> |
|
176 |
With the exception of AES-192, eCryptfs requires that the |
|
177 |
keysize be a multiple of the block size. |
|
178 |
||
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
179 |
ecryptfs_sig=<hex signature> |
180 |
The signature for the FEKEK to use to encrypt the FEK for newly |
|
181 |
created files. A key with description <sig> should be in the |
|
182 |
user's session keyring. The mount helper, with its key modules, |
|
183 |
should make sure that the key gets placed there. |
|
184 |
||
185 |
ecryptfs_passthrough
|
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
186 |
Allows for non-eCryptfs files to be read and written from within an |
187 |
eCryptfs mount. This option is disabled by default. |
|
188 |
||
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
189 |
ecryptfs_xattr_metadata
|
190 |
When set, newly created files will have their cryptographic |
|
191 |
metadata stored in the extended attribute region of the file rather |
|
106
by Mike halcrow
Update README for key module params. |
192 |
than the header (requires kernel support). |
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
193 |
|
194 |
ecryptfs_encrypted_view
|
|
195 |
When set, this option causes eCryptfs to present applications a |
|
196 |
view of encrypted files as if the cryptographic metadata were |
|
197 |
stored in the file header, whether the metadata is actually stored |
|
198 |
in the header or in the extended attributes. |
|
199 |
||
56
by mhalcrow@us.ibm.com
Add HMAC mount option to mount helper. |
200 |
ecryptfs_hmac
|
201 |
When set, eCryptfs will include HMAC integrity enforcement to |
|
106
by Mike halcrow
Update README for key module params. |
202 |
its files (requires kernel support). |
56
by mhalcrow@us.ibm.com
Add HMAC mount option to mount helper. |
203 |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
204 |
ecryptfs_debug=<value> |
205 |
A value greater than 0 enables kernel debug messages, see NOTES |
|
206 |
below. |
|
207 |
||
208 |
The following general attributes are parsed only by the mount helper, |
|
209 |
mount.ecryptfs: |
|
210 |
||
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
211 |
no_sig_cache
|
212 |
Do not perform any key signature cache checks. By default, |
|
213 |
when mounting, the eCryptfs mount helper will look for the key |
|
214 |
signature in <$HOME/.ecryptfs/sig-cache.txt>. If the key |
|
215 |
signature is not found, then the user will get a warning and |
|
216 |
will be prompted on whether to continue and whether to add the |
|
217 |
new key signature to the sig-cache.txt file. This behavior can |
|
218 |
be suppressed with the no_sig_cache option. |
|
219 |
||
220 |
If you wish to have the same passphrase used in previous passphrase |
|
221 |
mounts and store it in a file (*not* recommended unless you can |
|
222 |
provide sufficient protection of the file itself), you can take the |
|
223 |
following steps: |
|
224 |
||
225 |
(Previous mount; specify passphrase on command line) |
|
162
by Mike halcrow
Update README to reflect namespaced key module parameters. |
226 |
mount -t ecryptfs /mnt/dev /mnt/dir -o key=passphrase:passphrase_passwd=my_passphrase |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
227 |
|
162
by Mike halcrow
Update README to reflect namespaced key module parameters. |
228 |
(Next mount; have passphrase read from a file) |
165
by Mike halcrow
Clean up manpages and README some more. |
229 |
echo "passphrase_passwd=my_passphrase" > /mnt/secureusb/my_passphrase |
230 |
mount -t ecryptfs /mnt/dev /mnt/dir -o key=passphrase:passphrase_passwd_file=/mnt/secureusb/my_passphrase |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
231 |
|
232 |
Saving your unencrypted passphrase to a file on the same disk that |
|
233 |
contains your encrypted files defeats the purpose of using a |
|
234 |
cryptographic filesystem in the first place. You should instead store |
|
235 |
the file that contains your passphrase on a physically secure medium, |
|
236 |
such as a USB flash drive that you keep locked in a drawer, if you |
|
237 |
choose to store it to a file at all. |
|
238 |
||
239 |
In general, it is probably best to just type in your passphrase via |
|
240 |
stdin every time you need to perform a mount. Future versions of |
|
241 |
eCryptfs will allow hardware token devices, such as a TPM chip, to |
|
242 |
protect your secret keys. |
|
243 |
||
244 |
||
245 |
TESTING A NEW MOUNT POINT |
|
246 |
||
247 |
Try writing a new file: |
|
248 |
||
249 |
echo "Hello, World" > /secret/hello.txt |
|
250 |
||
251 |
The operation will complete. When you unmount eCryptfs, you will |
|
252 |
Notice that there is a new file in /secret that is at least 12288 |
|
253 |
bytes in size (depending on your host page size). This is the |
|
254 |
encrypted underlying file for what you just wrote. To test reading, |
|
255 |
from start to finish, you need to clear the user session keyring: |
|
256 |
||
257 |
keyctl clear @u |
|
258 |
||
259 |
Then umount /secret and mount again per the instructions given above. |
|
260 |
||
261 |
cat /secret/hello.txt |
|
262 |
||
263 |
||
264 |
PAM MODULE |
|
265 |
||
266 |
You can use the PAM module to automatically use a key based on your |
|
267 |
login passphrase, which can then be used to perform an eCryptfs mount |
|
268 |
non-interactively. |
|
269 |
||
270 |
Perform an eCryptfs mount as root, using your user login: |
|
271 |
||
272 |
root# mount -t ecryptfs /secret /secret |
|
273 |
||
274 |
Then, grab your raw mount parameters from |
|
275 |
||
276 |
root# grep "ecryptfs" /etc/mtab |
|
277 |
||
278 |
You should get something like this: |
|
279 |
||
280 |
---
|
|
281 |
/secret /secret ecryptfs rw,ecryptfs_sig=deadbeefdeadbeef,ecryptfs_key_bytes=16,ecryptfs_cipher=aes 0 0 |
|
282 |
---
|
|
283 |
||
284 |
Add ``user'' and ``noauto'' to the mount options: |
|
285 |
||
286 |
---
|
|
287 |
/secret /secret ecryptfs user,noauto,rw,ecryptfs_sig=deadbeefdeadbeef,ecryptfs_key_bytes=16,ecryptfs_cipher=aes 0 0 |
|
288 |
---
|
|
289 |
||
290 |
Append your edited line to your /etc/fstab file. Now it's time to test |
|
291 |
the mount. |
|
292 |
||
293 |
root# umount /secret |
|
294 |
||
295 |
Verify that eCryptfs is not mounted. Then, log in as the regular |
|
296 |
user. Manually add your passphrase to the user session keyring via the |
|
297 |
ecryptfs-manager utility. Then, perform the mount, while telling the |
|
298 |
mount application to not call the mount helper: |
|
299 |
||
300 |
user# mount -i /secret |
|
301 |
||
302 |
Verify that eCryptfs mounted correctly. Then, unmount: |
|
303 |
||
304 |
user# umount /secret |
|
305 |
||
306 |
Clear your user session keyring: |
|
307 |
||
308 |
user# keyctl clear @u |
|
309 |
||
310 |
Add the mount command into your login script (e.g., ~/.bash_profile): |
|
311 |
||
312 |
---
|
|
313 |
mount -i /secret |
|
314 |
---
|
|
315 |
||
316 |
Finally, add this to the appropriate /etc/pam* file (e.g., |
|
317 |
/etc/pam.d/login) after the call to pam_unix.so: |
|
318 |
||
319 |
---
|
|
320 |
auth required pam_ecryptfs.so |
|
321 |
---
|
|
322 |
||
323 |
You will need to insert this intelligently into your PAM stack so that |
|
324 |
PAM actually calls pam_ecryptfs.so. Depending on your distribution, |
|
325 |
this may involve, for instance, changing the context of pam_unix.so |
|
326 |
from ``sufficient'' to ``required'' and moving pam_deny.so to another |
|
327 |
location in the stack. Be mindful of the security implications of any |
|
328 |
changes you make to your PAM stack. |
|
329 |
||
330 |
From another window, try logging in as the user. If all went well, the |
|
331 |
eCryptfs PAM module will insert a key derived from your login |
|
332 |
passphrase into the user session keyring. Then, the login script will |
|
333 |
perform the mount, using the parameters in your /etc/fstab. |
|
334 |
||
335 |
The script src/utils/ecryptfs-setup-pam.sh attempts to automate |
|
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
336 |
setting up PAM mounts on Red Hat-based distros. Use that for |
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
337 |
inspiration in setting up your own eCryptfs PAM mount. |
338 |
||
339 |
||
340 |
NOTES
|
|
341 |
||
342 |
eCryptfs shipping in kernel version 2.6.19 does not support public |
|
343 |
key. To determine what your current kernel supports, load the |
|
344 |
ecryptfs module and view the contents of fs/ecryptfs/version_str under |
|
345 |
your sysfs mount point. |
|
346 |
||
28
by mhalcrow@us.ibm.com
Documentation updates by Eric Sandeen. |
347 |
Do not run eCryptfs in higher verbosity levels unless you are doing so |
348 |
for the sole purpose of development, since secret values will be written |
|
349 |
out to the system log in that case. |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
350 |
|
351 |
||
352 |
TROUBLESHOOTING
|
|
353 |
||
816
by Tyler Hicks
Update the README with a pointer to the ecryptfs.org support page |
354 |
For the most up-to-date support resources, see |
355 |
<http://ecryptfs.org/support.html>. |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
356 |
|
357 |
||
358 |
BUGS
|
|
359 |
||
239
by Dustin Kirkland
update s/sourceforge/launchpad/g links |
360 |
Please send bug reports to the Launchpad bug tracker: |
361 |
* https://bugs.launchpad.net/ecryptfs/+filebug |
|
362 |
||
363 |
For kernel bugs, please follow the procedure |
|
2
by mhalcrow@us.ibm.com
Initial import of eCryptfs filesystem userspace utilities (mount helper, daemon component, |
364 |
detailed in the kernel documentation (Documentation/oops-tracing.txt) |
365 |
to help us figure out what is happening. |
|
366 |
||
367 |
||
368 |
Mike Halcrow |
|
369 |
mhalcrow@us.ibm.com |