从命令行安装 LUKS

从命令行安装 LUKS

当我单击加密磁盘的图标并输入密码时,底层块设备将被映射到nautilus并安装在,无需 root 密码。有没有办法在没有 GUI 的情况下从命令行调用此过程,包括避免 sudo 并让安装点能够从 GUI 再次卸载。caja/dev/mapper/luks-$UUID/media/$USER/$DISK

答案1

我不知道有什么单一命令的方法可以做到这一点。 GUI 程序会对磁盘进行大量询问,以采取“正确”的方法,您需要自己完成其中一些工作。不过,您不需要 sudo,而且我认为由此产生的事件序列相对来说是轻松的。

简短的回答

udisksctl从包装中使用udisks2

udisksctl unlock -b /path/to/disk/partition
udisksctl mount -b /path/to/unlocked/device

您的用户帐户需要获得适当的授权才能使上述功能发挥作用。在 Debian 和 Ubuntu 上,这意味着将您的帐户添加到plugdev组中。

当您完成磁盘操作后:

udisksctl unmount -b /path/to/unlocked/device
udisksctl lock -b /path/to/disk/partition
udisksctl power-off -b /path/to/disk/or/partition

如何设置

以下是您如何进行设置(通过命令行)以使磁盘使用过程尽可能轻松。我假设您想要将整个 USB 驱动器用作单个文件系统。其他配置需要修改说明。关于变化的警告:我还没有找到一种在加密容器中使用 LVM 的方法,该方法将允许非特权帐户断开所有连接。 (我没有找到通过 停用卷组的方法udisksctl。)

为了便于说明,我们将说磁盘是/dev/sda。您需要为文件系统命名,以便以后更容易引用。我会用“ example”。

对磁盘进行分区

运行sudo parted /dev/sda并运行以下命令:

mklabel gpt
mkpart example-part 1MiB -1s
quit

mkpart命令可能会提示您稍微调整参数。您应该可以接受其推荐的数字。

该分区现在可以通过/dev/disk/by-partlabel/example-part.

创建并挂载 LUKS 分区

sudo cryptsetup luksFormat /dev/disk/by-partlabel/example-part

按照提示进行操作。

sudo cryptsetup luksOpen /dev/disk/by-partlabel/example-part example-unlocked

加密设备现已在 上提供/dev/mapper/example-unlocked。这不会是一个永久的事情;这只是为了设置过程。

创建您的文件系统

假设您使用的文件系统是 XFS。几乎任何其他传统文件系统都会以相同的方式工作。重要的是添加一个您可以稍后引用的标签:

sudo mkfs -t xfs -L example /dev/mapper/example-unlocked

现在可以通过 访问文件系统的块设备/dev/disk/by-label/example

设置文件系统权限

默认情况下,文件系统只能由 root 访问。在大多数情况下,您可能希望您的用户帐户可以访问这些文件。假设您的账户名为“ user”:

udisksctl mount -b /dev/disk/by-label/example
sudo chown user:user /media/user/example

关闭一切

udisksctl unmount -b /dev/disk/by-label/example
sudo cryptsetup luksClose example-unlocked

使用你的文件系统

这是您经常要做的事情。插入 USB 驱动器后,

udisksctl unlock -b /dev/disk/by-partlabel/example-part
udisksctl mount -b /dev/disk/by-label/example

如果您的用户帐户是“ user”,文件系统现在将安装在/media/user/example

要卸载文件系统:

udisksctl unmount -b /dev/disk/by-label/example
udisksctl lock -b /dev/disk/by-partlabel/example-part
udisksctl power-off -b /dev/disk/by-partlabel/example-part

现在您可以断开 USB 驱动器的连接。

答案2

回答经过嗜ASCII码在我看来是正确的,并且应该这样标记。

它的开头是:“我不知道有什么单一命令的方法可以做到这一点。”我也没有,并且已经开通了相应的功能要求。作为一种解决方法,可以创建一个包装器脚本来提供一种解锁和挂载分区的单命令方式。

假设您使用 Bash,将下面的脚本另存为,例如unlock-and-mount,使其可执行,并将其放在PATH.然后,您将能够使用 一步解锁并安装设备unlock-and-mount /dev/disk/by-id/my-device-part-X

警告:这依赖于解析发送到标准输出的消息,以及命令行界面udisksctl的稳定性。udisksctl根据该机构的说法,这是脆弱的udisksctl 手册页,其中说:

[此]程序不适合由脚本或其他程序使用 - 即使在维护版本中,选项/命令将来也可能以不兼容的方式更改。

与此同时,这是目前有效的脚本:

#!/usr/bin/env bash
# A convenience wrapper around `udisksctl`.

# Trace execution 
set -x

# Abort on errors. (I find this helpful, despite the cautions given in
# http://mywiki.wooledge.org/BashFAQ/105 and
# http://mywiki.wooledge.org/BashFAQ/112 .)
set -e
set -u

# Define functions
die () {
    echo >&2 "$@"
    exit 1
}

# Validate input argument(s) 
[[ "$#" -eq 1 ]] || die "Exactly 1 argument required: path to partition ID. $# given"
[[ -b "$1" ]]    || die "$1 is not a block device"
[[ "$1" == /dev/disk/by-id/* ]] || die "$1 does not begin '/dev/disk/by-id/'"

# Unlock partition
unlockedpart="$(udisksctl unlock -b "$1" |\
 tail -n1 |\
 sed -e 's/^Unlocked \/dev\/[[:print:]]\+ as \([[:print:]]\+\).$/\1/' \
)"

# Mount unlocked partition
udisksctl mount -b "$unlockedpart"

答案3

这将使用 Nautilus/Nemo 存储的密钥:
gio mount -d /dev/dm-x

欲了解详情,看到这个答案

答案4

/etc/crypttab在 Debian 上,您可以使用和中的定义/etc/fstab

cryptdisks_start <name>
mount <mountpoint>

umount <mountpoint>
cryptdisks_stop <name>

相关内容