Mounting LUKS dari baris perintah

11

Ketika masuk nautilusatau cajasaya mengklik ikon disk terenkripsi dan memasukkan kata sandi saya, perangkat blok yang mendasarinya akan dipetakan ke /dev/mapper/luks-$UUIDdan itu dipasang di /media/$USER/$DISK, tidak ada kata sandi root diperlukan. Apakah ada cara untuk menjalankan proses ini dari baris perintah, tanpa GUI, termasuk menghindari sudo dan memiliki mountpoint yang dapat dilepas dari GUI.

PSkocik
sumber
Tanpa merasa pasti (karena itu komentar daripada jawaban) saya percaya GUI melakukan ini melalui udisks(atau udisks2). Investigasi opsi dari utilitas CLI-nya dapat memberikan jawaban lebih lanjut.
Wraeth
Juga, mungkin Anda memasukkan kata sandi pertama kali dan memilih untuk menyimpannya ke kata kunci login Anda. Oleh karena itu, secara teknis memang menggunakan kata sandi, tetapi dilakukan secara otomatis sehingga Anda tidak melihatnya.
Wraeth

Jawaban:

12

Saya tidak tahu cara perintah tunggal untuk melakukan ini. Program-program GUI melakukan sedikit interogasi pada disk untuk mengambil pendekatan yang "benar" dan Anda perlu melakukan beberapa dari pekerjaan itu sendiri. Anda tidak perlu sudo, dan saya pikir urutan kejadian yang dihasilkan relatif tidak menyakitkan.

Jawaban Singkat

Gunakan udisksctldari udisks2paket:

udisksctl unlock -b /path/to/disk/partition
udisksctl mount -b /path/to/unlocked/device

Akun pengguna Anda perlu diotorisasi secara tepat agar cara di atas berfungsi. Di Debian dan Ubuntu, itu berarti menambahkan akun Anda ke plugdevgrup.

Setelah selesai dengan disk:

udisksctl unmount -b /path/to/unlocked/device
udisksctl lock -b /path/to/disk/partition
udisksctl power-off -b /path/to/disk/or/partition

Cara Mengatur Berbagai Hal

Inilah cara Anda dapat mengatur berbagai hal (melalui baris perintah) untuk membuat proses menggunakan disk semudah mungkin. Saya anggap Anda ingin menggunakan keseluruhan drive USB sebagai sistem file tunggal. Konfigurasi lain akan memerlukan modifikasi pada instruksi. Peringatan tentang variasi: Saya belum menemukan cara untuk menggunakan LVM dalam wadah terenkripsi yang akan memungkinkan akun yang tidak memiliki hak istimewa untuk memutuskan segalanya. (Saya tidak melihat cara untuk menonaktifkan grup volume via udisksctl.)

Untuk keperluan ilustrasi, kami akan mengatakan bahwa disk tersebut adalah /dev/sda. Anda akan memerlukan nama untuk sistem file untuk membuatnya lebih mudah untuk referensi nanti. Saya akan menggunakan " example".

Partisi Disk

Jalankan sudo parted /dev/sdadan jalankan perintah berikut:

mklabel gpt
mkpart example-part 1MiB -1s
quit

The mkpartperintah mungkin akan meminta Anda untuk menyesuaikan parameter sedikit. Anda harus menerima nomor yang direkomendasikan.

Partisi sekarang akan tersedia via /dev/disk/by-partlabel/example-part.

Buat dan Pasang Partisi LUKS

sudo cryptsetup luksFormat /dev/disk/by-partlabel/example-part

Pergi melalui petunjuknya.

sudo cryptsetup luksOpen /dev/disk/by-partlabel/example-part example-unlocked

Perangkat terenkripsi sekarang tersedia di /dev/mapper/example-unlocked. Ini tidak akan menjadi hal yang permanen; itu hanya untuk proses setup.

Buat Sistem File Anda

Mari kita asumsikan bahwa sistem file yang Anda gunakan adalah XFS. Hampir semua sistem file tradisional lainnya akan bekerja dengan cara yang sama. Yang penting adalah menambahkan label yang bisa Anda referensi nanti:

sudo mkfs -t xfs -L example /dev/mapper/example-unlocked

Perangkat blok sistem file sekarang dapat diakses melalui /dev/disk/by-label/example.

Setel Izin Filesystem

Secara default, sistem file hanya dapat diakses oleh root. Dalam kebanyakan kasus, Anda mungkin ingin file dapat diakses oleh akun pengguna Anda. Dengan asumsi nama akun Anda adalah " user":

udisksctl mount -b /dev/disk/by-label/example
sudo chown user:user /media/user/example

Tutup Semuanya

udisksctl unmount -b /dev/disks/by-label/example
sudo cryptsetup luksClose example-unlocked

Gunakan Sistem File Anda

Inilah yang akan Anda lakukan secara teratur. Setelah mencolokkan drive USB,

udisksctl unlock -b /dev/disks/by-partlabel/example-part
udisksctl mount -b /dev/disks/by-label/example

Jika akun pengguna Anda " user", sistem file sekarang akan dipasang di /media/user/example.

Untuk melepas sistem file:

udisksctl unmount -b /dev/disks/by-label/example
udisksctl lock -b /dev/disks/by-partlabel/example-part
udisksctl power-off -b /dev/disks/by-partlabel/example-part

Sekarang Anda dapat memutuskan koneksi drive USB.

asciiphil
sumber
Saya membuat skrip bash open source yang mengotomatisasi dan menyederhanakan bagian "Gunakan Sistem File Anda": github.com/JerichoJyant/usbkey . Ini dirancang untuk usb flash drive. Saya berencana untuk memasukkan pengaturan yang Anda jelaskan di sini dalam skrip juga.
Josh Patton
3

The jawaban oleh asciiphil tampaknya saya untuk menjadi benar, dan harus ditandai seperti itu.

Itu dimulai, "Saya tidak tahu cara perintah tunggal untuk melakukan ini." Saya juga tidak, dan telah membuka permintaan fitur yang sesuai . Sebagai solusinya, seseorang dapat membuat skrip wrapper untuk memberikan cara perintah tunggal untuk membuka kunci dan memasang partisi.

Dengan asumsi Anda menggunakan Bash, simpan skrip di bawah ini sebagai, misalnya unlock-and-mount, buat itu dapat dieksekusi, dan letakkan di direktori di folder Anda PATH. Anda kemudian akan dapat membuka kunci dan memasang perangkat dalam satu langkah dengan unlock-and-mount /dev/disk/by-id/my-device-part-X.

Peringatan: ini bergantung pada penguraian pesan yang udisksctldikirim ke stdout, dan pada stabilitas udisksctlantarmuka baris perintah. Ini rapuh, menurut udisksctl halaman manual , yang mengatakan:

Program [ini] tidak dimaksudkan untuk digunakan oleh skrip atau program lain - opsi / perintah dapat berubah dengan cara yang tidak kompatibel di masa depan bahkan dalam rilis pemeliharaan.

Sementara itu, inilah skrip yang berfungsi untuk saat ini:

#!/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"
sampablokuper
sumber
0

Ini akan menggunakan kunci yang disimpan oleh Nautilus / Nemo:
gio mount -d /dev/dm-x

Untuk detailnya, lihat jawaban ini .

Redsandro
sumber