LUKS disk shifrlash
LVM: hajmni o'zgartirish va snapshot gacha ko'rilgan har bir vosita — RAID, LVM, fayl tizimlari — ma’lumotlarni tartibga solish va boshqarishga yordam beradi, lekin diskning o'zi begona qo'lga tushib qolsa, ularning hech biri ma’lumotlarni himoya qilmaydi. Agar noutbuk o'g'irlansa yoki eski disk tashlab yuborilsa, shifrlanmagan diskdagi har qanday faylni oddiy mount buyrug'i bilan o'qish mumkin. LUKS (Linux Unified Key Setup) — Linux’ning standart block darajasidagi disk shifrlash tizimi — aynan shu muammoni hal qiladi.
LUKS boshqa qatlamlarga nisbatan qayerda turishi muhim: shifrlashni LVM’dan pastda ham, yuqorida ham qo'llash mumkin. Bu maqola ikkala yondashuvni va ularning murosalarini ko'rib chiqadi, so'ng shifrlangan qurilma ustida oddiy fayl tizimi qanday yaratilishiga ko'prik tashlaydi; bu Fayl tizimi turlari maqolasida davom etadi.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
- LUKS block darajasidagi shifrlash qanday ishlashini va u nimadan himoya qilishini tushuntirish;
cryptsetup luksFormatbilan yangi shifrlangan qurilma yaratish;- shifrlangan qurilmani
cryptsetup open/closebilan ochish va yopish; /etc/crypttaborqali boot paytida avtomatik ochilishni sozlash;- kalitlarni passphrase va keyfile orqali boshqarish, jumladan bir nechta kalit qo'shish;
- LUKS-on-LVM va LVM-on-LUKS o'rtasidagi farqni va qachon qaysi birini tanlashni baholash.
LUKS nima va u nimadan himoya qiladi
LUKS — block qurilma darajasida ishlaydigan shifrlash standarti: u muayyan faylni emas, butun bo'lim yoki LV’ni shifrlaydi. Shifrlangan qurilma faqat to'g'ri kalit (passphrase yoki keyfile) bilan "ochilgandan" keyingina foydalanish mumkin bo'lgan oddiy block qurilmaga aylanadi.
LUKS quyidagilardan himoya qiladi:
- o'g'irlangan yoki yo'qolgan disk yoki noutbuk — diskni boshqa kompyuterga ulasa ham, uni kalitsiz o'qib bo'lmaydi;
- eski diskni tashlab yuborish — diskni avval tozalamasdan xavfsiz tashlab yuborish mumkin, chunki ma’lumotlarni kalitsiz o'qib bo'lmaydi.
LUKS quyidagilardan himoya qilmaydi:
- tizim ishlab turgan va disk ochiq paytdagi hujumchidan (masalan, SSH orqali) — bu holatda ma’lumotlar xuddi oddiy fayl tizimidagidek ochiq;
- zararli dastur yoki noto'g'ri sozlangan ruxsatlar orqali ma’lumotlarni o'g'irlashdan;
- ma’lumotlarni yo'qotishdan (disk nosozligi, tasodifiy o'chirish) — bu RAID va zaxira nusxalarning vazifasi.
Info
LUKS uzatilayotgan ma’lumotlarni emas, saqlanayotgan ma’lumotlarni (data at rest) himoya qiladi. Tizim ishlab turgan va disk ochiq bo'lganda LUKS shaffof ishlaydi — har bir yozish/o'qish amali foydalanuvchiga sezdirmasdan avtomatik shifrlanadi/ochiladi.
Kerakli paket
Debian/Ubuntu oilasida:
cryptsetup — LUKS bilan ishlashning asosiy vositasi; luksFormat, open, close va luksAddKey kabi quyi buyruqlar hammasi shu dastur ostida ishlaydi.
Shifrlangan qurilma yaratish
Faraz qilaylik, /dev/sdb1 — shifrlanishi kerak bo'lgan bo'sh bo'lim.
Danger
cryptsetup luksFormat diskdagi mavjud ma’lumotlarni qaytarib bo'lmaydigan qilib o'chiradi (LUKS sarlavhasi yozilgach, eski ma’lumotlarga kirish yo'qoladi). Bu buyruqni faqat bo'sh, ishlatilmayotgan bo'limda, ideal holda o'chirib tashlasa bo'ladigan sinov VM’ida ishga tushiring. Buni production diskda ishlatishdan oldin qurilma nomini qayta tekshiring (lsblk, blkid) va kerakli ma’lumotlarning zaxira nusxasi olinganini tasdiqlang.
1. Tekshiruv (faqat o'qish)
luksDump bo'limda LUKS sarlavhasi bor-yo'qligini ko'rsatadi — agar u xato qaytarsa (Device /dev/sdb1 is not a valid LUKS device), bo'lim hali shifrlanmagan.
2. LUKS bilan formatlash
Buyruq passphrase va uning tasdig'ini so'raydi. cryptsetup tasdiqni katta harflar bilan yozishni talab qiladi (Are you sure? (Type 'yes' in capital letters)), bu tasodifiy ishga tushirishning oldini oladi.
Natijani tekshirish:
Natija LUKS versiyasini (odatda zamonaviy distributivlarda sukut bo'yicha LUKS2), shifrlash algoritmini (masalan, aes-xts-plain64) va key slot’lar ro'yxatini ko'rsatadi.
3. Shifrlangan qurilmani ochish
/dev/sdb1— xom shifrlangan bo'lim;crypt_data— ochilgandan keyin qurilmaga beriladigan nom (mapping nomi).
To'g'ri passphrase kiritilgach, ochilgan qurilma quyidagi joyda paydo bo'ladi:
Tekshirish:
sdb1 ostida crypt_data nomli qo'shimcha qatlam paydo bo'ladi — bu LVM’dagi /dev/mapper/vg_data-lv_app bilan bir xil device-mapper mexanizmi.
4. Fayl tizimi yaratish va mount qilish
Ochilgan qurilmada fayl tizimi xuddi oddiy bo'limdagidek yaratiladi:
sudo mkfs.ext4 /dev/mapper/crypt_data
sudo mkdir -p /mnt/secure
sudo mount /dev/mapper/crypt_data /mnt/secure
Ish tugagach, qurilmani xavfsiz yoping:
close dan keyin /dev/mapper/crypt_data yo'qoladi va /dev/sdb1 yana shifrlangan, o'qib bo'lmaydigan xom bo'limga aylanadi.
Kalitlarni boshqarish: passphrase va keyfile
LUKS bir nechta kalitni (key slot’larni) saqlay oladi — LUKS2 odatda 32 tagacha qo'llab-quvvatlaydi. Bu bitta qurilmani bir nechta foydalanuvchi yoki bir nechta usul (passphrase + keyfile) bilan ochish imkonini beradi.
Qo'shimcha passphrase qo'shish
Buyruq avval mavjud passphrase’ni (tasdiqlash uchun), so'ng yangisini so'raydi.
Keyfile yaratish va qo'shish
Keyfile — passphrase o'rniga ishlatiladigan tasodifiy fayl; odam ishtirokisiz, avtomatik ochish 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 key slot qurilmaga mustaqil ravishda to'liq kirish huquqini beradi. Keyfile parol kabi maxfiy — uni faqat root o'qiy oladigan ruxsat bilan (chmod 400) saqlang va hech qachon boshqa, shifrlanmagan diskda yoki versiyalarni boshqarish tizimida (git) saqlamang.
Kalitni bekor qilish
Agar kalit yo'qolsa yoki buzib olingan deb gumon qilinsa, uni olib tashlash mumkin — lekin avval kamida bitta boshqa ishlaydigan kalit mavjudligini tasdiqlang:
Danger
LUKS’da "parolni unutdim" tiklash funksiyasi yo'q. Agar barcha key slot’lardagi barcha passphrase va keyfile’lar yo'qolsa, shifrlangan qurilmadagi ma’lumotlar butunlay va qaytarib bo'lmaydigan tarzda yo'qoladi — hech qanday orqa eshik yoki tiklash usuli yo'q. Aynan shu sababli passphrase va keyfile nusxalarini alohida, xavfsiz joyda (parol menejeri yoki fizik seyf) saqlash kerak.
/etc/crypttab: boot paytida avtomatik ochish
Har safar cryptsetup open ni qo'lda yozish amaliy bo'lmagan doimiy qurilmalar uchun /etc/crypttab boot paytida (yoki systemd orqali) avtomatik ochishni sozlaydi.
Format:
Masalan, passphrase bilan (boot paytida qo'lda kiritiladi):
Keyfile bilan (avtomatik, foydalanuvchi ishtirokisiz):
UUID ni topish:
crypttab dagi tavsiya etilgan yozuv qurilma nomidan (/dev/sdb1) emas, UUID dan foydalanadi, chunki disk nomlari qayta yuklashlar osha o'zgarishi mumkin.
crypttab da tasvirlangan mapping keyinroq /etc/fstab da /dev/mapper/crypt_data sifatida ishlatiladi — bu fstab maqolasida batafsilroq ko'rib chiqiladi.
Warning
Agar crypttab xuddi shu, shifrlanmagan tizim diskida saqlanadigan keyfile’ga ishora qilsa, LUKS’ning himoya qiymati pasayadi: disk butunligicha o'g'irlansa, keyfile ham u bilan birga ketadi. Avtomatik ochish qulay, lekin u "disk o'g'irlansa ham ma’lumotlar xavfsiz qoladi" degan asosiy maqsadni yo'qqa chiqarishi mumkin — bu murosani ataylab baholash kerak (masalan, TPM asosidagi kalit saqlash xavfsizroq muqobil).
LUKS-on-LVM va LVM-on-LUKS
Shifrlash va LVM qatlamlarini ikki xil tartibda joylashtirish mumkin va har birining o'z afzalligi bor.
LVM-on-LUKS (bitta katta LUKS qurilma, ichida LVM)
Butun disk bir marta shifrlanadi va uning ichida LVM orqali bir nechta LV ajratiladi. Bu eng keng tarqalgan yondashuv, ayniqsa noutbuk va desktoplarda (masalan, "Encrypt the new Ubuntu installation" tanlanganda Ubuntu o'rnatuvchisi aynan shuni sozlaydi):
- Afzalligi: faqat bitta passphrase kiritish barcha LV’larni (
/,/home, swap) avtomatik ochadi. - Kamchiligi: har bir LV bitta kalitni bo'lishadi — turli LV’lar 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 va LV hajmini o'zgartirish (
lvextend) soddaroq (LUKS sarlavha qatlami VG darajasida kamroq murakkablik qo'shadi); - Kamchiligi: har bir LV o'zining alohida ochilishini talab qiladi va sozlash murakkabroq.
| Mezon | LVM-on-LUKS | LUKS-on-LVM |
|---|---|---|
| Sozlash soddaligi | Oddiy, bitta ochish | Murakkabroq, har bir LV uchun alohida |
| LV’larni alohida himoyalash | Yo'q | Ha |
| Odatiy foydalanish holati | Noutbuk/desktopda butun diskni shifrlash | Server, ko'p foydalanuvchili muhit |
Shifrlangan SSD’da TRIM/discard: ataylab qilingan murosa
Sukut bo'yicha LUKS TRIM/discard so'rovlarining ostidagi SSD’ga yetib borishini to'sadi. Bu e’tibordan chetda qolgan narsa emas, xavfsizlik tanlovi: u yoqilmaganda xom diskni tekshirayotgan hujumchi hamma joyda bir xil shifrlangan ma’lumotni ko'radi. TRIM’ni o'tkazish SSD’ga qaysi bloklar ishlatilmayotganini aytadi — bu ishlatilgan va bo'sh joyning andozasini (taxminan fayl tizimi qanchalik to'la va ma’lumotlar qayerda turgani) oshkor qiladi va fayl tizimi umuman mavjudligini ham ko'rsatib qo'yishi mumkin.
Uni o'chiq qoldirishning narxi — SSD bo'shatilgan bloklarni qaytarib ola olmaydi, shuning uchun yozish unumdorligi va diskning xizmat muddati vaqt o'tishi bilan pasayadi. Uni yoqish — ongli qaror:
Uni doimiy qilish uchun /etc/crypttab dagi qurilma parametrlariga discard ni qo'shing:
Warning
LUKS qurilmasida discard ni yoqish uning "disk bir xil tasodifiy ma’lumotga o'xshaydi" degan kafolatini zaiflashtiradi. Noutbukda yoki bir martalik bulut SSD’sida unumdorlik foydasi odatda buni oqlaydi; fayl tizimi tuzilishini yashirish muhim bo'lgan yuqori xavfsizlikli hostda esa uni o'chiq qoldiring. Har holda, bu kimdir nusxalab qo'ygan sukut bo'yicha qiymat emas, siz tushuntira oladigan qaror bo'lishi kerak.
LUKS1 va LUKS2
Zamonaviy distributivlarda cryptsetup luksFormat sukut bo'yicha LUKS2 dan foydalanadi va bu to'g'ri sukut bo'yicha tanlov: LUKS2 ortiqcha sarlavhani saqlaydi (ikkinchi nusxa, shuning uchun bitta shikastlangan sarlavha endi qurilmani yaroqsiz qilib qo'ymaydi), xotiraga og'ir Argon2id kalit hosil qilish funksiyasini qo'llab-quvvatlaydi (LUKS1 dagi PBKDF2 ga qaraganda brute-force qilish ancha qiyin) va onlayn qayta shifrlashga imkon beradi. Agar muayyan bootloader yoki faqat LUKS1 ni tushunadigan eski tizim --type luks1 ni majburiy qilmasa, LUKS2 da qoling. Qurilma qaysi birini ishlatayotganini cryptsetup luksDump (Version: qatori) bilan tasdiqlang.
Amaliy vaziyat: shifrlangan LV yaratish va ochishni avtomatlashtirish
Muammo: o'chirib tashlasa bo'ladigan sinov VM’ida mavjud VG (vg_data) ichida yangi, shifrlangan LV yarating va uni keyfile orqali boot paytida avtomatik ochiladigan qilib sozlang.
1. Yangi LV yarating (LVM asoslari maqolasidagidek):
2. LV’ni LUKS bilan formatlang:
3. Uni oching va fayl tizimi yarating:
4. Keyfile yarating va qo'shing:
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 yozing:
6. Tekshiring — VM’ni qayta yuklang va avtomatik ochilish sodir bo'lganini tasdiqlang:
Xulosa: LV LVM darajasida yaratildi, so'ng LUKS bilan shifrlandi (LUKS-on-LVM tartibi) va crypttab orqali keyfile yordamida avtomatik ochildi. Keyfile faqat root o'qiy oladigan tizim diskida saqlanadi — bu qulaylik uchun murosa va disk butunligicha o'g'irlansa, himoya pasayishini yodda tutish kerak.
Keng tarqalgan xatolar
luksFormat ni noto'g'ri qurilmada ishga tushirish
cryptsetup luksFormat "yes" so'rovidan boshqa hech qanday tasdiqsiz ma’lumotlarni o'chiradi. Buyruqni ishga tushirishdan oldin har doim qurilma nomini lsblk bilan tekshiring.
Kalitni faqat bitta joyda saqlash
Agar passphrase yoki keyfile’ning yagona nusxasi yo'qolsa, ma’lumotlar butunlay yo'qoladi. Kamida ikkita mustaqil kalit (masalan, ikkita passphrase yoki passphrase va keyfile) va har birining xavfsiz zaxira nusxasi tavsiya etiladi.
crypttab ishora qilgan keyfile’ni shifrlanmagan diskda saqlash
Bu avtomatik ochishni qulay qiladi, lekin disk butunligicha o'g'irlansa, LUKS himoyasini amalda bekor qiladi. Bunday holatlar uchun TPM asosidagi kalit saqlash (masalan, systemd-cryptenroll --tpm2-device) yaxshiroq mos keladi.
LUKS sarlavhasining zaxira nusxasini olishni unutish
Agar LUKS sarlavhasi shikastlansa, qurilmani to'g'ri passphrase bilan ham ochib bo'lmaydi. Sarlavhaning alohida nusxasini cryptsetup luksHeaderBackup bilan olish tavsiya etiladi:
Mashqlar
- O'chirib tashlasa bo'ladigan VM’da bo'sh bo'limni LUKS bilan formatlang va uni passphrase yordamida oching/yoping.
- Xuddi shu qurilmaga ikkinchi passphrase va keyfile qo'shing (
luksAddKey), so'ng uni har biri bilan alohida ochib ko'ring. - Keyfile bilan
crypttaborqali avtomatik ochishni sozlang va VM qayta yuklangandan keyin buni tasdiqlang. luksHeaderBackupbilan sarlavhaning zaxira nusxasini oling valuksDumpbilan key slot’lar sonini tekshiring.
Mashqni bajardim deyish uchun: o'chiq holatda o'g'irlangan disk bilan ishlab turgan va ochiq holatda o'g'irlangan disk uchun LUKS aslida ikkalasidan qaysi birini himoya qilishini tushuntira olishingiz kerak.
Xulosa
LUKS shaffof, block darajasidagi shifrlashni ta’minlaydi: cryptsetup luksFormat bilan yaratilgan qurilma open dan keyin /dev/mapper/... sifatida ochilgan holda ko'rinadi va close dan keyin xavfsiz, o'qib bo'lmaydigan holatga qaytadi. Kalitlarni boshqarish (passphrase, keyfile, luksAddKey/luksRemoveKey) va crypttab orqali avtomatlashtirish — bularning hammasi disk o'g'irlanganda ma’lumotlarni himoya qilish bilan kundalik qulaylik o'rtasidagi murosani belgilaydi. LUKS LVM bilan ikki tartibda birlashadi — LVM-on-LUKS (oddiy, bitta ochish) yoki LUKS-on-LVM (moslashuvchan, har bir LV uchun alohida himoya) — va tanlov muhit talablariga bog'liq. Shifrlangan qurilma ustida qaysi fayl tizimini tanlash va uni qanday sozlash Fayl tizimi turlari maqolasida davom etadi.