In this blog, I will show how you can utilise open-source data encryption software Tomb to protect your private data on your Linux server. This can be used to create a private folder than only you can open, which can be used as a Samba file share mount, to host your private data for OwnCloud/Nextcloud, or whatever you fancy (hey, no judgement here child).
Firstly, you need to install some pre-reqs:
apt-get -y install zsh pinentry-curses
Once install, grab the latest Tomb (this has probably changed, but 2.3 was the latest when i wrote this) and extract it:
cd /tmp wget https://files.dyne.org/tomb/Tomb-2.3.tar.gz tar xvfz Tomb-2.3.tar.gz cd Tomb-2.3
Next, lets go ahead and make Tomb, and test its working:
make install tomb -h
You should see an output showing you the commands of Tomb, such as:
root@server:/tmp/Tomb-2.3# tomb -h Tomb 2.3 - a strong and gentle undertaker for your secrets Copyright (C) 2007-2017 Dyne.org Foundation, License GNU GPL v3+ This is free software: you are free to change and redistribute it For the latest sourcecode go to <http://dyne.org/software/tomb> Syntax: tomb [options] command [arguments]
Next, we need to create a key that will be used to protect our data:
tomb forge secrets.tomb.key
This will ask for a password as below:
root@server:/tmp/Tomb-2.3# tomb forge secrets.tomb.key tomb . Commanded to forge key secrets.tomb.key with cipher algorithm AES256 tomb [W] This operation takes time, keep using this computer on other tasks, tomb [W] once done you will be asked to choose a password for your tomb. tomb [W] To make it faster you can move the mouse around. tomb [W] If you are on a server, you can use an Entropy Generation Daemon. 256+0 records in 256+0 records out 256 bytes copied, 397.618 s, 0.0 kB/s tomb (*) Choose the password of your key: secrets.tomb.key tomb . (You can also change it later using 'tomb passwd'.) tomb . Key is valid. tomb . Done forging secrets.tomb.key tomb (*) Your key is ready: -rw------- 1 root root 527 Apr 5 12:07 secrets.tomb.key
Now that our key is created, we need to create our ‘tomb’. The tomb is basically a container for your files that can only be mounted if the key (and thus password) and provided, meaning its super secure. To create the tomb, the ‘-s’ flag is used – and takes an integer as an input. This integer is the size of the tomb in MiB, so 100GB would be 95367MiB, for example. Below i’m just creating a small example to display what happens:
root@server:/tmp/Tomb-2.3# tomb dig -s 100 secrets.tomb tomb . Commanded to dig tomb secrets.tomb tomb (*) Creating a new tomb in secrets.tomb tomb . Generating secrets.tomb of 100MiB 100+0 records in 100+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 9.08815 s, 11.5 MB/s -rw------- 1 root root 100M Apr 5 12:08 secrets.tomb tomb (*) Done digging secrets tomb . Your tomb is not yet ready, you need to forge a key and lock it: tomb . tomb forge secrets.tomb.key tomb . tomb lock secrets.tomb -k secrets.tomb.key root@server:/tmp/Tomb-2.3#
Now, as it says above, we need to now associate our created key with our newly created tomb, meaning only our key can open the tomb once locked:
root@server:/tmp/Tomb-2.3# tomb lock -k secrets.tomb.key secrets.tomb tomb . Commanded to lock tomb secrets.tomb tomb . Checking if the tomb is empty (we never step on somebody else's bones). tomb . Fine, this tomb seems empty. tomb . Key is valid. tomb . Locking using cipher: aes-xts-plain64:sha256 tomb . A password is required to use key secrets.tomb.key tomb . Password OK. tomb (*) Locking secrets.tomb with secrets.tomb.key tomb . Formatting Luks mapped device. tomb . Formatting your Tomb with Ext3/Ext4 filesystem. tomb . Done locking secrets using Luks dm-crypt aes-xts-plain64:sha256 tomb (*) Your tomb is ready in secrets.tomb and secured with key secrets.tomb.key root@server:/tmp/Tomb-2.3#
Success! We can now open and close our Tomb, as below:
root@server:/tmp/Tomb-2.3# tomb open -k secrets.tomb.key secrets.tomb tomb . Commanded to open tomb secrets.tomb tomb . Valid tomb file found: secrets.tomb tomb . Key is valid. tomb . Mountpoint not specified, using default: /media/secrets tomb (*) Opening secrets on /media/secrets tomb . This tomb is a valid LUKS encrypted device. tomb . Cipher is "aes" mode "xts-plain64:sha256" hash "sha1" tomb . A password is required to use key secrets.tomb.key tomb . Password OK. tomb (*) Success unlocking tomb secrets tomb . Checking filesystem via /dev/loop0 fsck from util-linux 2.27.1 secrets: clean, 11/25168 files, 8831/100352 blocks tomb (*) Success opening secrets.tomb on /media/secrets root@server:/tmp/Tomb-2.3# cd /media/secrets/ root@server:/media/secrets# ls lost+found root@server:/media/secrets# touch hello root@server:/media/secrets# ls hello lost+found root@server:/media/secrets#
In the above, I’ve gone into our tomb and created a file called ‘hello’ to show you can write to it. Now, if you want to close all off the tombs, simply use the command ‘tomb close all’, or alternatively if you are in a hurry, use ‘tomb slam’ – which is the equivalent of kicking the power out of the back.
root@server:/media# tomb close all tomb . Closing tomb [secrets] mounted on /media/secrets tomb . Closing tomb bind hook: /media/root/secrets losetup: /dev/loop0: detach failed: No such device or address tomb (*) Tomb [secrets] closed: your bones will rest in peace. root@server:/media# root@server:/media# ls cdrom root@server:/media#
The above shows the closing of the tomb, and a ‘ls’ shows that there is no trace remaining.
Now, if you want to use this for production purposes, i’d recommending further reading – you can do a LOT of cool things with Tomb such as QR Codes for authentication, hiding PIN numbers in images (steganography, oo), etc. You’ll also want to move your tomb from /tmp 🙂 Enjoy, and i hope this stokes some creative fires.