USBドライブの場合バージョン 2.6.4それから

USBドライブの場合バージョン 2.6.4それから

現在暗号化されているサムドライブをマウントするには、次の手順を実行します。

# Works!
pass thumbdrive-password | # get device password entry from password manager
    head -n 1 | # get the device password itself
    sudo cryptsetup luksOpen /dev/sdb thumbdrive # unlock device
udisksctl mount -b /dev/mapper/thumbdrive # mount device

私はこのようなことをしたい:

# Does not work!
pass thumbdrive-password |
    head -n 1 |
    udisksctl unlock -b /dev/sdb # unlock device
udisksctl mount -b /dev/mapper/luks-foobar # mount device with uuid "foobar"

これにより、半権限を持つユーザー(org.freedesktop.udisks2.filesystem-mountpolkitの権限を持つ)がsudoを使用せずに暗号化されたファイルシステムをマウントできます。 Udiskはインタラクティブなパスワードプロンプトを使用するため、このパイプ方法は許可されません。udisksctl unlock手動で入力せずにデバイスパスワードを入力するにはどうすればよいですか?

答え1

USBドライブの場合バージョン 2.6.4それから

メモ:私はこれをテストしていません。 udisk 2.6.4を取得すると、そうなります(いつでもhttps://github.com/NixOS/nixpkgs/pull/41723NixOS安定版としてバックポートされています)。

修正する:これでudisks 2.8.0があるので、ソリューションをテストできます。私が逃した唯一のことはpass (...) | head (...)。これを切り捨てるには、-nフラグを使用するか、echo出力| tr -d '\n'に追加します。head私はこれを以下の2つの解決策に反映しました。

一般(安全でない)ソリューション

この--key-fileフラグを使用し、キーファイルをパスワード文字列に置き換えます。/dev/sdbパスワードによるロック解除hunter2

udisksctl unlock --block-device /dev/sdb --key-file <(echo -n "hunter2")

コマンドラインを介して機密データを直接渡すことは安全ではないため、この方法は避けるべきです。

pass実装する

代わりに、パスワード文字列を検索しpass thumbdrive-password | head -n 1、末尾の改行を切り取り、次を使用してそれをキーファイルに置き換えます。

udisksctl unlock \
    --block-device /dev/sdb \
    --key-file <(pass thumbdrive-password | head -n 1 | tr -d '\n')

答え2

問題は、データが制御端末から読み取られるのではなく、stdin次から読み込まれることです。

ロック解除
暗号化されたデバイスのロックを解除します。パスワードは制御端末から要求され、正常に完了すると、プレーンテキストデバイスが標準出力として印刷されます。

Frostが提案した解決策を使用するか、使用などのトリックを使用して、パイプ入力を制御端末に表示させることができますexpectsocat

pass thumbdrive-password |
    head -n 1 |
    socat - EXEC:'udisksctl unlock -b /dev/sdb',pty,setsid,ctty

答え3

貢献するには遅すぎる時はありません。 #sudo apt-get install udisks2-lvm2を実行すると自動的にインストールされます。 Kubuntu 20.4 - 1TB SATAディスク用USBアダプタ。

関連情報