GNU/Linux >> Belajar Linux >  >> Debian

Enkripsi tanpa kata sandi dari partisi root Linux di Debian 8 dengan kunci USB

Keamanan data penting pada perangkat penyimpanan (hard disk, stik memori portabel)  diperlukan agar penyusup tidak dapat mencuri informasi sensitif. Dalam tutorial ini, fokus kami adalah keamanan sistem file root Linux dan area swap. Fitur enkripsi Linux default "LUKS"  akan digunakan, yang memerlukan frasa sandi saat boot. Oleh karena itu, tujuan kami selanjutnya adalah memberikan frasa sandi secara otomatis ke volume terenkripsi saat boot. Sudah ada beberapa artikel dengan topik yang sama untuk rilis lama dari distribusi Debian yang tersedia. Namun, dalam tutorial ini versi Debain 8 (Jessie) diinstal pada VM VirtualBox.

Penginstalan OS Debian 

Dalam tutorial ini, Debian Jessie diinstal pada VM dan detailnya ditunjukkan pada gambar berikut. Prosedur yang sama akan bekerja pada server "asli" atau Desktop juga.

Tambahkan file iso penginstal Debian net di VM dan mulai vm, prompt penginstal akan muncul. Pilih opsi "Instal" untuk memulai proses instalasi.

Beberapa layar berikut akan meminta setelan dasar Debian. Pilih opsi bahasa yang diinginkan dari daftar yang diberikan.

Pilih negara atau wilayah seperti yang ditunjukkan pada gambar berikut.

Konfigurasikan bahasa untuk keyboard.

Setelah pengaturan dasar, penginstal memuat lebih banyak komponen untuk konfigurasi.

Sekali lagi, lebih banyak pengaturan dasar akan dikonfigurasi selama proses instalasi.

1. Menyetel nama host

2. Konfigurasi Nama Domain

3. Menyetel kata sandi untuk pengguna "root".

4. Membuat user baru selain root.

5. atur Zona waktu

6. Dan terakhir, bagian terpenting adalah mempartisi disk.

Mempartisi hard disk secara manual  diperlukan untuk artikel ini. Oleh karena itu, pilih opsi "Manual" pada prompt di atas dan pilih hard disk yang diinginkan untuk memulai proses.

Seperti yang ditunjukkan pada gambar di atas, Debian akan diinstal di VM. Tekan enter untuk mulai mempartisi hard disk yang dipilih yang ditunjukkan di bawah ini.

Layar berikut akan muncul setelah menerima pesan di atas. Seperti yang ditunjukkan pada tangkapan layar berikut, saat ini tidak ada partisi pada hard disk.

Tekan "enter" untuk membuat partisi pertama pada hard disk virtual.

Partisi pertama yang kita buat di hard disk adalah "/dev/sda1" untuk titik mount "/boot".

Jenis primer atau Logis dipilih untuk partisi.

Lokasi partisi baru dipilih.

Titik mount "/boot" ditunjukkan pada tangkapan layar berikut.

Partisi pertama telah berhasil dibuat pada hard disk. Kernel Linux kemudian ditempatkan di partisi "/boot".

Partisi kedua yang dibuat pada hard disk VM adalah swap dan ukuran partisi swap harus dua kali lipat dari ukuran RAM. Seperti yang ditunjukkan pada tangkapan layar berikut, ruang kosong yang tersisa dipilih untuk ditukar.

Atur ukuran partisi swap.

Tangkapan layar berikut menunjukkan bahwa partisi tersebut dipilih sebagai area swap.

Partisi lain juga dibuat di VM.

Partisi inti dari platform Linux dibuat pada ruang yang tersisa untuk / (titik pemasangan "root"). Cuplikan berikut menunjukkan ukuran partisi "root".

Pilih opsi "volume fisik enkripsi" untuk  partisi baru di hard disk.

Opsi yang disorot pada tangkapan layar berikut diperlukan untuk mengenkripsi partisi pada platform Linux.

Pengaturan partisi setelah memilih "volume fisik untuk enkripsi" ditunjukkan pada gambar berikut. Metode enkripsi default adalah device-mapper (dm-crypt), algoritma enkripsinya adalah AES dengan ukuran kunci 256.

Pembuatan partisi yang berhasil pada hard disk virtual  ditunjukkan pada gambar di bawah ini.

Ini dia konfigurasi lanjutan volume terenkripsi di Debian yang dipilih pada tangkapan layar berikut.

Prompt berikut menunjukkan bahwa skema partisi saat ini perlu ditulis pada hard disk sebelum kita dapat memulai dengan konfigurasi volume terenkripsi.

Perintah berikut menunjukkan pembuatan volume terenkripsi pada platform Debian.

Pilih perangkat untuk volume terenkripsi. Jangan pilih perangkat boot "/dev/sda1" untuk volume terenkripsi karena tidak diizinkan untuk mengenkripsi partisi boot.

Seperti yang ditunjukkan pada tangkapan layar berikut, hanya "/dev/sda3" yang dipilih untuk volume terenkripsi dan ini adalah partisi root dari disk.

Setelah konfigurasi volume terenkripsi , pilih selesai untuk menerapkan perubahan.

Namun, kesalahan berikut akan muncul jika partisi swap tidak dipilih untuk volume terenkripsi.

Oleh karena itu, kami memilih kedua partisi untuk volume terenkripsi.

Pengaturan partisi untuk volume terenkripsi swap ditunjukkan di bawah ini.

Prompt berikut menunjukkan bahwa data akan dihapus pada "sda2" (swap).

Menghapus data di "sda2" &"sda3"  ditunjukkan di bawah ini.

Setelah proses selesai, masukkan frasa sandi untuk kedua partisi yang dienkripsi.

Memasukkan kembali frasa sandi yang sama.

Tabel partisi setelah konfigurasi volume terenkripsi yang berhasil pada disk ditampilkan di bawah ini.

Selesaikan proses partisi untuk memulai instalasi OS Debian. Namun, prompt kesalahan berikut akan muncul karena titik pemasangan "/" belum dipilih untuk partisi mana pun.

Setelah prompt kesalahan di atas, konfigurasikan ulang volume terenkripsi untuk mengatur titik pemasangan. Dalam artikel ini, "sda3_crypt" adalah sistem file root dan "sda2_crypt" adalah area swap.

Memilih titik pemasangan "/" untuk volume terenkripsi.

Memilih volume terenkripsi "sda2_crypt" sebagai area swap.

Tangkapan layar berikut menunjukkan tabel partisi terakhir untuk volume terenkripsi.

Pemformatan partisi ditunjukkan di bawah ini.

Setelah proses pemformatan selesai, sistem dasar akan diinstal.

Tangkapan layar berikut menunjukkan pemilihan mirror arsip untuk paket Debian.

Konfigurasi manajer paket ditunjukkan di bawah ini.

Hanya sistem dasar atau inti yang diinstal dan paket lain dapat diinstal dari daftar yang ditampilkan.

Pilih lingkungan desktop dan paket lain dari daftar.

Instalasi paket yang dipilih ditunjukkan di bawah ini.

Instalasi boot loader Linux "GRUB" ditunjukkan pada tangkapan layar berikut.

Perangkat (sda) dipilih untuk instalasi boot loader.

Akhirnya, proses instalasi selesai.

Setelah reboot, masukkan frasa sandi untuk mendekripsi disk sda3.

Masukkan frasa sandi untuk mendekripsi disk sda2 yang merupakan area swap.

Berhasil login pada sistem yang terinstal.

Konfigurasi untuk sistem file root tanpa kata sandi

Proses memasukkan frasa sandi saat boot sekarang akan otomatis menggunakan stik memori USB. Alih-alih menggunakan

sebuah frasa sandi , kunci rahasia pada USB akan mendekripsi volume terenkripsi. Sambungkan stik USB ke VM dan temukan lokasinya menggunakan perintah "dmesg". Itu terdeteksi sebagai "/dev/sdb" di VM saya.

Kunci rahasia 8192 byte acak diekstraksi dari stik usb menggunakan perintah dd.

dd if=/dev/sdb of=/root/secret.key bs=512 skip=4 count=16

Kunci rahasia yang dihasilkan di atas ditambahkan ke volume terenkripsi menggunakan perintah "cryptsetup". Secara default, frasa sandi disimpan di slot 0. Oleh karena itu, slot 1 akan digunakan untuk kunci rahasia kedua.

Jalankan perintah "blkid" untuk mendapatkan detail volume pada disk.

blkid

Dalam tutorial ini, kunci rahasia untuk dekripsi volume  ditambahkan di /dev/sda3 saja. Namun, itu juga dapat ditambahkan ke partisi "/dev/sda2" (swap).

cryptsetup luksAddKey /dev/sda3 /root/secret.key --key-slot 1

Aturan udev sederhana dibuat untuk perangkat USB dalam file /etc/udev/rules.d/99-custom-usb.rules, tautan simbolik yang akan kita gunakan adalah /dev/usbdevice.

SUBSYSTEMS=="usb", DRIVERS=="usb",SYMLINK+="usbdevice%n"

Muat ulang aturan menggunakan perintah berikut.

udevadm control --reload-rules

Masukkan perangkat USB untuk memverifikasi aturan khusus.

Skrip shell diperlukan untuk membaca kunci rahasia dari perangkat USB dan menyediakannya ke cryptsetup saat boot. Skrip dibuat sebagai "/usr/local/sbin/openluksdevices.sh" dan diambil dari situs http://www.oxygenimpaired.com/.

#!/bin/sh
############taken from following link#########
###http://www.oxygenimpaired.com/debian-lenny-luks-encrypted-root-hidden-usb-keyfile

TRUE=0
FALSE=1

# flag tracking key-file availability
OPENED=$FALSE

if [ -b /dev/usbdevice ]; then
# if device exists then output the keyfile from the usb key
dd if=/dev/usbdevice bs=512 skip=4 count=16 | cat
OPENED=$TRUE
fi

if [ $OPENED -ne $TRUE ]; then
echo "FAILED to get USB key file ..." >&2
/lib/cryptsetup/askpass "Try LUKS password: "
else
echo "Success loading key file for Root . Moving on." >&2
fi

sleep 2

Atur izin skrip agar dapat dieksekusi.

 chmod a+x /usr/local/sbin/openluksdevices.sh

Mirip dengan file konfigurasi fstab, file crypttab berisi informasi tentang volume terenkripsi di platform Linux. Tambahkan skrip shell untuk partisi terenkripsi sda3_crypt. Isi file konfigurasi "/etc/crypttab" untuk volume terenkripsi diberikan di bawah ini.

sda3_crypt /dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc none luks,keyscript=/usr/local/sbin/openluksdevices.sh

Tambahkan baris berikut di file "/etc/initramfs-tools/conf.d/cryptroot".

CRYPTROOT=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc

Pastikan "usb_storage" ditambahkan di file "/etc/initramfs-tools/modules".

Skrip shell berikut (/etc/initramfs-tools/hooks/udevusbkey.sh) juga diambil dari sumber eksternal. Ini digunakan untuk menambahkan aturan udev khusus di sistem file sementara "initrd".

#!/bin/sh
# udev-usbkey script
###taken from
###http://www.oxygenimpaired.com/ubuntu-with-grub2-luks-encrypted-lvm-root-hidden-usb-keyfile
PREREQ="udev"
prereqs()
{
echo "$PREREQ"
}

case $1 in
prereqs)
prereqs
exit 0
;;
esac

. /usr/share/initramfs-tools/hook-functions

# Copy across relevant rules

cp /etc/udev/rules.d/99-custom-usb.rules ${DESTDIR}/lib/udev/rules.d/

exit 0

Ubah izin skrip.

 chmod a+x /etc/initramfs-tools/hooks/udevusbkey.sh

Beberapa perubahan diperlukan dalam konfigurasi boot loader GRUB2. Namun, perubahan langsung pada file konfigurasi "/boot/grub/grub.cfg"  tidak diizinkan. Oleh karena itu, ubah parameter "GRUB_CMDLINE_LINUX_DEFAULT" di file konfigurasi "/etc/default/grub". Seperti yang ditunjukkan di bawah, "rootdelay" dan "cryptopts"  disertakan dalam parameter "GRUB_CMDLINE_LINUX_DEFAULT".


GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=20 cryptopts=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc,keyscript=/lib/cryptsetup/scripts/openluksdevices.sh"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtainsConclusion

Jalankan perintah "update-grub" untuk menerapkan perubahan di atas pada file konfigurasi "/boot/grub/grub.cfg".

Setelah perintah di atas, perubahan berikut diterapkan di file konfigurasi "/boot/grub/grub.cfg".

echo    'Loading Linux 3.16.0-4-686-pae ...'
linux   /vmlinuz-3.16.0-4-686-pae root=UUID=b30cdb22-8e3c-4ffd-a0c7-af96b90ba016 ro  rootdelay=20 cryptopts=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc,keyscript=/lib/cryptsetup/scripts/openluksdevices.sh
echo    'Loading initial ramdisk ...'
initrd  /initrd.img-3.16.0-4-686-pae

Jalankan "update-initramfs -u"  untuk memperbarui file sistem file sementara untuk semua kernel.

Sebelum melakukan boot ulang, buka paket "initrd.img" yang baru dibuat dan verifikasi bahwa skrip kunci telah disalin ke direktori  "lib/cryptsetup/scripts" dan aturan udev khusus ke dalam direktori "lib/udev/rules.d/".

cd /tmp/
zcat /boot/initrd.img-3.16.0-4-686-pae | cpio -iv

Keyscript berhasil dimasukkan ke dalam skrip initramfs.

Aturan USB khusus juga disertakan dalam aturan udev.

Tambahkan perangkat USB di setelan VM sebelum menguji seluruh penyiapan.

Akhirnya, kunci rahasia berhasil dimuat untuk volume terenkripsi.

Kesimpulan

Pada artikel ini, partisi terenkripsi dibuka menggunakan kunci rahasia yang disimpan di perangkat memori usb. Skrip shell otomatis digunakan untuk menyediakan kunci rahasia untuk volume terenkripsi saat boot.


Debian
  1. Gagal Menandatangani Csr Dengan Kunci Root Ca?

  2. Linux – Bagaimana Mengenkripsi Linux (debian 8) Pasca Instalasi Dan Apa Konsekuensinya?

  3. Debian – Media Berubah:Silakan Masukkan Disk Berlabel ‘debian Gnu/linux?

  1. Linux – Membuat Penyalinan Disk/disk Lebih Lambat?

  2. Debian – Mengubah Ukuran Partisi Root Tanpa Menghapus dan Menginstal Ulang Linux (atau Kehilangan Data)?

  3. Instal OpenJDK 17, 16, 15, 13, 11 atau 8 terbaru di Ubuntu, Debian atau RHEL dengan Zulu OpenJDK build

  1. Cara menginstal Arch Linux dengan Enkripsi Disk Penuh

  2. Cara membuat USB Windows 10 yang dapat di-boot di Linux dengan WoeUSB baru

  3. Bagaimana cara mengubah frasa sandi enkripsi disk penuh?