現在暗号化されているサムドライブをマウントするには、次の手順を実行します。
# 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-mount
polkitの権限を持つ)が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が提案した解決策を使用するか、使用などのトリックを使用して、パイプ入力を制御端末に表示させることができますexpect
。socat
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アダプタ。