| CRYPTTAB(5) | crypttab | CRYPTTAB(5) |
نام (NAME)
crypttab - جدول پیکربندی دستگاههای رمزنگاریشده بلاک
خلاصه دستور (SYNOPSIS)
/etc/crypttab
توضیحات (DESCRIPTION)
پرونده /etc/crypttab دستگاههای بلاک رمزنگاریشدهای را توصیف میکند که در طول بوت سیستم راهاندازی میشوند.
خطوط خالی و خطوطی که با نویسه "#" شروع میشوند نادیده گرفته میشوند. هر یک از خطوط باقیمانده یک دستگاه بلاک رمزنگاریشده را توصیف میکند. فیلدها با فاصله خالی (whitespace) از یکدیگر جدا میشوند.
هر خط به شکل زیر است:
volume-name encrypted-device key-file options
دو فیلد اول اجباری و دو فیلد باقیمانده اختیاری هستند.
راهاندازی دستگاههای بلاک رمزنگاریشده با استفاده از این فایل، از چهار حالت رمزنگاری پشتیبانی میکند: LUKS، TrueCrypt، BitLocker و plain. برای اطلاعات بیشتر در مورد هر حالت، cryptsetup(8) را ببینید. هنگامی که هیچ حالتی در فیلد گزینهها مشخص نشده باشد و دستگاه بلاک حاوی یک امضای LUKS باشد، به عنوان یک دستگاه LUKS باز میشود؛ در غیر این صورت، فرض میشود که در قالب خام dm-crypt (حالت plain) است.
چهار فیلد /etc/crypttab به شرح زیر تعریف میشوند:
اگر مسیر فایل کلید مشخصشده به یک سوکت استریم AF_UNIX در سیستمفایل اشاره کند، کلید با اتصال به سوکت و خواندن آن از اتصال دریافت میشود. این امکان پیادهسازی سرویسی را فراهم میکند که اطلاعات کلید را به صورت پویا و در لحظهای که مورد نیاز است ارائه دهد. برای جزئیات به بخش زیر مراجعه کنید.
دریافت کلید (KEY ACQUISITION)
شش سازوکار مختلف برای دریافت کلید رمزگشایی یا عبارت عبور بازگشایی حجم رمزنگاریشده پشتیبانی میشود. به طور مشخص:
برای پنج سازوکار اخیر، منبع دادههای کلیدی مورد استفاده برای بازگشایی حجم عمدتاً در فیلد سوم هر خط از /etc/crypttab پیکربندی میشود، اما همچنین میتواند در /etc/cryptsetup-keys.d/ و /run/cryptsetup-keys.d/ (به بالا مراجعه کنید) یا در هدر توکن JSON مربوط به LUKS2 (در مورد سه سازوکار آخر) پیکربندی شود. از ابزار systemd-cryptenroll(1) برای ثبت دستگاههای PKCS#11، FIDO2 و TPM2 در حجمهای LUKS2 استفاده کنید.
گزینههای پشتیبانیشده (SUPPORTED OPTIONS)
گزینههای زیر را میتوان در فیلد چهارم هر خط استفاده کرد:
cipher=
اضافهشده در نسخه 186.
discard
اضافهشده در نسخه 207.
hash=
اضافهشده در نسخه 186.
header=
به صورت اختیاری، مسیر ممکن است با ":" و یک مشخصه دستگاه به سبک /etc/fstab دنبال شود (مثلاً شروعشده با "UUID=" یا موارد مشابه)؛ که در این صورت، مسیر نسبت به ریشه سیستمفایل دستگاه در نظر گرفته میشود. دستگاه فقط برای مدتزمان فعالسازی دستگاه LUKS به طور خودکار سوار (mount) میشود.
اضافهشده در نسخه 219.
keyfile-offset=
اضافهشده در نسخه 187.
keyfile-size=
اضافهشده در نسخه 188.
keyfile-erase
توجه داشته باشید که این گزینه فقط برای یک فایل کلید که صراحتاً در فیلد سوم پیکربندی شده است اعمال میشود، و هیچ تأثیری بر فایلهای کلیدی که به طور خودکار در /etc/cryptsetup-keys.d/ و /run/cryptsetup-keys.d/ کشف میشوند ندارد. موارد اخیر به عنوان منابع مشترک در نظر گرفته میشوند که متعلق به یک حجم منفرد نیستند و بنابراین هرگز پاک نمیشوند. برای پاک کردن یک فایل کلید کشفشده به صورت خودکار، مسیر آن را صراحتاً در فیلد سوم پیکربندی کنید.
اضافهشده در نسخه 246.
key-slot=
اضافهشده در نسخه 209.
keyfile-timeout=
اضافهشده در نسخه 243.
link-volume-key=
بخش دستهکلید کرنل میتواند یک رشته توضیحات یا یک دستهکلید کرنل از پیش تعریفشده باشد که با "@" پیشوند شده است (مثلاً برای استفاده مستقیم از دستهکلید نشست "@s" یا دستهکلید کاربر "@u"). متن پیشوند نوع در توضیحات دستهکلید کرنل الزامی نیست. دستهکلید کرنل مشخصشده باید از قبل در زمان فعالسازی دستگاه وجود داشته باشد.
بخش کلید یک رشته توضیحات است که به صورت اختیاری با یک "%key_type:" پیشوند شده است. اگر هیچ نوعی مشخص نشود، کلید با نوع "user" به صورت پیشفرض پیوند داده میشود. برای اطلاعات بیشتر درباره توضیحات کلید (بخش شناساگرهای کلید - KEY IDENTIFIERS) به keyctl(1) مراجعه کنید.
توجه داشته باشید که کلید حجم پیوندیافته هنگام جدا شدن دستگاه به طور خودکار پاکسازی نمیشود.
اضافهشده در نسخه 256.
luks
اضافهشده در نسخه 186.
bitlk
اضافهشده در نسخه 246.
_netdev
نکته: اگر این دستگاه برای یک نقطه اتصال (mount point) که در fstab(5) مشخص شده استفاده میشود، گزینه _netdev باید برای آن نقطه اتصال نیز استفاده شود. در غیر این صورت، ممکن است یک حلقه وابستگی ایجاد شود که در آن نقطه اتصال توسط local-fs.target فراخوانی میشود، در حالی که سرویس پیکربندی شبکه معمولاً تنها پس از سوار شدن سیستمفایل محلی راهاندازی میشود.
اضافهشده در نسخه 235.
noauto
اضافهشده در نسخه 186.
nofail
اضافهشده در نسخه 186.
offset=
اضافهشده در نسخه 220.
plain
اضافهشده در نسخه 186.
read-only, readonly
اضافهشده در نسخه 186.
same-cpu-crypt
این به هسته لینوکس نسخه 4.0 یا جدیدتر نیاز دارد.
اضافهشده در نسخه 242.
submit-from-crypt-cpus
این به هسته لینوکس نسخه 4.0 یا جدیدتر نیاز دارد.
اضافهشده در نسخه 242.
no-read-workqueue
این به هسته لینوکس نسخه 5.9 یا جدیدتر نیاز دارد.
اضافهشده در نسخه 248.
no-write-workqueue
این به هسته لینوکس نسخه 5.9 یا جدیدتر نیاز دارد.
اضافهشده در نسخه 248.
skip=
این گزینه فقط برای دستگاههای plain کاربرد دارد.
اضافهشده در نسخه 220.
size=
اضافهشده در نسخه 186.
sector-size=
اضافهشده در نسخه 240.
swap
هشدار
استفاده از گزینه swap محتویات پارتیشن نامبردهشده را در طول هر بوت از بین خواهد برد، بنابراین اطمینان حاصل کنید که دستگاه بلاک زیرین به درستی مشخص شده است.
tcrypt
هنگامی که از این حالت استفاده میشود، عبارت عبور از فایل کلید ارائهشده در فیلد سوم خوانده میشود. فقط خط اول این فایل، بدون در نظر گرفتن نویسه خط جدید، خوانده میشود.
توجه داشته باشید که قالب TrueCrypt هم از عبارت عبور و هم از فایلهای کلید برای اشتقاق یک گذرواژه برای حجم استفاده میکند. بنابراین، عبارت عبور و تمام فایلهای کلید باید ارائه شوند. برای ارائه مسیر مطلق به تمام فایلهای کلید از tcrypt-keyfile= استفاده کنید. هنگام استفاده از یک عبارت عبور خالی در ترکیب با یک یا چند فایل کلید، از "/dev/null" به عنوان فایل گذرواژه در فیلد سوم استفاده کنید.
اضافهشده در نسخه 206.
tcrypt-hidden
این گزینه حجم مخفی را که درون حجم ارائهشده در فیلد دوم قرار دارد نگاشت میکند. لطفاً توجه داشته باشید که اگر به جای آن حجم بیرونی سوار شود، هیچ محافظتی برای حجم مخفی وجود ندارد. برای اطلاعات بیشتر در مورد این محدودیت، cryptsetup(8) را ببینید.
اضافهشده در نسخه 206.
tcrypt-keyfile=
برای آگاهی از رفتار عبارت عبور و فایلهای کلید هنگام استفاده از حالت رمزنگاری TrueCrypt، مدخل مربوط به tcrypt را ببینید.
اضافهشده در نسخه 206.
tcrypt-system
اضافهشده در نسخه 206.
tcrypt-veracrypt
اضافهشده در نسخه 232.
veracrypt-pim=
توجه داشته باشید که VeraCrypt بسته به قدرت گذرواژه و الگوریتم درهمسازی (هش) استفادهشده برای اشتقاق کلید، حداقل مقدار مجاز PIM را اعمال میکند، با این حال veracrypt-pim= در برابر این محدودهها بررسی نمیشود. برای اطلاعات بیشتر به مستندات Veracrypt Personal Iterations Multiplier[1] مراجعه کنید.
افزودهشده در نسخه 254.
timeout=
افزودهشده در نسخه 186.
tmp=
هشدار
استفاده از گزینه tmp محتویات پارتیشن نامبرده را در هر بار بوت نابود خواهد کرد، بنابراین اطمینان حاصل کنید که دستگاه بلوکی زیرین به درستی مشخص شده است.
tries=
افزودهشده در نسخه 186.
headless=
افزودهشده در نسخه 249.
verify
افزودهشده در نسخه 186.
password-echo=yes|no|masked
اگر فعال باشد، نویسههای تایپشده دقیقاً همانطور که هستند نمایش داده میشوند. اگر غیرفعال باشد، نویسههای تایپشده به هیچ شکلی نمایش داده نمیشوند و کاربر هیچ بازخوردی در ورودی خود دریافت نمیکند. اگر روی "masked" تنظیم شود، به ازای هر نویسه تایپشده یک ستاره ("*") نمایش داده میشود. صرفنظر از اینکه کدام حالت انتخاب شده باشد، اگر کاربر در هر زمان کلید تب ("↹") را بزند، یا قبل از وارد کردن هر داده دیگری کلید backspace ("⌫") را بفشارد، نمایش بازخورد (echo) خاموش میشود.
افزودهشده در نسخه 249.
password-cache=yes|no|read-only
اگر روی "read-only" تنظیم شود، جاکلیدی (keyring) هسته قبل از درخواست تعاملی برای یافتن یک گذرواژه/PIN بررسی میشود. اگر روی "yes" تنظیم شود، علاوه بر بررسی جاکلیدی، هر گذرواژه/PIN که به صورت تعاملی وارد شده است در جاکلیدی با مهلت زمانی 2.5 دقیقه قبل از پاکسازی ذخیره میشود.
توجه داشته باشید که این گزینه برای توکنهای امنیتی PKCS#11 مجاز نیست. دلیل آن این است که توکنهای امنیتی PKCS#11 معمولاً طوری پیکربندی میشوند که پس از چندین بار وارد کردن PIN نامعتبر قفل شوند، بنابراین استفاده از حافظه نهان ممکن است ناخواسته توکن را قفل کند.
افزودهشده در نسخه 257.
pkcs11-uri=
اگر به صورت "auto" مشخص شود، حجم باید از نوع LUKS2 باشد و متادیتای توکن امنیتی PKCS#11 را در بخش توکن JSON مربوط به LUKS2 خود داشته باشد. در این حالت، شناسه URI و کلید رمزگذاریشده به طور خودکار از هدر توکن JSON مربوط به LUKS2 خوانده میشوند. از systemd-cryptenroll(1) به عنوان ابزاری ساده برای ثبت توکنهای امنیتی یا کارتهای هوشمند PKCS#11 به روشی سازگار با "auto" استفاده کنید. در این حالت، ستون سوم خط باید خالی بماند (یعنی به صورت "-" مشخص شود).
شناسه URI مشخصشده میتواند مستقیماً به یک کلید خصوصی ذخیرهشده روی یک توکن یا متناوباً فقط به یک اسلات یا توکن اشاره کند، که در این صورت جستجویی برای یافتن یک کلید خصوصی مناسب انجام خواهد شد. در این حالت، اگر چندین شیء مناسب یافت شود، توکن رد میشود. فایل کلید پیکربندیشده در ستون سوم خط به همان صورتی که هست (یعنی در فرمت باینری، پردازشنشده) استفاده میشود. کلید رمزگشاییشده حاصل (برای RSA) یا راز مشترک مشتقشده (برای ECC) قبل از اینکه برای بازگشایی قفل حجم LUKS استفاده شود، کدگذاری Base64 میشود.
از systemd-cryptenroll --pkcs11-token-uri=list برای فهرست کردن تمام توکنهای امنیتی PKCS#11 مناسب که در حال حاضر متصل هستند، همراه با شناسههای URI آنها استفاده کنید.
توجه داشته باشید که بسیاری از توکنهای امنیتی جدیدتر که ممکن است به عنوان توکن امنیتی PKCS#11 استفاده شوند، معمولاً استاندارد جدیدتر و سادهتر FIDO2 را نیز پیادهسازی میکنند. استفاده از fido2-device= (توضیح داده شده در زیر) را برای ثبت آن از طریق FIDO2 در نظر بگیرید. توجه داشته باشید که یک توکن امنیتی ثبتشده از طریق PKCS#11 نمیتواند برای بازگشایی قفل حجم از طریق FIDO2 استفاده شود، مگر اینکه از طریق FIDO2 نیز ثبت شده باشد، و برعکس.
افزودهشده در نسخه 245.
fido2-device=
اگر به صورت "auto" مشخص شود، دستگاه توکن FIDO2 هنگام اتصال به طور خودکار کشف میشود.
بازگشایی قفل حجم با FIDO2 برای عملکرد خود نیاز دارد که یک هش شناسه کلاینت (CID) از طریق fido2-cid= (زیر را ببینید) پیکربندی شود و کلیدی به قابلیت HMAC توکن امنیتی ارسال شود (پیکربندیشده در ستون سوم خط). اگر پیکربندی نشود و حجم از نوع LUKS2 باشد، در عوض CID و کلید از متادیتای توکن JSON مربوط به LUKS2 خوانده میشوند. از systemd-cryptenroll(1) به عنوان ابزاری ساده برای ثبت توکنهای امنیتی FIDO2 برای حجمهای LUKS2 استفاده کنید.
از systemd-cryptenroll --fido2-device=list برای فهرست کردن تمام توکنهای امنیتی FIDO2 مناسب که در حال حاضر متصل هستند، همراه با گرههای دستگاهی آنها استفاده کنید.
این گزینه سازوکار زیر را پیادهسازی میکند: کلید پیکربندیشده از طریق تابع درهمسازی کلیددار HMAC که دستگاه FIDO2 پیادهسازی میکند، و با یک کلید مخفی تعبیهشده در دستگاه کلیدگذاری شده است، هش میشود. مقدار هش حاصل با Base64 کدگذاری شده و برای بازگشایی قفل حجم LUKS2 استفاده میشود. از آنجایی که استخراج کلید مخفی از توکن سختافزاری نباید امکانپذیر باشد، با در دست داشتن کلید پیکربندیشده — بدون در دست داشتن توکن سختافزاری — بازیابی کلید هششده نباید ممکن باشد.
توجه داشته باشید که بسیاری از توکنهای امنیتی که FIDO2 را پیادهسازی میکنند، PKCS#11 را نیز پیادهسازی میکنند که برای بازگشایی قفل حجمها از طریق گزینه pkcs11-uri= که در بالا توضیح داده شد مناسب است. معمولاً استاندارد جدیدتر و سادهتر FIDO2 ترجیح داده میشود.
افزودهشده در نسخه 248.
fido2-cid=
افزودهشده در نسخه 248.
fido2-rp=
افزودهشده در نسخه 248.
fido2-pin=
افزودهشده در نسخه 257.
fido2-up=
افزودهشده در نسخه 257.
fido2-uv=
افزودهشده در نسخه 257.
tpm2-device=
از tpm2-pcrs= (زیر را ببینید) برای پیکربندی مجموعهای از PCRهای TPM2 جهت متصل کردن بازگشایی قفل حجم به آنها استفاده کنید. از systemd-cryptenroll(1) به عنوان ابزاری ساده برای ثبت تراشههای امنیتی TPM2 در حجمهای LUKS2 استفاده کنید.
اگر به صورت "auto" مشخص شود، دستگاه TPM2 به طور خودکار کشف میشود. از systemd-cryptenroll --tpm2-device=list برای فهرست کردن تمام دستگاههای TPM2 مناسب در دسترس، همراه با گرههای دستگاهی آنها استفاده کنید.
این گزینه سازوکار زیر را پیادهسازی میکند: هنگام ثبت یک دستگاه TPM2 از طریق systemd-cryptenroll روی یک حجم LUKS2، یک کلید تصادفی برای بازگشایی قفل حجم روی میزبان ایجاد شده و در تراشه TPM2 بارگذاری میشود، جایی که با یک جفتکلید نامتقارن "اصلی" مشتقشده از کلید "seed" داخلی TPM2 رمزگذاری میشود. نه کلید seed و نه کلید اصلی هرگز اجازه خروج از تراشه TPM2 را ندارند — با این حال، کلید تصادفی که اکنون رمزگذاری شده است، میتواند خارج شود. این کلید در هدر توکن JSON مربوط به حجم LUKS2 ذخیره میشود. هنگام بازگشایی قفل حجم رمزگذاریشده، جفتکلید اصلی دوباره روی تراشه TPM2 تولید میشود (که تا زمانی که کلید seed تراشه به درستی توسط تراشه TPM2 نگهداری شود کار میکند)، و سپس برای رمزگشایی (روی تراشه TPM2) کلید رمزگذاریشده موجود در هدر توکن JSON مربوط به حجم LUKS2 که در زمان ثبت در آنجا ذخیره شده بود، استفاده میشود. کلید رمزگشاییشده حاصل سپس برای باز کردن قفل حجم استفاده میشود. هنگامی که کلید تصادفی رمزگذاری میشود، مقادیر فعلی PCRهای انتخابشده (زیر را ببینید) در عملیات لحاظ میشوند، به طوری که وضعیتهای متفاوت PCR به کلیدهای رمزگذاریشده متفاوتی منجر میشوند و کلید رمزگشاییشده تنها در صورتی قابل بازیابی است که همان وضعیت PCR دوباره ایجاد شود.
افزودهشده در نسخه 248.
tpm2-pcrs=
افزودهشده در نسخه 248.
tpm2-pin=
افزودهشده در نسخه 251.
tpm2-signature=
افزودهشده در نسخه 252.
tpm2-pcrlock=
افزودهشده در نسخه 255.
tpm2-measure-pcr=
افزودهشده در نسخه 253.
tpm2-measure-bank=
افزودهشده در نسخه 253.
tpm2-measure-keyslot-nvpcr=
افزودهشده در نسخه 259.
token-timeout=
افزودهشده در نسخه 250.
try-empty-password=
افزودهشده در نسخه 246.
x-systemd.device-timeout=
افزودهشده در نسخه 216.
x-initrd.attach
اگرچه علامتگذاری ورودی سوار کردن (mount) سیستم فایل ریشه با x-initrd.mount ضروری نیست، اما x-initrd.attach همچنان برای دستگاه بلوکی رمزگذاریشده حاوی سیستم فایل ریشه توصیه میشود، زیرا در غیر این صورت systemd در حین خاموش شدن عادی سیستم در حالی که هنوز در حال استفاده است، تلاش خواهد کرد دستگاه را جدا کند. با این گزینه، دستگاه همچنان جدا میشود اما بعداً پس از پیاده شدن (unmount) سیستم فایل ریشه صورت میگیرد.
تمامی دستگاههای بلوکی رمزگذاریشده دیگر که حاوی سیستم فایلهای سوارشده در initrd هستند، باید از این گزینه استفاده کنند.
افزودهشده در نسخه 245.
fixate-volume-key=
در موارد خاص، مثلاً برای حجمهای LUKS که کلید در TPM2 مهر و موم (seal) شده است، ممکن است برای ارائه این تضمین که حجم در حال اتصال همان حجمی است که قبلاً ایجاد شده بود، لازم باشد. fixate-volume-key= میتواند برای تنظیم هش مورد انتظار کلید حجم و رد اتصال حجم در صورت داشتن هش متفاوت استفاده شود. هش مورد انتظار با خلاصهای مطابقت دارد که هنگام استفاده از tpm2-measure-pcr= در بانک sha256 PCR تراشه TPM2 اندازهگیری میشود.
برای حجمهای LUKS تازه ایجادشده، هش مورد انتظار میتواند توسط systemd-repart(8) تولید شود. برای جزئیات بیشتر، توضیحات EncryptedVolume= را در repart.d(5) ببینید.
افزودهشده در نسخه 260.
در اوایل بوت و هنگامی که پیکربندی مدیر سیستم دوباره بارگذاری میشود، این فایل توسط systemd-cryptsetup-generator(8) به واحدهای بومی systemd ترجمه میشود.
فایلهای کلید AF_UNIX (AF_UNIX KEY FILES)
اگر مسیر فایل کلید (همانطور که در ستون سوم ورودیهای /etc/crypttab مشخص شده است، بالا را ببینید) به یک سوکت جریانی AF_UNIX در سیستم فایل اشاره کند، کلید با اتصال به سوکت و خواندن کلید از این اتصال به دست میآید. این اتصال از یک نام سوکت AF_UNIX در فضای نام انتزاعی (abstract namespace) برقرار میشود؛ برای جزئیات به unix(7) مراجعه کنید. نام سوکت مبدأ بر اساس فرمت زیر انتخاب میشود:
NUL RANDOM /cryptsetup/ VOLUME
به عبارت دیگر: یک بایت NUL (همانطور که برای سوکتهای فضای نام انتزاعی لازم است)، به دنبال آن یک رشته تصادفی (تنها متشکل از نویسههای الفبایی-عددی)، به دنبال آن رشته دقیق "/cryptsetup/" و سپس نام حجمی که کلید برای آن دریافت میشود. به عنوان مثال، برای حجم "myvol":
\0d7067f78d9827418/cryptsetup/myvol
سرویسهایی که به سوکت جریانی AF_UNIX گوش میدهند میتوانند نام سوکت مبدأ را با getpeername(2) استعلام کنند و از این برای تعیین اینکه کدام کلید باید ارسال شود استفاده نمایند، که به یک سوکت شنونده واحد اجازه میدهد کلیدهای چندین حجم را ارائه دهد. اگر منطق PKCS#11 استفاده شود (بالا را ببینید)، نام مبدأ سوکت به روشی مشابه انتخاب میشود، با این تفاوت که رشته دقیق "/cryptsetup-pkcs11/" استفاده میشود. و به طور مشابه برای FIDO2 (رشته "/cryptsetup-fido2-salt/") و TPM2 (رشته "/cryptsetup-tpm2/"). یک جزء مسیر متفاوت استفاده میشود تا سرویسهای ارائهدهنده دادههای کلید بدانند که کلید محرمانه مستقیماً درخواست نشده است، بلکه یک کلید رمزگذاریشده درخواست شده که از طریق منطق PKCS#11/FIDO2/TPM2 برای دستیابی به کلید محرمانه نهایی رمزگشایی خواهد شد.
مثالها (EXAMPLES)
مثال 1. نمونه /etc/crypttab
راهاندازی چهار دستگاه بلوکی رمزگذاریشده. یکی با استفاده از LUKS برای ذخیرهسازی معمولی، دیگری برای استفاده به عنوان یک دستگاه swap و دو حجم TrueCrypt. برای دستگاه چهارم، رشته گزینهها به صورت دو گزینه "cipher=xchacha12,aes-adiantum-plain64" و "keyfile-timeout=10s" تفسیر میشود.
luks UUID=2505567a-9e27-4efe-a4d5-15ad146c258b swap /dev/sda7 /dev/urandom swap truecrypt /dev/sda2 /etc/container_password tcrypt hidden /mnt/tc_hidden /dev/null tcrypt-hidden,tcrypt-keyfile=/etc/keyfile external /dev/sda3 keyfile:LABEL=keydev keyfile-timeout=10s,cipher=xchacha12\,aes-adiantum-plain64
مثال 2. نمونه بازگشایی قفل حجم با PKCS#11 مبتنی بر Yubikey
منطق PKCS#11 امکان اتصال هر توکن امنیتی سازگار را که قادر به ذخیره کلیدهای رمزنگاری RSA یا EC باشد، برای باز کردن قفل یک حجم رمزگذاریشده فراهم میکند. در اینجا نمونهای از نحوه راهاندازی یک توکن امنیتی Yubikey برای این منظور روی یک حجم LUKS2 با استفاده از ykmap(1) از پروژه yubikey-manager برای راهاندازی اولیه توکن و systemd-cryptenroll(1) برای افزودن آن به حجم LUKS2 آورده شده است:
# SPDX-License-Identifier: MIT-0 # Destroy any old key on the Yubikey (careful!) ykman piv reset # Generate a new private/public key pair on the device, store the public key in # 'pubkey.pem'. ykman piv generate-key -a RSA2048 9d pubkey.pem # Create a self-signed certificate from this public key, and store it on the # device. The "subject" should be an arbitrary user-chosen string to identify # the token with. ykman piv generate-certificate --subject "Knobelei" 9d pubkey.pem # We do not need the public key anymore, let's remove it. Since it is not # security sensitive we just do a regular "rm" here. rm pubkey.pem # Enroll the freshly initialized security token in the LUKS2 volume. Replace # /dev/sdXn by the partition to use (e.g. /dev/sda1). sudo systemd-cryptenroll --pkcs11-token-uri=auto /dev/sdXn # Test: Let's run systemd-cryptsetup to test if this all worked. sudo systemd-cryptsetup attach mytest /dev/sdXn none pkcs11-uri=auto # If that worked, let's now add the same line persistently to /etc/crypttab, # for the future. We do not want to use the (unstable) /dev/sdX name, so let's # figure out a stable link: udevadm info -q symlink -r /dev/sdXn # Now add the line using the by-uuid symlink to /etc/crypttab: sudo bash -c 'echo "mytest /dev/disk/by-uuid/... none pkcs11-uri=auto" >>/etc/crypttab' # Depending on your distribution and encryption setup, you may need to manually # regenerate your initramfs to be able to use a Yubikey / PKCS#11 token to # unlock the partition during early boot. # More information at https://unix.stackexchange.com/a/705809 # On Fedora based systems: sudo dracut --force # On Debian based systems: sudo update-initramfs -u
چند نکته در مورد موارد بالا:
مثال 3. نمونه بازگشایی قفل حجم با FIDO2
منطق FIDO2 امکان استفاده از هر توکن امنیتی سازگار با FIDO2 را که افزونه "hmac-secret" را پیادهسازی میکند، برای بازگشایی قفل یک حجم رمزگذاریشده فراهم میسازد. در اینجا نمونهای از نحوه راهاندازی یک توکن امنیتی FIDO2 برای این منظور در یک حجم LUKS2 با استفاده از systemd-cryptenroll(1) آورده شده است:
# SPDX-License-Identifier: MIT-0 # Enroll the security token in the LUKS2 volume. Replace /dev/sdXn by the # partition to use (e.g. /dev/sda1). sudo systemd-cryptenroll --fido2-device=auto /dev/sdXn # Test: Let's run systemd-cryptsetup to test if this worked. sudo systemd-cryptsetup attach mytest /dev/sdXn none fido2-device=auto # If that worked, let's now add the same line persistently to /etc/crypttab, # for the future. We do not want to use the (unstable) /dev/sdX name, so let's # figure out a stable link: udevadm info -q symlink -r /dev/sdXn # Now add the line using the by-uuid symlink to /etc/crypttab: sudo bash -c 'echo "mytest /dev/disk/by-uuid/... none fido2-device=auto" >>/etc/crypttab' # Depending on your distribution and encryption setup, you may need to manually # regenerate your initramfs to be able to use a FIDO2 device to unlock the # partition during early boot. # More information at https://unix.stackexchange.com/a/705809 # On Fedora based systems: sudo dracut --force # On Debian based systems: sudo update-initramfs -u
مثال 4. نمونه بازگشایی قفل حجم با TPM2
منطق TPM2 اجازه میدهد از هر تراشه TPM2 که توسط هسته لینوکس پشتیبانی میشود برای باز کردن قفل یک حجم رمزگذاریشده استفاده کنید. در اینجا نمونهای از نحوه راهاندازی یک تراشه TPM2 برای این منظور در یک حجم LUKS2 با استفاده از systemd-cryptenroll(1) آورده شده است:
# SPDX-License-Identifier: MIT-0 # Enroll the TPM2 security chip in the LUKS2 volume, and bind it to PCR 7 # only. Replace /dev/sdXn by the partition to use (e.g. /dev/sda1). sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/sdXn # Test: Let's run systemd-cryptsetup to test if this worked. sudo systemd-cryptsetup attach mytest /dev/sdXn none tpm2-device=auto # If that worked, let's now add the same line persistently to /etc/crypttab, # for the future. We do not want to use the (unstable) /dev/sdX name, so let's # figure out a stable link: udevadm info -q symlink -r /dev/sdXn # Now add the line using the by-uuid symlink to /etc/crypttab: sudo bash -c 'echo "mytest /dev/disk/by-uuid/... none tpm2-device=auto" >>/etc/crypttab' # And now let's check that automatic unlocking works: sudo systemd-cryptsetup detach mytest sudo systemctl daemon-reload sudo systemctl start cryptsetup.target systemctl is-active systemd-cryptsetup@mytest.service # Once we have the device which will be unlocked automatically, we can use it. # Usually we would create a file system and add it to /etc/fstab: sudo mkfs.ext4 /dev/mapper/mytest # This prints a 'Filesystem UUID', which we can use as a stable name: sudo bash -c 'echo "/dev/disk/by-uuid/... /var/mytest ext4 defaults,x-systemd.mkdir 0 2" >>/etc/fstab' # And now let's check that the mounting works: sudo systemctl daemon-reload sudo systemctl start /var/mytest systemctl status /var/mytest # Depending on your distribution and encryption setup, you may need to manually # regenerate your initramfs to be able to use a TPM2 security chip to unlock # the partition during early boot. # More information at https://unix.stackexchange.com/a/705809 # On Fedora based systems: sudo dracut --force # On Debian based systems: sudo update-initramfs -u
همچنین ببینید (SEE ALSO)
systemd(1), systemd-cryptsetup@.service(8), systemd-cryptsetup-generator(8), systemd-cryptenroll(1), systemd-repart(8), repart.d(5), fstab(5), cryptsetup(8), mkswap(8), mke2fs(8)
یادداشتها (NOTES)
- 1.
- Veracrypt Personal Iterations Multiplier
- 2.
- RFC7512 PKCS#11 URI
- 3.
- Yubico PIV certificate slots
| systemd 261.2 |