如何使用密码自动化 cryptsetup-luksAddKey?

如何使用密码自动化 cryptsetup-luksAddKey?

上下文:我用存储在 USB 加密狗上的密钥文件替换了启动时提示的密码。我的问题涉及以下步骤:# cryptsetup luksAddKey /path/to/mykeyfile

我生成的添加密钥是这样生成的:dd if=/dev/urandom of=mykeyfile bs=512 count=4

**我的目标是让它在bash中运行(它可以工作......),但是出去密码短语提示,最后是零提示。 ** 我的问题:

  • 我可以做类似的事情吗cryptsetup luksAddKey -passphrase "Hello, my name is Jolly Roger" /path/to/mykeyfile
  • 或者至少,我可以将密码传递给脚本调用的参数吗?# sh myscript.sh -passphrase "Jolly..."

它确实存在于 SSH sshpass、.

安全说明:我根本不在乎在脚本中写入密码,因为它被/etc/crypttab密钥文件替换。此外,该脚本将供机密的内部成员使用。这是私人的。

答案1

如果键不包含任何换行符,您可以简单地通过管道将其输入。

# cryptsetup luksFormat foobar.img originalkey

WARNING!
========
This will overwrite data on foobar.img irrevocably.

Are you sure? (Type uppercase yes): YES

# cryptsetup luksAddKey foobar.img newkey < originalkey

不幸的是,cryptsetup有多种处理密钥文件的模式,并且根据其所处的模式不同地对待换行符等。对于特殊字符键,管道不起作用:

# cryptsetup luksAddKey foobar.img newkey < originalkey
No key available with this passphrase.

在这种情况下,您需要 keyfile 选项:

# cryptsetup luksAddKey --key-file=originalkey foobar.img newkey

或者如果你仍然想通过管道传输它,

# cryptsetup luksAddKey --key-file=- foobar.img newkey < originalkey

令人困惑,是吗?如果您使用仅 ASCII、不超过 512 个字符且不包含任何不可打印字符的键,则可以避免歧义,这样您也可以在紧要关头手动键入。

如果可能的话,你应该避免类似的事情--password=xyz。此信息是公开的,它会将您的密码泄露到进程列表、shell 历史记录以及可能的其他位置。始终使用具有适当限制的读取权限的管道或文件。

答案2

要回答您的问题,只需在stdin.所以做一个:

zenity --password | cryptsetup luksAddKey /dev/mydevice /path/to/my/keyfile

有关更多信息,--key-file允许您指向一个文件作为解锁设备的密钥。您可以使用 --key-file=- 来使用来自标准输入的信息。但这需要是一个密钥文件。不是包含您的密码的文件。

示例:

cat /tmp/fileContainingPassword | cryptsetup luksAddKey /dev/mydevice /path/to/my/new/keyfile

cat /path/to/keyfile | cryptsetup luksAddKey --key-file=- /dev/mydevice /path/to/my/new/keyfile

是不同的。第一个读取密码以解锁设备stdin
第二个读取密钥文件以解锁设备stdin

cryptsetup 对密钥文件和密码的处理方式不同。

另一个信息:该--key-file选项仅读取已分配给设备的密钥文件以解锁设备以及添加新密钥。要分配新密钥,您只能指向一个文件。没有-可供读取的选项stdin。如果您不想在文件系统上留下任何内容,但仍然没有在提示符下键入任何内容(既不是解锁密码,也不是新密码),那么您必须使用命名管道。

mkfifo /tmp/mytmpkey
# Here we put the process in the background with &,
# otherwise, it would block until
# cryptsetup read the value from /tmp/mytmpkey
dd if=/dev/urandom of=/tmp/mytmpkey bs=512 count=4 & 
cryptsetup luksAddKey --key-file /path/to/unlockKey /tmp/mytmpkey
rm /tmp/mytmpkey 

相关内容