当我单击加密磁盘的图标并输入密码时,底层块设备将被映射到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>