> Am 14.09.2016 um 09:02 schrieb Anand Jain <anand.j...@oracle.com>: > > > > Wilson, > > Thanks for commenting. Pls see inline below.. > >> On 09/14/2016 12:42 AM, Wilson Meier wrote: >> Hi Anand, >> >> these are great news! Thanks for yor work. I'm looking forward to use the >> encryption. >> >> I would like to ask a few question regarding the feature set. >> >> 1. is encryption of an existing, filled and unencrypted subvolume without >> manually moving the data possible? > > Encrypt contexts are set only on newly created files. However you can > create empty encrypted subvol and move files and dir into it. In short > you can't set encrypt property on non-empty subvolume as of now.
Ok, so manually moving to an new encrypted subvolume is the only possibility. Maybe there will be a possibility in the feature. ;) > >> 2. What about encrypting the root and boot subvolume? Will it work with >> grub2? > > Keys are only in-memory, which does not persist or prompt > for it across boot. I had keyctl code written to prompt > for key but it isn't successful yet. Probably once we support > keyfile, then root/boot support is possible. > Currently i'm using dm-crypt and btrfs to achieve a fully encrypted system. I'm looking forward to switch to a pure btrfs solution. Hopefully this will be possible soon. >> 3. How does btrfs rescue handle the encrypted subvolume to recover data in >> case of an emergency? > > btrfs rescue / btrfsck works as usual. btrfs restore which > needs decrypt isn't supported. > Don't get me wrong, but not being able to use btrfs restore is a showstopper as i already had a case where i could only rescue my data using the restore command. In my opinion in the current state of btrfs such recover options are key. >> 4. Is it possible to unlock a subvolume using a keyfile? > > keyfile support is on top of the list to be supported, it helps > testing as well. > This goes hand in hand with my question about boot/root unlocking. > Thanks, Anand Thanks for your feedback. I really appreciate. Wilson > >> Thanks in advance, >> >> Wilson >> >> >>> Am 13.09.2016 um 15:39 schrieb Anand Jain <anand.j...@oracle.com>: >>> >>> >>> This patchset adds btrfs encryption support. >>> >>> The main objective of this series is to have bugs fixed and stability. >>> I have verified with fstests to confirm that there is no regression. >>> >>> A design write-up is coming next, however here below is the quick example >>> on the cli usage. Please try out, let me know if I have missed something. >>> >>> Also would like to mention that a review from the security experts is due, >>> which is important and I believe those review comments can be accommodated >>> without major changes from here. >>> >>> Also yes, thanks for the emails, I hear, per file encryption and inline >>> with vfs layer is also important, which is wip among other things in the >>> list. >>> >>> As of now these patch set supports encryption on per subvolume, as >>> managing properties on per subvolume is a kind of core to btrfs, which is >>> easier for data center solution-ing, seamlessly persistent and easy to >>> manage. >>> >>> >>> Steps: >>> ----- >>> >>> Make sure following kernel TFMs are compiled in. >>> # cat /proc/crypto | egrep 'cbc\(aes\)|ctr\(aes\)' >>> name : ctr(aes) >>> name : cbc(aes) >>> >>> Create encrypted subvolume. >>> # btrfs su create -e 'ctr(aes)' /btrfs/e1 >>> Create subvolume '/btrfs/e1' >>> Passphrase: >>> Again passphrase: >>> >>> A key is created and its hash is updated into the subvolume item, >>> and then added to the system keyctl. >>> # btrfs su show /btrfs/e1 | egrep -i encrypt >>> Encryption: ctr(aes)@btrfs:75197c8e (594790215) >>> >>> # keyctl show 594790215 >>> Keyring >>> 594790215 --alsw-v 0 0 logon: btrfs:75197c8e >>> >>> >>> Now any file data extents under the subvol /btrfs/e1 will be >>> encrypted. >>> >>> You may revoke key using keyctl or btrfs(8) as below. >>> # btrfs su encrypt -k out /btrfs/e1 >>> >>> # btrfs su show /btrfs/e1 | egrep -i encrypt >>> Encryption: ctr(aes)@btrfs:75197c8e (Required key not available) >>> >>> # keyctl show 594790215 >>> Keyring >>> Unable to dump key: Key has been revoked >>> >>> As the key hash is updated, If you provide wrong passphrase in the next >>> key in, it won't add key to the system. So we have key verification >>> from the day1. >>> >>> # btrfs su encrypt -k in /btrfs/e1 >>> Passphrase: >>> Again passphrase: >>> ERROR: failed to set attribute 'btrfs.encrypt' to 'ctr(aes)@btrfs:75197c8e' >>> : Key was rejected by service >>> >>> ERROR: key set failed: Key was rejected by service >>> >>> # btrfs su encrypt -k in /btrfs/e1 >>> Passphrase: >>> Again passphrase: >>> key for '/btrfs/e1' has logged in with keytag 'btrfs:75197c8e' >>> >>> Now if you revoke the key the read / write fails with key error. >>> >>> # md5sum /btrfs/e1/2k-test-file >>> 8c9fbc69125ebe84569a5c1ca088cb14 /btrfs/e1/2k-test-file >>> >>> # btrfs su encrypt -k out /btrfs/e1 >>> >>> # md5sum /btrfs/e1/2k-test-file >>> md5sum: /btrfs/e1/2k-test-file: Key has been revoked >>> >>> # cp /tfs/1k-test-file /btrfs/e1/ >>> cp: cannot create regular file ‘/btrfs/e1/1k-test-file’: Key has been >>> revoked >>> >>> Plain text memory scratches for security reason is pending. As there are >>> some >>> key revoke notification challenges to coincide with encryption context >>> switch, >>> which I do believe should be fixed in the due course, but is not a roadblock >>> at this stage. >>> >>> Thanks, Anand >>> >>> >>> Anand Jain (1): >>> btrfs: Encryption: Add btrfs encryption support >>> >>> fs/btrfs/Makefile | 4 +- >>> fs/btrfs/btrfs_inode.h | 6 + >>> fs/btrfs/compression.c | 30 +- >>> fs/btrfs/compression.h | 10 +- >>> fs/btrfs/ctree.h | 4 + >>> fs/btrfs/disk-io.c | 3 + >>> fs/btrfs/encrypt.c | 807 >>> ++++++++++++++++++++++++++++++++++++++++ >>> fs/btrfs/encrypt.h | 94 +++++ >>> fs/btrfs/inode.c | 255 ++++++++++++- >>> fs/btrfs/ioctl.c | 67 ++++ >>> fs/btrfs/lzo.c | 2 +- >>> fs/btrfs/props.c | 331 +++++++++++++++- >>> fs/btrfs/super.c | 27 +- >>> fs/btrfs/tests/crypto-tests.c | 376 +++++++++++++++++++ >>> fs/btrfs/tests/crypto-tests.h | 38 ++ >>> fs/btrfs/zlib.c | 2 +- >>> include/uapi/linux/btrfs_tree.h | 6 +- >>> 17 files changed, 2027 insertions(+), 35 deletions(-) >>> create mode 100644 fs/btrfs/encrypt.c >>> create mode 100644 fs/btrfs/encrypt.h >>> create mode 100755 fs/btrfs/tests/crypto-tests.c >>> create mode 100755 fs/btrfs/tests/crypto-tests.h >>> >>> Anand Jain (2): >>> btrfs-progs: make wait_for_commit non static >>> btrfs-progs: add encryption support >>> >>> Makefile.in | 5 +- >>> btrfs-list.c | 33 ++++ >>> cmds-filesystem.c | 4 +- >>> cmds-restore.c | 16 ++ >>> cmds-subvolume.c | 112 ++++++++++++-- >>> commands.h | 1 + >>> ctree.h | 5 +- >>> encrypt.c | 455 >>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>> encrypt.h | 46 ++++++ >>> props.c | 4 + >>> utils.h | 2 + >>> 11 files changed, 665 insertions(+), 18 deletions(-) >>> create mode 100644 encrypt.c >>> create mode 100644 encrypt.h >>> >>> Anand Jain (1): >>> fstests: btrfs: support encryption >>> >>> common/filter.btrfs | 2 +- >>> common/rc | 2 +- >>> tests/btrfs/041 | 2 + >>> tests/btrfs/041.out | 13 ++++ >>> tests/btrfs/052 | 12 +++ >>> tests/btrfs/052.out | 214 >>> ++++++++++++++++++++++++++++++++++++++++++++++++++++ >>> tests/btrfs/079 | 2 + >>> tests/btrfs/125 | 2 +- >>> tests/generic/297 | 6 +- >>> tests/generic/298 | 2 +- >>> 10 files changed, 251 insertions(+), 6 deletions(-) >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >>> the body of a message to majord...@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >> the body of a message to majord...@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html