لپ‌تاپ کتابخانه گم شده است. رمز ورود لینوکس جلوی خواندن دیسک جداشده را نمی‌گیرد. امشب روی یک فایل خالی، دیسک رمز‌شده می‌سازیم تا بدون قربانی کردن دیسک واقعی، کار LUKS را ببینیم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۳ در ۴۰ شب است.

محیط تمرین: Ubuntu 24.04؛ cryptsetup، util-linux و e2fsprogs؛ sudo؛ یک فایل جدید ۱۲۸ مگابایتی.

جایگاه در دوره: هدف‌های 331.3 آزمون 303-300.

لایه‌ای زیر فایل‌سیستم#

dm-crypt لایهٔ رمزنگاری block device در کرنل است؛ LUKS قالب مدیریت metadata و کلیدهای آن است. گذرواژه مستقیماً برای رمزکردن هر فایل استفاده نمی‌شود؛ keyslot راهی برای باز کردن کلید داده فراهم می‌کند. به همین دلیل تغییر گذرواژه الزاماً بازنویسی تمام دیسک نیست.

این درس LUKS1 را که در هدف آزمون آمده اجرا می‌کند و LUKS2 را مقایسه می‌کند. LUKS2 امکانات metadata و مدیریت جدیدتری دارد و می‌تواند از Argon2 برای مشتق‌سازی کلید استفاده کند؛ انتخاب واقعی باید با bootloader، ابزارهای بازیابی و سیاست سیستم سازگار باشد.

فقط یک تصویر خالی#

luksFormat و mkfs محتوا را از بین می‌برند. در این تمرین مقصد، loop device متصل به فایل تازه است؛ هیچ /dev/sda یا دیسک موجودی را جایگزین نکن.

umask 077
mkdir -p ~/lpic303/storage
cd ~/lpic303/storage
test ! -e vault.img
truncate -s 128M vault.img
loopdev=$(sudo losetup --find --show "$PWD/vault.img")
printf '%s\n' "$loopdev" > loop-device.txt
sudo losetup "$loopdev"

قبل از ادامه، خروجی losetup باید دقیقاً به همین vault.img اشاره کند. فرمان test باید موفق باشد؛ اگر فایل وجود دارد، ادامه نده و پوشهٔ تمرین تازه بساز. فرمان‌ها را یک‌جا paste نکن.

sudo cryptsetup luksFormat --type luks1 "$loopdev"
sudo cryptsetup open "$loopdev" labvault
sudo cryptsetup status labvault
sudo mkfs.ext4 /dev/mapper/labvault
sudo mkdir -p /mnt/lpic303-vault
sudo mount /dev/mapper/labvault /mnt/lpic303-vault
printf 'private catalog\n' | sudo tee /mnt/lpic303-vault/catalog.txt >/dev/null
sudo cat /mnt/lpic303-vault/catalog.txt

در luksFormat هشدار مقصد را بخوان و گذرواژهٔ مخصوص آزمایشگاه بساز. device mapper بعد از open نمای رمزگشایی‌شده را ارائه می‌دهد؛ فایل‌سیستم را روی همین نما می‌سازیم، نه روی loop خام.

قفل کردن واقعی#

sudo umount /mnt/lpic303-vault
sudo cryptsetup close labvault
sudo cryptsetup luksDump "$loopdev"

انتظار داریم mapper حذف شود، ولی header و اطلاعات keyslot قابل مشاهده باشند. رمزنگاری metadata قابل مشاهدهٔ LUKS را پنهان نمی‌کند. دوباره open و mount کن و فایل را بخوان؛ گذرواژهٔ غلط باید باز کردن را رد کند.

برای پایان، ابتدا unmount، سپس close و در نهایت sudo losetup -d "$loopdev" را اجرا کن. اگر unmount می‌گوید busy، با sudo lsof +D /mnt/lpic303-vault فرآیند استفاده‌کننده را پیدا کن؛ کشتن تمام کاربران راه مناسبی نیست.

پرسش کلیدی#

چرا root روی سیستم روشن و volume باز می‌تواند فایل را بخواند؟ چون رمزنگاری در حالت سکون، جای کنترل دسترسی در سیستم روشن نیست. تمرین تکمیلی: تصویر خالی جداگانه‌ای با --type luks2 بساز و header و KDF را مقایسه کن؛ تصویر درس را دوباره format نکن.

راهنمای سازوکار و بازیابی: FAQ رسمی cryptsetup و رمزنگاری ذخیره‌سازی در مستندات کرنل .