<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Encryption on falkp.no/blog</title>
    <link>/blog/tags/encryption/</link>
    <description>falkp.no/blog (Encryption)</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
      

      
    

    
    <lastBuildDate>Sun, 22 Dec 2019 00:00:00 +0000</lastBuildDate>
    
    <atom:link href="/blog/tags/encryption/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>ZFS on laptop with encrypted /home</title>
      <link>/blog/posts/zfs_encrypted_home/</link>
      <pubDate>Sun, 22 Dec 2019 00:00:00 +0000</pubDate>
      
      <guid>/blog/posts/zfs_encrypted_home/</guid>
      <description>&lt;p&gt;With Ubuntu 19.10 it&amp;rsquo;s simple to get a workstation with boot and root on ZFS. But what&amp;rsquo;s missing from the install is encryption. This is how I did it.&lt;/p&gt;
&lt;p&gt;I suggest you first have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;basic zfs knowledge&lt;/li&gt;
&lt;li&gt;good linux knowledge&lt;/li&gt;
&lt;li&gt;no important data on the target system&lt;/li&gt;
&lt;li&gt;more than 4 GB RAM&lt;/li&gt;
&lt;li&gt;SSD or better&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-to&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#how-to&#34;&gt;
        #
    &lt;/a&gt;
    How-to
&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install Ubuntu as normal, but choose &amp;ldquo;use ZFS&amp;rdquo;. It&amp;rsquo;s marked as experimental, but that&amp;rsquo;s because how Ubuntu uses it may change in later releases. The code it self is solid.&lt;/li&gt;
&lt;li&gt;After install is done, you&amp;rsquo;re left with a bpool and an rpool. I will only focus on encrypting /home/&lt;user&gt;. I&amp;rsquo;ll use username john in this example.&lt;/li&gt;
&lt;li&gt;Your layout will look something like this:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ zfs list -r rpool
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NAME                                               USED  AVAIL     REFER  MOUNTPOINT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool                                              165G   293G       96K  /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT                                        18,8G   293G       96K  none
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3                          18,8G   293G     3,92G  /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/usr                      1,06M   293G       96K  /usr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/usr/local                 992K   293G      144K  /usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var                      13,4G   293G       96K  /var
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/games                 320K   293G       96K  /var/games
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/lib                  4,36G   293G     3,72G  /var/lib
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/lib/AccountServices   320K   293G       96K  /var/lib/AccountServices
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/lib/NetworkManager   3,67M   293G      208K  /var/lib/NetworkManager
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/lib/apt              87,0M   293G     74,9M  /var/lib/apt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/lib/dpkg             87,4M   293G     41,2M  /var/lib/dpkg
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/log                   574M   293G      170M  /var/log
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/mail                 2,25M   293G      104K  /var/mail
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/snap                 8,46G   293G     8,46G  /var/snap
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/spool                10,4M   293G     3,51M  /var/spool
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/ROOT/ubuntu_oyzpo3/var/www                   320K   293G       96K  /var/www
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/USERDATA                                     141G   293G       96K  /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/USERDATA/john_75qybu                         140G   293G      126G  /home/john
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/USERDATA/root_75qybu                        1,07G   293G     1,07G  /root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We want to replace &lt;code&gt;rpool/USERDATA/john_75qybu&lt;/code&gt; with a new, encrypted file system.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create another temporary user, smith, and log out of john and in as smith.&lt;/li&gt;
&lt;li&gt;Set filesystem name in a variable, so you can copy/paste the rest: &lt;code&gt;$oldfs=&amp;quot;rpool/USERDATA/john_75qybu&amp;quot;; $newfs=&amp;quot;rpool/USERDATA/john_crypt&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Unmount: &lt;code&gt;sudo zfs umount $oldfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Reset mountpoint: &lt;code&gt;sudo zfs set mountpoint=none $oldfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create a new, encrypted file system for your main user: &lt;code&gt;sudo zfs create -o encryption=on -o keyformat=passphrase $newfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set mountpoint: &lt;code&gt;sudo zfs set mountpoint=/home/john $newfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mount: &lt;code&gt;sudo zfs mount -a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If you get complaints on missing key, run: &lt;code&gt;sudo zfs load-key -a&lt;/code&gt; and then mount again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you had any data on the unencrypted home dir, you can mount it anywhere else (&lt;code&gt;zfs set mountpoint=/mnt ...&lt;/code&gt;), and copy data.&lt;/p&gt;
&lt;p&gt;Last thing you need to do is enable key loading at boot.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create the file &lt;code&gt;/etc/systemd/system/zfskey-tank@.service&lt;/code&gt; as:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;[&lt;/span&gt;Unit&lt;span style=&#34;color:#ff6ac1&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;Description&lt;/span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;=&lt;/span&gt;Load %I encryption keys
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;Before&lt;/span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;=&lt;/span&gt;systemd-user-sessions.service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;Before&lt;/span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;=&lt;/span&gt;zfs-mount.service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;After&lt;/span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;=&lt;/span&gt;zfs-import.target
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;[&lt;/span&gt;Service&lt;span style=&#34;color:#ff6ac1&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;Type&lt;/span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;=&lt;/span&gt;oneshot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;RemainAfterExit&lt;/span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;=&lt;/span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;ExecStart&lt;/span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;=&lt;/span&gt;/usr/bin/bash -c &lt;span style=&#34;color:#5af78e&#34;&gt;&amp;#39;systemd-ask-password &amp;#34;Encrypted ZFS password for %I&amp;#34; --no-tty  | zfs load-key -a&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;[&lt;/span&gt;Install&lt;span style=&#34;color:#ff6ac1&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff5c57&#34;&gt;WantedBy&lt;/span&gt;&lt;span style=&#34;color:#ff6ac1&#34;&gt;=&lt;/span&gt;zfs-mount.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that I&amp;rsquo;ve changed the suggested example from Arch Wiki which ended in &lt;code&gt;zfs load-key %I&lt;/code&gt; to &lt;code&gt;zfs load-key -a&lt;/code&gt;. That way all encrypted filesystems will be mounted.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;And enable: &lt;code&gt;$ sudo systemctl enable zfskey-tank@john_crypt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Reboot and check that everything works. If you have trouble logging in, you can log in as smith and check what fails. Unlocking, mounting or access rights. It will look the same in a zfs list, but you should see a difference if you run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo zfs get encryption rpool/USERDATA/john_crypt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NAME                         PROPERTY    VALUE        SOURCE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpool/USERDATA/john_crypt  encryption  aes-256-ccm  -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If everything works, you can move along to setting up snapshots or other fancy zfs stuff. =)&lt;/p&gt;
&lt;h2 id=&#34;resources&#34; &gt;
&lt;div&gt;
    &lt;a href=&#34;#resources&#34;&gt;
        #
    &lt;/a&gt;
    Resources
&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/index.php/ZFS&#34;&gt;Arch wiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
  </channel>
</rss>
