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 luksFormatbilan yangi shifrlangan qurilma yarata olasiz;cryptsetup open/closebilan shifrlangan qurilmani ochish va yopishni bajara olasiz;/etc/crypttaborqali 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:
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)
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
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:
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
/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:
Tekshirish:
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:
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
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:
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:
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:
Masalan, passphrase bilan (boot vaqtida qo'lda kiritiladi):
Keyfile bilan (avtomatik, foydalanuvchi ishtirokisiz):
UUID ni aniqlash:
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)
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)
- 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):
2. LV'ni LUKS bilan formatlash:
3. Ochish va fayl tizimi yaratish:
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:
6. Tekshirish — VM'ni qayta yuklab, avtomatik unlock bo'lganini tasdiqlash:
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:
Amaliy mashqlar
- Disposable VM'da bo'sh bo'limni LUKS bilan formatlab, passphrase orqali oching va yoping (
open/close). - Bitta qurilmaga ikkinchi passphrase va keyfile qo'shing (
luksAddKey), so'ng har ikkisi bilan alohidaopenqilib ko'ring. crypttaborqali keyfile bilan avtomatik unlock sozlang va VM'ni qayta yuklab tekshiring.luksHeaderBackupbilan sarlavha nusxasini oling valuksDumporqali 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.