Skip to content

LUKS disk shifrlash

LVM: hajmni o'zgartirish va snapshot maqolasida ko'rilgan barcha vositalar — RAID, LVM, fayl tizimi — ma'lumotni tashkil qilish va boshqarishga xizmat qiladi, lekin ular diskning o'zi qo'lga tushib qolganda ma'lumotni himoya qilmaydi. Noutbuk o'g'irlansa yoki eskirgan disk utilizatsiyaga topshirilsa, shifrlanmagan diskdagi har qanday fayl oddiy mount buyrug'i bilan o'qiladi. LUKS (Linux Unified Key Setup) — Linux'dagi standart blok darajasidagi disk shifrlash tizimi — shu muammoni hal qiladi.

LUKS boshqa qatlamlar bilan qanday joylashishi muhim savol: shifrlash LVM'dan oldin ham, keyin ham qo'llanilishi mumkin. Bu maqolada ikkala yondashuv va ularning farqi ko'riladi, so'ng shifrlangan qurilma ustida oddiy fayl tizimi qanday yaratilishi fayl tizimi turlari maqolasiga ko'prik bo'ladi.

O'quv maqsadlari

Maqolani tugatgach:

  • LUKS blok darajasidagi shifrlash qanday ishlashini va u nimadan himoya qilishini tushunasiz;
  • cryptsetup luksFormat bilan yangi shifrlangan qurilma yarata olasiz;
  • cryptsetup open/close bilan shifrlangan qurilmani ochish va yopishni bajara olasiz;
  • /etc/crypttab orqali boot vaqtida avtomatik ochilishni sozlay olasiz;
  • passphrase va keyfile orqali kalit boshqaruvini, shu jumladan bir nechta kalit qo'shishni tushunasiz;
  • LUKS-on-LVM va LVM-on-LUKS tartiblari orasidagi farqni va qachon qaysi birini tanlashni baholaysiz.

LUKS nima va nimadan himoya qiladi

LUKS — blok qurilma darajasida ishlaydigan shifrlash standarti: u aniq bir faylni emas, butun bo'lim yoki LV'ni shifrlaydi. Shifrlangan qurilma faqat to'g'ri kalit (passphrase yoki keyfile) bilan "ochilgandan" (unlock) keyin oddiy blok qurilma sifatida ko'rinadi va undan foydalanish mumkin bo'ladi.

LUKS quyidagilardan himoya qiladi:

  • disk yoki noutbuk o'g'irlanishi/yo'qolishi — diskni boshqa kompyuterga ulab, kalitsiz ma'lumotni o'qib bo'lmaydi;
  • eskirgan diskni utilizatsiya qilish — diskni formatsiz tashlab yuborish xavfsiz, chunki ma'lumot kalitsiz o'qilmaydi.

LUKS quyidagilardan himoya qilmaydi:

  • tizim ishlab turgan va disk ochiq (unlocked) holatda bo'lganda, masalan uzoqdan (ssh) kirgan tajovuzkordan — bu holatda ma'lumot oddiy fayl tizimi kabi ochiq;
  • zararli dastur yoki noto'g'ri ruxsatlar orqali ma'lumot o'g'irlanishidan;
  • ma'lumot yo'qolishidan (disk buzilishi, tasodifiy o'chirish) — bu RAID va backup vazifasi.

Info

LUKS transport darajasida emas, dam olish holatidagi ma'lumot (data at rest) uchun himoya beradi. Tizim yoqilgan va disk ochilgan paytda LUKS "shaffof" ishlaydi — barcha yozish/o'qish operatsiyalari avtomatik shifrlanadi/deshifrlanadi, foydalanuvchi buni sezmaydi.

Kerakli paket

Debian/Ubuntu oilasida:

sudo apt update
sudo apt install cryptsetup

cryptsetup — LUKS bilan ishlash uchun asosiy vosita; luksFormat, open, close, luksAddKey kabi kichik buyruqlar shu dastur ostida ishlaydi.

Shifrlangan qurilma yaratish

Faraz qilaylik, /dev/sdb1 — bo'sh, shifrlanadigan bo'lim.

Danger

cryptsetup luksFormat diskdagi mavjud ma'lumotni qaytarib bo'lmas holda o'chirib yuboradi (LUKS sarlavhasi yozilishi bilan eski ma'lumotga kirish imkoni yo'qoladi). Bu buyruqni faqat bo'sh, ishlatilmayotgan bo'limda, tercihan disposable test VM'da bajaring. Production diskda ishlatishdan oldin qurilma nomini (lsblk, blkid) ikki marta tekshiring va zaruriy ma'lumotlarning backup nusxasi borligiga ishonch hosil qiling.

1. Tekshiruv (read-only)

lsblk
sudo cryptsetup luksDump /dev/sdb1

luksDump bo'limda LUKS sarlavhasi bor-yo'qligini ko'rsatadi — agar u xato bersa (Device /dev/sdb1 is not a valid LUKS device), bo'lim hali shifrlanmagan.

2. LUKS bilan formatlash

sudo cryptsetup luksFormat /dev/sdb1

Buyruq passphrase kiritishni va uni tasdiqlashni so'raydi. cryptsetup katta harflar bilan yozilgan tasdiqlashni talab qiladi (Are you sure? (Type 'yes' in capital letters)), bu tasodifiy ishga tushishning oldini oladi.

Natijani tekshirish:

sudo cryptsetup luksDump /dev/sdb1

Natijada LUKS versiyasi (odatda LUKS2, zamonaviy distributivlarda standart), shifrlash algoritmi (masalan aes-xts-plain64) va kalit uyalari (key slots) ro'yxati ko'rinadi.

3. Shifrlangan qurilmani ochish

sudo cryptsetup open /dev/sdb1 crypt_data
  • /dev/sdb1 — shifrlangan xom bo'lim;
  • crypt_data — ochilgandan keyin qurilmaga beriladigan nom (mapping name).

Passphrase to'g'ri kiritilgach, deshifrlangan qurilma quyidagi yo'lda paydo bo'ladi:

/dev/mapper/crypt_data

Tekshirish:

lsblk

sdb1 ostida crypt_data nomli qo'shimcha qatlam ko'rinadi — bu LVM'dagi /dev/mapper/vg_data-lv_app bilan bir xil device-mapper mexanizmi.

4. Fayl tizimi yaratish va mount qilish

Deshifrlangan qurilma ustida fayl tizimi oddiy bo'lim kabi yaratiladi:

sudo mkfs.ext4 /dev/mapper/crypt_data
sudo mkdir -p /mnt/secure
sudo mount /dev/mapper/crypt_data /mnt/secure

Ishlatib bo'lgach, qurilmani xavfsiz yopish:

sudo umount /mnt/secure
sudo cryptsetup close crypt_data

close dan keyin /dev/mapper/crypt_data yo'qoladi, /dev/sdb1 esa yana shifrlangan, o'qib bo'lmaydigan xom bo'lim sifatida qoladi.

Kalit boshqaruvi: passphrase va keyfile

LUKS bir nechta kalit (key slot) saqlashi mumkin — masalan, LUKS2 formatida odatda 32 tagacha. Bu bir necha foydalanuvchi yoki bir necha usul (passphrase + keyfile) bilan bitta qurilmani ochish imkonini beradi.

Qo'shimcha passphrase qo'shish

sudo cryptsetup luksAddKey /dev/sdb1

Buyruq avval mavjud passphrase'ni (tasdiqlash uchun), so'ng yangi passphrase'ni so'raydi.

Keyfile yaratish va qo'shish

Keyfile — passphrase o'rniga foydalaniladigan tasodifiy fayl, avtomatlashtirilgan (unattended) unlock uchun qulay:

sudo dd if=/dev/urandom of=/root/luks-keyfile bs=1024 count=4
sudo chmod 400 /root/luks-keyfile
sudo cryptsetup luksAddKey /dev/sdb1 /root/luks-keyfile

Endi qurilmani keyfile bilan ham ochish mumkin:

sudo cryptsetup open /dev/sdb1 crypt_data --key-file /root/luks-keyfile

Danger

Har bir kalit uyasi (key slot) qurilmani mustaqil ravishda to'liq ochish huquqini beradi. Keyfile parol kabi maxfiy — uni faqat root o'qiy oladigan ruxsat (chmod 400) bilan saqlash, va hech qachon shifrlangan bo'lmagan boshqa diskda yoki versiya nazorati tizimida (git) saqlamaslik kerak.

Kalitni bekor qilish (revoke)

Kalit yo'qolgan yoki kompromisga uchragan deb gumon qilinsa, uni o'chirish mumkin — lekin avval kamida bitta boshqa ishlaydigan kalit borligiga ishonch hosil qilish kerak:

sudo cryptsetup luksRemoveKey /dev/sdb1

Danger

LUKS'da "parolni tiklash" (forgot password) funksiyasi yo'q. Agar barcha kalit uyalaridagi passphrase va keyfile yo'qolsa, shifrlangan qurilmadagi ma'lumot butunlay va qaytarib bo'lmas holda yo'qoladi — hech qanday backdoor yoki tiklash usuli mavjud emas. Shu sababli passphrase va keyfile nusxalari alohida, xavfsiz joyda (masalan, parol menejeri yoki fizik seyf) saqlanishi shart.

/etc/crypttab: boot vaqtida avtomatik ochish

Har safar qo'lda cryptsetup open yozish noqulay bo'lgan doimiy qurilmalar uchun /etc/crypttab fayli boot vaqtida (yoki systemd orqali) avtomatik ochilishni sozlaydi.

Format:

<mapping_nomi>  <manba_qurilma>  <kalit_fayli>  <parametrlar>

Masalan, passphrase bilan (boot vaqtida qo'lda kiritiladi):

crypt_data  UUID=1234-5678-...  none  luks

Keyfile bilan (avtomatik, foydalanuvchi ishtirokisiz):

crypt_data  UUID=1234-5678-...  /root/luks-keyfile  luks

UUID ni aniqlash:

sudo blkid /dev/sdb1

crypttab da tavsiya etilgan yozuv — qurilma nomi (/dev/sdb1) emas, UUID orqali, chunki disk nomlari reboot'lar orasida o'zgarishi mumkin.

crypttab da tasvirlangan mapping keyin /etc/fstab da /dev/mapper/crypt_data sifatida ishlatiladi — bu fstab maqolasida davom etadi.

Warning

Agar crypttab da keyfile ko'rsatilgan bo'lsa-yu, u fayl o'zi shifrlanmagan tizim diskida saqlansa, LUKS'ning himoya qiymati kamayadi: disk o'g'irlansa, keyfile ham u bilan birga o'g'irlanadi. Avtomatik unlock qulaylik uchun, lekin "disk o'g'irlansa ma'lumot xavfsiz" degan asosiy maqsadga zid bo'lishi mumkin — bu murosani ongli ravishda baholash kerak (masalan, TPM orqali kalitni saqlash ko'proq xavfsiz muqobil).

LUKS-on-LVM va LVM-on-LUKS

Shifrlash va LVM qatlamlarini ikki xil tartibda joylashtirish mumkin, har birining o'z afzalligi bor.

LVM-on-LUKS (bitta katta LUKS, ichida LVM)

/dev/sdb  →  LUKS (cryptsetup)  →  /dev/mapper/crypt_lvm  →  PV → VG → LV1, LV2, ...

Butun disk bitta marta shifrlanadi, uning ichida esa LVM orqali bir nechta LV ajratiladi. Bu — eng keng tarqalgan yondashuv, ayniqsa noutbuk va desktop tizimlarida (masalan, Ubuntu o'rnatuvchisi "Encrypt the new Ubuntu installation" tanlansa aynan shu tartibni quradi):

  • Afzalligi: faqat bitta passphrase kiritish kifoya, barcha LV'lar (/, /home, swap) avtomatik ochiladi.
  • Kamchiligi: barcha LV bir xil kalit bilan himoyalangan — turli LV uchun turli xavfsizlik darajasi kerak bo'lsa, moslashuvchanlik yo'q.

LUKS-on-LVM (avval LVM, har bir LV alohida shifrlanadi)

/dev/sdb, /dev/sdc  →  PV → VG → LV1, LV2  →  har biri alohida LUKS bilan shifrlanadi
  • Afzalligi: har bir LV uchun alohida passphrase/keyfile, LV hajmini o'zgartirish (lvextend) osonroq (LUKS sarlavhasi qatlami kamroq murakkablik qo'shadi VG darajasida);
  • Kamchiligi: har bir LV uchun alohida unlock kerak, sozlash murakkabroq.
Mezon LVM-on-LUKS LUKS-on-LVM
Sozlash soddaligi Sodda, bitta unlock Murakkabroq, har LV uchun alohida
LV'larni alohida himoyalash Yo'q Ha
Odatiy ishlatilish joyi Noutbuk/desktop to'liq disk shifrlash Server, ko'p foydalanuvchili muhit

Amaliy ssenariy: shifrlangan LV yaratish va unlock avtomatlashtirish

Muammo: disposable test VM'da mavjud VG (vg_data) ichida yangi, shifrlangan LV yaratish va uni boot vaqtida keyfile orqali avtomatik ochilishini sozlash kerak.

1. Yangi LV yaratish (LVM asoslari maqolasidagi kabi):

sudo lvcreate -n lv_secure -L 5G vg_data

2. LV'ni LUKS bilan formatlash:

sudo cryptsetup luksFormat /dev/vg_data/lv_secure

3. Ochish va fayl tizimi yaratish:

sudo cryptsetup open /dev/vg_data/lv_secure crypt_secure
sudo mkfs.ext4 /dev/mapper/crypt_secure

4. Keyfile yaratish va qo'shish:

sudo dd if=/dev/urandom of=/root/lv_secure.key bs=1024 count=4
sudo chmod 400 /root/lv_secure.key
sudo cryptsetup luksAddKey /dev/vg_data/lv_secure /root/lv_secure.key

5. crypttab ga yozish:

crypt_secure  /dev/vg_data/lv_secure  /root/lv_secure.key  luks

6. Tekshirish — VM'ni qayta yuklab, avtomatik unlock bo'lganini tasdiqlash:

lsblk
df -hT | grep crypt_secure

Xulosa: LV LVM darajasida yaratiladi, keyin LUKS bilan shifrlanadi (LUKS-on-LVM tartibi) va crypttab orqali keyfile bilan avtomatik ochiladi. Keyfile faqat root o'qiy oladigan tizim diskida saqlanadi — bu qulaylik uchun murosa, disk butunlay o'g'irlansa himoya kamayishini yodda tutish kerak.

Ko'p uchraydigan xatolar

luksFormatni noto'g'ri qurilmada bajarish

cryptsetup luksFormat hech qanday tasdiqsiz ma'lumotni o'chirib yuboradi (faqat "yes" tasdig'idan tashqari). Buyruqni bajarishdan oldin har doim lsblk bilan qurilma nomini tekshirish shart.

Kalitni faqat bitta joyda saqlash

Passphrase yoki keyfile'ning yagona nusxasi yo'qolsa, ma'lumot butunlay yo'qoladi. Kamida ikkita mustaqil kalit (masalan, ikkita passphrase yoki passphrase + keyfile) va ularning xavfsiz backup nusxasi tavsiya etiladi.

crypttab da keyfile'ni shifrlanmagan diskda saqlash

Bu avtomatik unlock'ni qulay qiladi, lekin disk to'liq o'g'irlanganda LUKS himoyasini samarali ravishda bekor qiladi. Bunday holatlar uchun TPM asosidagi kalit saqlash (masalan, systemd-cryptenroll --tpm2-device) ko'proq mos yechim.

LUKS sarlavhasini backup qilishni unutish

LUKS sarlavhasi (header) shikastlansa, to'g'ri passphrase bilan ham qurilmani ochib bo'lmaydi. cryptsetup luksHeaderBackup bilan sarlavhaning alohida nusxasini olish tavsiya etiladi:

sudo cryptsetup luksHeaderBackup /dev/sdb1 --header-backup-file /root/luks-header-backup.img

Amaliy mashqlar

  1. Disposable VM'da bo'sh bo'limni LUKS bilan formatlab, passphrase orqali oching va yoping (open/close).
  2. Bitta qurilmaga ikkinchi passphrase va keyfile qo'shing (luksAddKey), so'ng har ikkisi bilan alohida open qilib ko'ring.
  3. crypttab orqali keyfile bilan avtomatik unlock sozlang va VM'ni qayta yuklab tekshiring.
  4. luksHeaderBackup bilan sarlavha nusxasini oling va luksDump orqali kalit uyalari sonini tekshiring.

Xulosa

LUKS blok darajasida shaffof shifrlash beradi: cryptsetup luksFormat bilan yaratilgan qurilma open orqali deshifrlangan holda /dev/mapper/... sifatida ko'rinadi, close orqali esa yana xavfsiz, o'qib bo'lmaydigan holatga qaytadi. Kalit boshqaruvi (passphrase, keyfile, luksAddKey/luksRemoveKey) va crypttab orqali avtomatlashtirish — bularning barchasi disk o'g'irlanganda ma'lumotni himoya qilish bilan kundalik qulaylik o'rtasidagi murosani belgilaydi. LUKS LVM bilan ikki tartibda birlashadi — LVM-on-LUKS (sodda, bitta unlock) yoki LUKS-on-LVM (moslashuvchan, LV darajasida alohida himoya) — va tanlov muhit talablariga bog'liq. Shifrlangan qurilma ustida qanday fayl tizimi tanlash va uni qanday sozlash esa fayl tizimi turlari maqolasida davom etadi.

Manbalar