A passphrase caching script to be used in /etc/crypttab
on Debian and Ubuntu. When there are multiple cryptsetup (either plain or LUKS) volumes with the same passphrase, it is an unnecessary task to input the passphrase more than once.
Just add this script as keyscript to your /etc/crypttab
and it will cache the passphrase of all crypttab entries with the same identifier.
Either copy decrypt_keyctl into the default search path for keyscripts from cryptsetup /lib/cryptdisks/scripts/. So you can just write keyscript=decrypt_keyctl
in /etc/crypttab
, or use a random path of your choice and give the full path e.g keyscript=/sbin/decrypt_keyctl
.
/etc/crypttab
handling and keyscript option
keyctl
)
CONFIG_KEYS=y
in your kernel configurationIn old (pre 2.6.38) kernels, dm-crypt used to be single threaded. Thus every dm-crypt mapping only used a single core for crypto operations. To use the full power of your many-core processor it is was necessary to split the dm-crypt device. For Linux software raid arrays the easiest segmentation was to just put the dm-crypt layer below the software raid layer.
But with a 5 disk raid5 it is a rather daunting task to input the passphrase five times. This is what this keyscripts solve for you.
Best shown by example:
Layer:
sda sdb sdc ... sde
+-----------+ +-----------+
| LUKS | | LUKS |
| +-------+ | | +-------+ |
| | RAID5 | | | | RAID5 | |
| | ... | | | | ... | |
Crypttab Entries:
<target> <source> <keyfile> <options>
sda_crypt /dev/sda2 main_data_raid luks,discard,keyscript=decrypt_keyctl
sdb_crypt /dev/sdb2 main_data_raid luks,discard,keyscript=decrypt_keyctl
...
sde_crypt /dev/sde2 main_data_raid luks,discard,keyscript=decrypt_keyctl
Crypttab Interface:
A keyscript is added to options including a keyfile definition as third parameter in the crypttab file. The keyscript is called with the keyfile as the first and only parameter. Additionally there are a few environment variables set but currently are not used by this keyscript (man 5 crypttab for exact description).
Keyscript:
decrypt_keyctl
uses the Linux kernel keyring facility to securely cache passphrases between multiple invocations. The keyfile parameter from crypttab is used to find the same passphrase between multiple invocations. The term used to described the key in the user keyring is cryptsetup:$CRYPTTAB_KEY
, unless $CRYPTTAB_KEY
is empty or has the special value none
, in which case the description is merely cryptsetup
(thus allowing compatibility with other tools like gdm and systemd-ask-password(1).)
Currently the cache timeout is 60 seconds and not configurable (please report a bug if it is too low for you).
Passphrase is piped between processes and could end up in unsecured memory, thus later swapped to disk! => Use of cryptoswap recommend!
To remove all traces of this keyscript you may want to cleanup the keyring completely with the following command afterwards:
sudo keyctl clear @u
– Jonas Meurer jonas@freesources.org Mon, 27 Sep 2010 14:01:35 +0000
– Guilhem Moulin guilhem@debian.org Tue, 25 Dec 2018 01:12:24 +0100