Tarkibga o'tish

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 luksFormat bilan yangi shifrlangan qurilma yaratish;
  • shifrlangan qurilmani cryptsetup open/close bilan ochish va yopish;
  • /etc/crypttab orqali 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:

sudo apt update
sudo apt install cryptsetup

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)

lsblk
sudo cryptsetup luksDump /dev/sdb1

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

sudo cryptsetup luksFormat /dev/sdb1

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:

sudo cryptsetup luksDump /dev/sdb1

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

sudo cryptsetup open /dev/sdb1 crypt_data
  • /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:

/dev/mapper/crypt_data

Tekshirish:

lsblk

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:

sudo umount /mnt/secure
sudo cryptsetup close crypt_data

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

sudo cryptsetup luksAddKey /dev/sdb1

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:

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

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:

sudo cryptsetup luksRemoveKey /dev/sdb1

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:

<mapping_name>  <source_device>  <key_file>  <options>

Masalan, passphrase bilan (boot paytida 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 topish:

sudo blkid /dev/sdb1

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)

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

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)

/dev/sdb, /dev/sdc  →  PV → VG → LV1, LV2  →  each encrypted separately with LUKS
  • 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:

# one-off at open time:
sudo cryptsetup open --allow-discards /dev/sdb1 crypt_data

Uni doimiy qilish uchun /etc/crypttab dagi qurilma parametrlariga discard ni qo'shing:

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

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):

sudo lvcreate -n lv_secure -L 5G vg_data

2. LV’ni LUKS bilan formatlang:

sudo cryptsetup luksFormat /dev/vg_data/lv_secure

3. Uni oching va fayl tizimi yarating:

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

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:

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

6. Tekshiring — VM’ni qayta yuklang va avtomatik ochilish sodir bo'lganini tasdiqlang:

lsblk
df -hT | grep crypt_secure

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:

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

Mashqlar

  1. O'chirib tashlasa bo'ladigan VM’da bo'sh bo'limni LUKS bilan formatlang va uni passphrase yordamida oching/yoping.
  2. Xuddi shu qurilmaga ikkinchi passphrase va keyfile qo'shing (luksAddKey), so'ng uni har biri bilan alohida ochib ko'ring.
  3. Keyfile bilan crypttab orqali avtomatik ochishni sozlang va VM qayta yuklangandan keyin buni tasdiqlang.
  4. luksHeaderBackup bilan sarlavhaning zaxira nusxasini oling va luksDump bilan 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.

Manbalar