aboutsummaryrefslogtreecommitdiff

Keyper

A very simple program to be used with sshd to transfer keys to authorized servers. Mostly to be used with the Dracut module acquire-key-over-ssh for machines to acquire their encryption keys securely over ssh from a secure server. (It technically just is a way to dump a file upon login to an ssh connection.).

To set this up, run the following on the keyserver, replacing <id_rsa.pub> with the public key of the authorized user:

$ gcc -o keyper keyper.c
$ sudo su
# useradd keyper
# cp keyper /home/keyper
# cd /home/keyper
# chsh -s /home/keyper/keyper keyper
# mkdir .ssh
# echo 'environment="KEYPER_FILE=/home/keyper/keyper-key" <id_rsa.pub>' >> .ssh/authorized_keys
# chown -R keyper:keyper .ssh/
# chmod 700 .ssh
# head -c 512 /dev/urandom | base64 -w0 > keyper-key

Make sure PermitUserEnvironment is set to "yes" in sshd_config.

TL;DR this sets up a user, keyper, sets its shell to "keyper", which reads a file based on an environement variable. Then it sets up an authorized key and sets the environment based on the authorized ssh key. Thereby multiple different keys can be served different authorized keys.

There are some weird things that can happen with a binary key. For example, carridge returns may be removed, so to avoid these, the above commands base64-encode the key.

Note that the keyper files must be absolute paths.

On the client, run:

$ ssh keyper@keyserver > /tmp/key
$ sudo luksAddKey /dev/<disk> /tmp/key
$ shred /tmp/key

Disabling Keyper

Keyper can be temporarily disabled by touch-ing a file. This file defaults to keyper-disabled (in keyper's HOME directory), but can be overriden to any file by setting the environment KEYPER_DISABLE_FILE. When this file exists, keyper will exit with an error.