summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
-rw-r--r--README369
1 files changed, 369 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..8f61dd0
--- /dev/null
+++ b/README
@@ -0,0 +1,369 @@
+eCryptfs: A stacked cryptographic filesystem for Linux
+
+eCryptfs is free software. Please see the file COPYING for details.
+For documentation, please see the files in the doc/ subdirectory. For
+building and installation instructions please see the INSTALL file.
+
+Lead developers:
+ Tyler Hicks (kernel)
+ Dustin Kirkland (userspace)
+Contributors:
+ Michael Halcrow
+ Michael C. Thompson
+ Kent Yoder
+ Trevor Highland
+ Theresa Nelson
+Former maintainers:
+ Phillip Hellewell
+ Michael Halcrow
+Web Site: http://ecryptfs.org/
+
+As you should do with any filesystem, make sure to maintain a backup
+copy of any data you write into eCryptfs. In addition, you should
+reliably store your secret keys in a secure location. eCryptfs uses
+industry-standard cryptographic ciphers, key generation, and
+passphrase protection mechanisms; without your salt/passphrase or
+private key, nobody will be able to retrieve your data.
+
+eCryptfs requires the userspace tools available at:
+
+<http://ecryptfs.org/downloads.html>
+
+Requirements include:
+ - Kernel version 2.6.19 or above
+ - Build crypto API support with at least one symmetric key cipher
+ - Build key retention support
+ - If you have an older kernel, try the latest eCryptfs full package
+ release to build a stand-alone kernel module
+ - Userspace tools obtainable from the site listed above; requirements
+ for the userspace tools are:
+ - keyutils
+ - David Howells' userspace keyring headers and libraries (version
+ 1.0 or higher)
+ - Finding its way into some distros
+ - Obtainable from <http://people.redhat.com/~dhowells/keyutils>
+
+
+KERNEL BUILD OPTIONS
+
+Code maturity level options --->
+ [*] Prompt for development and/or incomplete code/drivers
+
+Security options --->
+ <M> Enable access key retention support
+
+Cryptographic options --->
+ <M> CBC support
+ <M> ECB support
+ <M> MD5 digest algorithm
+ <M> AES cipher algorithms
+
+File systems --->
+ Miscellaneous filesystems --->
+ <M> eCrypt filesystem layer support (EXPERIMENTAL)
+
+
+NOTES
+
+eCryptfs is still in a developmental stage. When you upgrade the
+eCryptfs kernel module, it is possible that the eCryptfs file format
+has been updated. For this reason you should copy your files to an
+unencrypted location and then copy the files back into the new
+eCryptfs mount point to migrate the files. File format version 3
+and beyond (in kernel version 2.6.24) is expected to remain readable,
+however.
+
+
+BUILD AND INSTALL INSTRUCTIONS
+
+1) Consult the INSTALL file. In the majority of cases, this step
+ should involve the standard procedure for Linux packages:
+ % ./configure --prefix=/usr && make && make install
+
+2) Make sure that you have sysfs mounted and that a valid entry for
+ the sysfs mount point is in your /etc/mtab file.
+
+
+INTERACTIVE MOUNTING
+
+Create a new directory into which eCryptfs will write its encrypted
+files (i.e., /root/crypt). Then, create the mount point directory
+(i.e., /mnt/crypt). Here is an example of how you might mount
+eCryptfs:
+
+mount -t ecryptfs /root/crypt /mnt/crypt
+
+Note that you can also perform a layover mount (essentially,
+converting an existing path into an eCryptfs mount point) to reduce
+the likelihood of contention between eCryptfs and other applications
+for access to the lower files; this is generally the recommended way
+to mount eCryptfs:
+
+mount -t ecryptfs /secret /secret
+
+Navigate the menus to select your preferred mount options.
+
+
+NON-INTERACTIVE MOUNTING
+
+eCryptfs supports mounting through command-line options. You can do so
+by passing groups of name=value attribute pairs as a -o option to the
+mount helper. Each key type has a set of name=value pairs associated
+with it. For instance, the ``passphrase'' key type can accept a
+``passwd=XXX'' name=value pair and a ``salt=XXX'' name=value pair.
+Attributes that apply to a particular key type immediately follow the
+key type specifier ``key=XXX'' and are separated by colons.
+Attributes that do not apply to any specific key type (general
+attributes) are separated by comma's. The option string will take the
+form:
+
+ name1=value1,key=alias:name2=value2:name3=value3,name4=value4,name5=value5
+
+name1=value1, name4=value4, and name5=value5 are all generic global
+attributes that can apply to any key type. name2=value2 and
+name3=value3 are specific to the key type.
+
+A BNF grammar for the option set follows:
+
+<NULL> ::=
+<letter> ::= (a | b | c | ... | z)
+<letter-string> ::= <letter> (<letter-string> | <NULL>)
+<character> ::= <any printable ASCII character that is not , or :>
+<character-elem> ::= (<character> | <NULL>)
+<character-string> ::= <character-elem> (<character-string> | <NULL>)
+<name> ::= <letter-string>
+<value> ::= <character-string>
+<attr> ::= <name> "=" <value>
+<comma-attr-list> ::= <attr> ("," <comma-attr-list> | <NULL>)
+<colon-attr-list> ::= <attr> (":" <colon-attr-list> | <NULL>)
+<key-attr-list> ::= "key=" <letter-string> (<colon-attr-list> | <NULL>)
+<attr-list> ::= (<comma-attr-list> | <key-attr-list>)
+<options-set> ::= <attr-list> (<attr-list> | <NULL>)
+
+Values read from a file should be specified with name value pairs. For
+example, a passphrase may be specified in a file by adding the following
+line to the file:
+
+passwd=<passphrase>
+
+Currently supported aliases and attributes parsed by the mount helper include:
+
+ key=passphrase:
+ passphrase_passwd=<passphrase>
+ passphrase_passwd_file=/path/to/file
+ passphrase_passwd_fd=<file descriptor>
+ passphrase_salt=<salt value>
+
+ key=openssl:
+ openssl_keyfile=/path/to/key
+ openssl_passwd=<passphrase>
+ openssl_passwd_file=/path/to/file
+ openssl_passwd_fd=<file descriptor>
+
+The following general attributes are valid kernel mount options,
+and may also be acted upon by the mount helper, mount.ecryptfs:
+
+ ecryptfs_cipher=<cipher>
+ Currently supported ciphers include:
+ aes
+ blowfish
+ des3_ede
+ cast5
+ cast6
+ twofish
+
+ ecryptfs_key_bytes=<key bytes>
+ With the exception of AES-192, eCryptfs requires that the
+ keysize be a multiple of the block size.
+
+ ecryptfs_sig=<hex signature>
+ The signature for the FEKEK to use to encrypt the FEK for newly
+ created files. A key with description <sig> should be in the
+ user's session keyring. The mount helper, with its key modules,
+ should make sure that the key gets placed there.
+
+ ecryptfs_passthrough
+ Allows for non-eCryptfs files to be read and written from within an
+ eCryptfs mount. This option is disabled by default.
+
+ ecryptfs_xattr_metadata
+ When set, newly created files will have their cryptographic
+ metadata stored in the extended attribute region of the file rather
+ than the header (requires kernel support).
+
+ ecryptfs_encrypted_view
+ When set, this option causes eCryptfs to present applications a
+ view of encrypted files as if the cryptographic metadata were
+ stored in the file header, whether the metadata is actually stored
+ in the header or in the extended attributes.
+
+ ecryptfs_hmac
+ When set, eCryptfs will include HMAC integrity enforcement to
+ its files (requires kernel support).
+
+ ecryptfs_debug=<value>
+ A value greater than 0 enables kernel debug messages, see NOTES
+ below.
+
+The following general attributes are parsed only by the mount helper,
+mount.ecryptfs:
+
+ no_sig_cache
+ Do not perform any key signature cache checks. By default,
+ when mounting, the eCryptfs mount helper will look for the key
+ signature in <$HOME/.ecryptfs/sig-cache.txt>. If the key
+ signature is not found, then the user will get a warning and
+ will be prompted on whether to continue and whether to add the
+ new key signature to the sig-cache.txt file. This behavior can
+ be suppressed with the no_sig_cache option.
+
+If you wish to have the same passphrase used in previous passphrase
+mounts and store it in a file (*not* recommended unless you can
+provide sufficient protection of the file itself), you can take the
+following steps:
+
+(Previous mount; specify passphrase on command line)
+mount -t ecryptfs /mnt/dev /mnt/dir -o key=passphrase:passphrase_passwd=my_passphrase
+
+(Next mount; have passphrase read from a file)
+echo "passphrase_passwd=my_passphrase" > /mnt/secureusb/my_passphrase
+mount -t ecryptfs /mnt/dev /mnt/dir -o key=passphrase:passphrase_passwd_file=/mnt/secureusb/my_passphrase
+
+Saving your unencrypted passphrase to a file on the same disk that
+contains your encrypted files defeats the purpose of using a
+cryptographic filesystem in the first place. You should instead store
+the file that contains your passphrase on a physically secure medium,
+such as a USB flash drive that you keep locked in a drawer, if you
+choose to store it to a file at all.
+
+In general, it is probably best to just type in your passphrase via
+stdin every time you need to perform a mount. Future versions of
+eCryptfs will allow hardware token devices, such as a TPM chip, to
+protect your secret keys.
+
+
+TESTING A NEW MOUNT POINT
+
+Try writing a new file:
+
+echo "Hello, World" > /secret/hello.txt
+
+The operation will complete. When you unmount eCryptfs, you will
+Notice that there is a new file in /secret that is at least 12288
+bytes in size (depending on your host page size). This is the
+encrypted underlying file for what you just wrote. To test reading,
+from start to finish, you need to clear the user session keyring:
+
+keyctl clear @u
+
+Then umount /secret and mount again per the instructions given above.
+
+cat /secret/hello.txt
+
+
+PAM MODULE
+
+You can use the PAM module to automatically use a key based on your
+login passphrase, which can then be used to perform an eCryptfs mount
+non-interactively.
+
+Perform an eCryptfs mount as root, using your user login:
+
+root# mount -t ecryptfs /secret /secret
+
+Then, grab your raw mount parameters from
+
+root# grep "ecryptfs" /etc/mtab
+
+You should get something like this:
+
+---
+/secret /secret ecryptfs rw,ecryptfs_sig=deadbeefdeadbeef,ecryptfs_key_bytes=16,ecryptfs_cipher=aes 0 0
+---
+
+Add ``user'' and ``noauto'' to the mount options:
+
+---
+/secret /secret ecryptfs user,noauto,rw,ecryptfs_sig=deadbeefdeadbeef,ecryptfs_key_bytes=16,ecryptfs_cipher=aes 0 0
+---
+
+Append your edited line to your /etc/fstab file. Now it's time to test
+the mount.
+
+root# umount /secret
+
+Verify that eCryptfs is not mounted. Then, log in as the regular
+user. Manually add your passphrase to the user session keyring via the
+ecryptfs-manager utility. Then, perform the mount, while telling the
+mount application to not call the mount helper:
+
+user# mount -i /secret
+
+Verify that eCryptfs mounted correctly. Then, unmount:
+
+user# umount /secret
+
+Clear your user session keyring:
+
+user# keyctl clear @u
+
+Add the mount command into your login script (e.g., ~/.bash_profile):
+
+---
+mount -i /secret
+---
+
+Finally, add this to the appropriate /etc/pam* file (e.g.,
+/etc/pam.d/login) after the call to pam_unix.so:
+
+---
+auth required pam_ecryptfs.so
+---
+
+You will need to insert this intelligently into your PAM stack so that
+PAM actually calls pam_ecryptfs.so. Depending on your distribution,
+this may involve, for instance, changing the context of pam_unix.so
+from ``sufficient'' to ``required'' and moving pam_deny.so to another
+location in the stack. Be mindful of the security implications of any
+changes you make to your PAM stack.
+
+From another window, try logging in as the user. If all went well, the
+eCryptfs PAM module will insert a key derived from your login
+passphrase into the user session keyring. Then, the login script will
+perform the mount, using the parameters in your /etc/fstab.
+
+The script src/utils/ecryptfs-setup-pam.sh attempts to automate
+setting up PAM mounts on Red Hat-based distros. Use that for
+inspiration in setting up your own eCryptfs PAM mount.
+
+
+NOTES
+
+eCryptfs shipping in kernel version 2.6.19 does not support public
+key. To determine what your current kernel supports, load the
+ecryptfs module and view the contents of fs/ecryptfs/version_str under
+your sysfs mount point.
+
+Do not run eCryptfs in higher verbosity levels unless you are doing so
+for the sole purpose of development, since secret values will be written
+out to the system log in that case.
+
+
+TROUBLESHOOTING
+
+For the most up-to-date support resources, see
+<http://ecryptfs.org/support.html>.
+
+
+BUGS
+
+Please send bug reports to the Launchpad bug tracker:
+ * https://bugs.launchpad.net/ecryptfs/+filebug
+
+For kernel bugs, please follow the procedure
+detailed in the kernel documentation (Documentation/oops-tracing.txt)
+to help us figure out what is happening.
+
+
+Mike Halcrow
+mhalcrow@us.ibm.com