暗号化されたコンテナを安全にマウントする方法は?
私はいくつかの小さなファイル(私の日記帳など)を暗号化したいと思います。ロックされている場合、ファイルは読み取れないコンテンツを含む単一のファイルとして表示する必要があります。ロックを解除すると、ファイルシステムにマウントされ、内部のファイルとディレクトリが表示され、コンテナルートでシェルを開く必要があります。シェルは、ls、cat、gedit、gitなどの一般的なプログラムを実行できる必要があります。シェルが終了したら、コンテナもマウント解除する必要があります。ただし、コンテナがマウントされていても、他のプロセスはその内容を見ることはできません。シェルとその子プロセスだけがそれを見ることができるはずです。
これを行う方法はありますか?
答え1
すでにLUKSを介してコンテナを設定しているとします。そうでない場合。fallocate
(100 MB以上)で空のファイルを作成し、通常はcryptsetup luksFormat
LUKSボリュームを設定するのと同じように進みます。
以下の場合には(多少)可能です。あなたroot
あなたがそれを保護したい場合は特権があります。他の人システムへのrootアクセス権を持つ人です。
ファイルアクセスを分離する最も簡単な方法は、コンテナ内のファイルを専用のユーザーアカウントが所有するようにすることです。説明されている隔離シェルはを使用して開くことができますsu otheruser
。ただし、完全にログインすることをお勧めします。つまり、通常のアカウントの場合はCtrl-Alt-F1、「個人日記」アカウントの場合はCtrl-Alt-F2など、2つのグラフィカルセッションを並べてsu
実行することをお勧めします。 "host" "X11 または Wayland モニターにアクセスできません。
別のグラフィックセッションはクリップボードの漏洩(誤ってStack Exchangeの投稿にログの内容を貼り付けるなど)を防ぎ、より重要なことに、「ホスト」アカウントのプロセスが情報をスヌーピングするのを防ぐという利点もあります。画面内容とキーボード入力これはWaylandセッションでは問題ではありませんが、X11ではマイナーな問題です。 「外部」プロセスが現在geditにロードされているファイルにアクセスできない場合でも、geditウィンドウのスクリーンショットを撮ることができます。
(最後に混乱を避けるために、両方の環境で異なるGUIテーマを使用できます。)
ext4に組み込まれている「fscrypt」ファイル暗号化機能は、UIDごとにロードされたキーを追跡します。
代替案は、create a new mount 名前空間を使用することですunshare
。なぜなら、名前空間内で実行されたマウントは、「親」名前空間のプロセスには表示されないからです。 (これは、FlatpakやDockerなどのコンテナがホストオペレーティングシステムのマウントリストを汚染しないようにするのと同じメカニズムです。)
outer$ sudo cryptsetup luksOpen ... myluksvol
outer$ sudo unshare --mount --propagation=private su - $USER
inner$ sudo mount /dev/mapper/myluksvol ~/mnt
(名前空間のすべてのプロセスを終了すると、その名前空間にのみ表示されるすべてのプロセスが自動的に削除されるため、インストールは「失われません」)。
直面する1つの問題は、多くのグラフィックプログラム(例gedit
:いいえシェルのサブプロセスですが、間接的にはセッションまたはdbus-daemon
サービスsystemd --user
マネージャのサブプロセスなので、名前空間の外にあります。 (geditにはこの機能を無効にするオプションが特にありますが-s
--standalone
)
dbus-run-session
これを防ぐには、シェル内で新しいD-Busセッションを開始する必要がありますが、これには固有の問題がある可能性があります。 (たとえば、GNOMEがGSettingsデータベースに書き込みをシリアル化するために使用する「dconf」サービスは、このサービスのインスタンスが1つだけ実行されていると仮定します。2番目のセッションバスと2番目のdconfインスタンスがあると、GSettingsデータベースが破損するできます。)