암호화된 컨테이너를 안전하게 마운트

암호화된 컨테이너를 안전하게 마운트

암호화된 컨테이너를 안전하게 마운트하는 방법은 무엇입니까?

나는 여러 개의 작은 파일(내 일기장 등)을 암호화하고 싶습니다. 잠긴 경우 파일은 읽을 수 없는 내용이 포함된 단일 파일로 표시되어야 합니다. 잠금을 해제하면 파일 시스템으로 마운트되어 내부의 파일과 디렉터리가 표시되고 컨테이너 루트에서 셸이 열려야 합니다. 쉘은 ls, cat, gedit 또는 git과 같은 일반 프로그램을 실행할 수 있어야 합니다. 셸이 종료되면 컨테이너도 마운트 해제되어야 합니다. 그러나 컨테이너가 마운트되더라도 다른 프로세스는 해당 내용을 볼 수 없어야 합니다. 오직 셸과 해당 하위 프로세스만이 이를 볼 수 있어야 합니다.

이를 수행할 수 있는 방법이 있습니까?

답변1

이미 LUKS를 통해 컨테이너를 설정했다고 가정합니다. 그렇지 않은 경우 . fallocate(100MB 이상) 로 빈 파일을 만들고 cryptsetup luksFormat일반적으로 LUKS 볼륨을 설정하는 것처럼 진행합니다.


다음과 같은 경우에는 (다소) 가능합니다.root당신이 그것을 보호하고 싶다면 특권이 있습니다 .다른 사람시스템에 대한 루트 액세스 권한을 가진 사람입니다.

파일 액세스를 격리하는 가장 쉬운 방법은 컨테이너의 파일을 전용 사용자 계정이 소유하도록 하는 것입니다. 설명하는 격리 셸은 를 사용하여 열 수 있습니다 su otheruser. 그러나 완전히 로그인하는 것이 좋습니다. 즉, 일반 계정의 경우 Ctrl-Alt-F1, "개인 일기" 계정의 경우 Ctrl-Alt-F2 등 두 개의 그래픽 세션 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

(네임스페이스의 모든 프로세스를 종료하면 해당 네임스페이스에만 표시되는 모든 프로세스가 자동으로 제거되므로 설치가 "손실"되지 않습니다.)

직면하게 될 한 가지 문제는 많은 그래픽 프로그램(예 gedit:아니요셸의 하위 프로세스이지만 간접적으로는 세션 dbus-daemon또는 systemd --user서비스 관리자의 하위 프로세스이므로 네임스페이스 외부에 있습니다. (gedit에는 이 기능을 비활성화하는 옵션이 특별히 있지만 -s --standalone)

dbus-run-session이를 방지하려면 셸 내에서 새로운 D-Bus 세션을 시작 해야 하지만 여기에는 고유한 문제가 있을 수 있습니다. (예를 들어, GNOME이 GSettings 데이터베이스에 쓰기를 직렬화하는 데 사용하는 "dconf" 서비스는 이 서비스의 인스턴스가 하나만 실행되고 있다고 가정합니다. 두 번째 세션 버스와 두 번째 dconf 인스턴스가 있으면 GSettings 데이터베이스가 손상될 수 있습니다.)

관련 정보