'\" t .TH "SYSTEMD\-MEASURE" "1" "" "systemd 261.2" "systemd-measure" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" systemd-measure \- محاسبه پیش‌دستانه و امضای مقادیر مورد انتظار TPM2 PCR 11 برای ایمیج‌های هسته یکپارچه بوت‌شده .SH "خلاصه دستور (SYNOPSIS)" .HP \w'\fB/usr/lib/systemd/systemd\-measure\fR\ 'u \fB/usr/lib/systemd/systemd\-measure\fR [OPTIONS...] .SH "توضیحات (DESCRIPTION)" .PP نکته: این دستور در حال حاضر آزمایشی است\&. اگرچه احتمالاً به یکی از اجزای همیشگی systemd تبدیل خواهد شد، ممکن است رفتار و رابط کاربری آن همچنان دستخوش تغییر شود\&. .PP \fBsystemd\-measure\fR ابزاری است که می‌تواند برای محاسبه پیش‌دستانه و امضای مقادیر مورد انتظار TPM2 PCR 11 استفاده شود؛ مقادیری که باید هنگام بوت شدن یک \m[blue]\fBایمیج هسته یکپارچه (UKI) مبتنی بر UAPI\&.5\fR\m[]\&\s-2\u[1]\d\s+2 بر پایه \fBsystemd-stub\fR(7) مشاهده شوند\&. این ابزار مسیرهای فایل ایمیج هسته ELF، فایل ایمیج initrd، فایل devicetree، فایل خط فرمان هسته، فایل \fBos-release\fR(5)، فایل تصویر زمینه بوت (boot splash) و فایل کلید عمومی PEM مربوط به TPM2 PCR را که ایمیج هسته یکپارچه را تشکیل می‌دهند می‌پذیرد، و مقادیر PCR مورد انتظار پس از بوت شدن ایمیج را تعیین می‌کند\&. محاسبه با یک PCR 11 مقداردهی‌شده با صفر آغاز می‌شود و به شیوه‌ای سازگار با عملکرد systemd\-stub در هنگام بوت اجرا می‌گردد\&. نتیجه را می‌توان به‌صورت اختیاری به‌صورت رمزنگاری‌شده امضا کرد، تا خط‌مشی‌های TPM2 که تنها در صورت بوت شدن مجموعه مشخصی از هسته‌ها قابل بازگشایی هستند (که چنین امضای PCR برای آن‌ها ارائه شده باشد) پیاده‌سازی شوند\&. .PP معمولاً فراخوانی مستقیم این ابزار هنگام ساخت یک UKI چندان منطقی نیست\&. در عوض، باید از \fBukify\fR(1) استفاده شود؛ این ابزار \fBsystemd\-measure\fR را فراخوانی کرده و مسئولیت جاسازی اندازه‌گیری‌های حاصل را در UKI بر عهده می‌گیرد\&. .SH "فرمان‌ها (COMMANDS)" .PP فرمان‌های زیر پشتیبانی می‌شوند: .PP \fBstatus\fR .RS 4 اگر هیچ فرمانی مشخص نشود، این فرمان پیش‌فرض است\&. این فرمان مقادیر TPM2 PCR 11 سیستم محلی را پرس‌وجو کرده و آن‌ها را نمایش می‌دهد\&. داده‌ها با قالبی مشابه فرمان \fBcalculate\fR در زیر نوشته می‌شوند و می‌توان از آن برای مقایسه سریع انتظار با واقعیت استفاده کرد\&. .sp در نسخه ۲۵۲ اضافه شد\&. .RE .PP \fBcalculate\fR .RS 4 محاسبه پیش‌دستانه مقادیر مورد انتظار دیده‌شده در رجیستر PCR 11 پس از بوت شدن یک ایمیج هسته یکپارچه متشکل از اجزای مشخص‌شده با \fB\-\-linux=\fR، \fB\-\-osrel=\fR، \fB\-\-cmdline=\fR، \fB\-\-initrd=\fR، \fB\-\-ucode=\fR، \fB\-\-splash=\fR، \fB\-\-dtb=\fR، \fB\-\-uname=\fR، \fB\-\-sbat=\fR، \fB\-\-pcrpkey=\fR، \fB\-\-profile=\fR، \fB\-\-dtbauto=\fR و \fB\-\-hwids=\fR؛ به زیر مراجعه کنید\&. فقط \fB\-\-linux=\fR اجباری است\&. (به‌عنوان جایگزین، \fB\-\-current\fR را مشخص کنید تا در عوض از مقادیر فعلی رجیستر PCR 11 استفاده شود\&.) .sp در نسخه ۲۵۲ اضافه شد\&. .RE .PP \fBsign\fR .RS 4 همانند فرمان \fBcalculate\fR، مقدار مورد انتظار در رجیستر TPM2 PCR 11 را پس از بوت شدن یک ایمیج هسته یکپارچه به‌صورت پیش‌دستانه محاسبه می‌کند\&. سپس، مقادیر حاصل را با جفت‌کلید خصوصی/عمومی (RSA) پیکربندی‌شده از طریق \fB\-\-private\-key=\fR و \fB\-\-public\-key=\fR به‌صورت رمزنگاری‌شده امضا می‌کند\&. این کار یک شیء JSON را در خروجی استاندارد می‌نویسد که حاوی امضاها برای تمام بانک‌های PCR مشخص‌شده است (گزینه \fB\-\-bank=\fR در زیر را ببینید)، که می‌توان از آن برای بازگشایی اعتبارنامه‌های رمزگذاری‌شده (به \fBsystemd-creds\fR(1) مراجعه کنید) یا حجم‌های LUKS (به \fBsystemd-cryptsetup@.service\fR(8) مراجعه کنید) استفاده کرد\&. این امر امکان مقید کردن اسرار به مجموعه‌ای از هسته‌ها را فراهم می‌کند که برای آن‌ها چنین امضاهای PCR 11 ارائه شود\&. .sp توجه داشته باشید که برای انجام این امضا باید یک دستگاه TPM2 در دسترس باشد، حتی اگر نتیجه به هیچ دستگاه TPM2 یا وضعیت آن وابسته نباشد\&. .sp در نسخه ۲۵۲ اضافه شد\&. .RE .PP \fBpolicy\-digest\fR .RS 4 همانند فرمان \fBsign\fR، مقدار مورد انتظار دیده‌شده در رجیستر TPM2 PCR 11 را پس از بوت شدن یک ایمیج هسته یکپارچه به‌صورت پیش‌دستانه محاسبه می‌کند\&. سپس، خط‌مشی TPM2 حاصل را محاسبه کرده و خلاصه (digest) آن را چاپ می‌کند\&. این کار یک شیء JSON را در خروجی استاندارد می‌نویسد که حاوی خلاصه‌های خط‌مشی برای تمام بانک‌های PCR مشخص‌شده است (گزینه \fB\-\-bank=\fR در زیر را ببینید)، تا بتوان آن را برای مواردی که کلید خصوصی مستقیماً در دسترس نیست به‌صورت آفلاین امضا کرد\&. اگر \fB\-\-public\-key=\fR یا \fB\-\-certificate=\fR مشخص شده باشند، شیء JSON اثر انگشت کلید را نیز شامل خواهد شد\&. .sp در نسخه ۲۵۸ اضافه شد\&. .RE .SH "گزینه‌ها (OPTIONS)" .PP گزینه‌های زیر پشتیبانی می‌شوند: .PP \fB\-\-linux=\fR\fB\fIPATH\fR\fR, \fB\-\-osrel=\fR\fB\fIPATH\fR\fR, \fB\-\-cmdline=\fR\fB\fIPATH\fR\fR, \fB\-\-initrd=\fR\fB\fIPATH\fR\fR, \fB\-\-ucode=\fR\fB\fIPATH\fR\fR, \fB\-\-splash=\fR\fB\fIPATH\fR\fR, \fB\-\-dtb=\fR\fB\fIPATH\fR\fR, \fB\-\-uname=\fR\fB\fIPATH\fR\fR, \fB\-\-sbat=\fR\fB\fIPATH\fR\fR, \fB\-\-pcrpkey=\fR\fB\fIPATH\fR\fR, \fB\-\-profile=\fR\fB\fIPATH\fR\fR, \fB\-\-dtbauto=\fR\fB\fIPATH\fR\fR, \fB\-\-hwids=\fR\fB\fIPATH\fR\fR .RS 4 هنگام استفاده با فعل \fBcalculate\fR یا \fBsign\fR، فایل‌هایی را که اجزای ایمیج هسته یکپارچه از آن‌ها خوانده می‌شوند پیکربندی می‌کند\&. هر گزینه با بخشی با همان نام در فایل PE هسته یکپارچه متناظر است\&. سوییچ \fB\-\-linux=\fR انتظار دارد مسیر فایل هسته ELF را دریافت کند که هسته PE یکپارچه آن را در بر می‌گیرد\&. تمام سوییچ‌ها به جز \fB\-\-linux=\fR اختیاری هستند\&. از هر گزینه حداکثر یک بار می‌توان استفاده کرد\&. .sp در نسخه ۲۵۲ اضافه شد\&. .sp به‌استثنای \fB\-\-profile=\fR، \fB\-\-dtbauto=\fR و \fB\-\-hwids=\fR که در نسخه ۲۵۷ اضافه شده‌اند\&. .RE .PP \fB\-\-current\fR .RS 4 هنگام استفاده با فعل \fBcalculate\fR یا \fBsign\fR، مقادیر PCR 11 فعلیِ معتبر برای سیستم را در نظر می‌گیرد (که معمولاً باید منعکس‌کننده درهم‌سازی‌های هسته بوت‌شده فعلی باشد)\&. این گزینه می‌تواند به‌جای \fB\-\-linux=\fR و سایر سوییچ‌های فهرست‌شده در بالا استفاده شود\&. .sp در نسخه ۲۵۲ اضافه شد\&. .RE .PP \fB\-\-bank=\fR\fB\fIDIGEST\fR\fR .RS 4 کنترل می‌کند که مقادیر PCR برای کدام بانک‌های PCR به‌صورت پیش‌دستانه محاسبه شوند \(en در صورتی که \fBcalculate\fR یا \fBsign\fR فراخوانی شده باشد \(en، یا کدام بانک‌ها در خروجی \fBstatus\fR نمایش داده شوند\&. برای مشخص کردن چندین بانک می‌توان از این گزینه بیش از یک بار استفاده کرد\&. در صورت عدم تعیین، به‌طور پیش‌فرض روی چهار بانک "sha1"، "sha256"، "sha384" و "sha512" قرار دارد\&. .sp توجه داشته باشید که برخی از سیستم‌های عامل پشتیبانی از امضاهای مبتنی بر SHA1 را غیرفعال می‌کنند، که در این صورت این عملیات ناموفق خواهد بود\&. لطفاً برای جزئیات در مورد نحوه نادیده گرفتن خط‌مشی امنیتی سیستم‌عامل در این رابطه، به مستندات سیستم‌عامل خود مراجعه کنید\&. .sp در نسخه ۲۵۲ اضافه شد\&. .RE .PP \fB\-\-private\-key=\fR\fB\fIPATH\fR\fR, \fB\-\-public\-key=\fR\fB\fIPATH\fR\fR, \fB\-\-certificate=\fR\fB\fIPATH\fR\fR .RS 4 این سوییچ‌ها مسیرهایی به یک جفت‌فایل کلید RSA با کدگذاری PEM را برای استفاده با فرمان \fBsign\fR می‌گیرند\&. .sp به تفاوت بین سوییچ‌های \fB\-\-pcrpkey=\fR و \fB\-\-public\-key=\fR توجه کنید\&. سوییچ اول داده‌هایی را انتخاب می‌کند که در بخش PE با نام "\&.pcrpkey" از ایمیج هسته یکپارچه گنجانده شود؛ سوییچ دوم کلید عمومی از جفت‌کلید مورداستفاده برای امضای مقادیر حاصل از PCR 11 را انتخاب می‌کند\&. سوییچ اول کلیدی است که سیستم بوت‌شده احتمالاً برای قفل کردن رمزگذاری دیسک و اعتبارنامه‌ها به آن استفاده خواهد کرد؛ سوییچ دوم کلیدی است که برای بازگشایی مجدد چنین منابعی استفاده می‌شود\&. بنابراین، معمولاً باید کلید PEM یکسانی در هر دو حالت ارائه شود\&. .sp اگر \fB\-\-public\-key=\fR مشخص نشده باشد اما \fB\-\-private\-key=\fR مشخص شده باشد، کلید عمومی به‌طور خودکار از کلید خصوصی استخراج می‌شود\&. .sp از نسخه ۲۵۶، \fB\-\-certificate=\fR می‌تواند برای مشخص کردن یک گواهی X\&.509 به‌عنوان جایگزینی برای \fB\-\-public\-key=\fR استفاده شود\&. .sp در نسخه ۲۵۲ اضافه شد\&. .RE .PP \fB\-\-private\-key=\fR\fB\fIPATH/URI\fR\fR, \fB\-\-private\-key\-source=\fR\fB\fITYPE\fR\fR\fB[:\fR\fB\fINAME\fR\fR\fB]\fR, \fB\-\-certificate=\fR\fB\fIPATH/URI\fR\fR, \fB\-\-certificate\-source=\fR\fB\fITYPE\fR\fR\fB[:\fR\fB\fINAME\fR\fR\fB]\fR .RS 4 به‌عنوان جایگزینی برای \fB\-\-public\-key=\fR در فرمان \fBsign\fR، این سوییچ‌ها می‌توانند برای امضا با یک توکن سخت‌افزاری استفاده شوند\&. گزینه کلید خصوصی می‌تواند یک مسیر یا یک URI را بگیرد که به موتور (engine) یا ارائه‌دهنده (provider) OpenSSL ارسال خواهد شد، همان‌طور که توسط \fB\-\-private\-key\-source=\fR به‌صورت یک تاپل type:name مانند engine:pkcs11 مشخص شده است\&. موتور یا ارائه‌دهنده امضای مشخص‌شده OpenSSL برای امضا استفاده خواهد شد\&. .sp گزینه \fB\-\-certificate=\fR نیز یک مسیر یا یک URI می‌گیرد که به ارائه‌دهنده OpenSSL ارسال خواهد شد، همان‌طور که توسط \fB\-\-certificate\-source=\fR به‌صورت یک تاپل "type:name" مانند "provider:pkcs11" مشخص شده است\&. توجه داشته باشید که برخلاف \fB\-\-private\-key\-source=\fR، این گزینه فقط از ارائه‌دهنده‌ها پشتیبانی می‌کند و نه از موتورها\&. .sp در نسخه ۲۵۶ اضافه شد\&. .RE .PP \fB\-\-tpm2\-device=\fR\fB\fIPATH\fR\fR .RS 4 دستگاه TPM2 مورداستفاده را کنترل می‌کند\&. انتظار یک مسیر گره دستگاه که به تراشه TPM2 ارجاع دارد (مانند /dev/tpmrm0)\&. به‌عنوان جایگزین، مقدار ویژه "auto" می‌تواند مشخص شود تا گره دستگاهِ یک دستگاه TPM2 مناسب (که دقیقاً باید یکی از آن وجود داشته باشد) به‌طور خودکار تعیین شود\&. از مقدار ویژه "list" می‌توان برای برشمردن تمام دستگاه‌های TPM2 مناسب که در حال حاضر شناسایی شده‌اند استفاده کرد\&. .sp در نسخه ۲۵۲ اضافه شد\&. .RE .PP \fB\-\-phase=\fR\fB\fIPHASE\fR\fR .RS 4 کنترل می‌کند که مقادیر مورد انتظار PCR 11 برای کدام فازهای بوت محاسبه شوند\&. این گزینه یک سری رشته‌های جداشده با دونقطه را دریافت می‌کند که «مسیرهای» بوت را برای ورود به یک فاز خاص از فرآیند بوت کدگذاری می‌کنند\&. هر یک از رشته‌های مشخص‌شده توسط systemd\-pcrphase\-initrd\&.service، systemd\-pcrphase\-sysinit\&.service و \fBsystemd-pcrphase.service\fR(8) در طول مراحل مختلف فرآیند بوت در PCR 11 اندازه‌گیری می‌شوند\&. این سوییچ می‌تواند چندین بار مشخص شود تا مقادیر PCR برای چندین فاز بوت به‌طور هم‌زمان محاسبه شوند\&. در صورت عدم استفاده، به‌طور پیش‌فرض مقادیر زیر اعمال می‌شوند: "enter\-initrd"، "enter\-initrd:leave\-initrd"، "enter\-initrd:leave\-initrd:sysinit"، "enter\-initrd:leave\-initrd:sysinit:ready"؛ یعنی مقادیر مورد انتظار PCR را برای فاز بوت در initrd، در طول بوت اولیه، در طول بوت بعدی و در طول زمان اجرای سیستم محاسبه می‌کند، اما فازهای قبل از initrd یا هنگام خاموش شدن را مستثنی می‌سازد\&. این تنظیم هم توسط \fBcalculate\fR و هم توسط \fBsign\fR رعایت می‌شود\&. هنگام استفاده با دومی، به‌ویژه برای تولید امضاهای PCR که فقط برای بازگشایی منابع در طول بخش‌های خاصی از فرآیند بوت قابل استفاده هستند بسیار سودمند است\&. .sp برای جزئیات بیشتر درباره فازهای بوت PCR، به \fBsystemd-pcrphase.service\fR(8) مراجعه کنید\&. .sp در نسخه ۲۵۲ اضافه شد\&. .RE .PP \fB\-\-append=\fR\fB\fIPATH\fR\fR .RS 4 هنگام تولید یک امضای JSON مربوط به PCR (از طریق فرمان \fBsign\fR)، آن را با یک امضای JSON مربوط به PCR که از قبل تولید شده ترکیب کرده و به‌صورت یکجا خروجی می‌دهد\&. مسیر مشخص‌شده باید به یک فایل عادی اشاره کند که حاوی یک شیء امضای معتبر JSON PCR باشد\&. فایل مشخص‌شده تغییر نمی‌کند\&. ابتدا خوانده می‌شود، سپس امضای تازه‌تولیدشده به آن ضمیمه می‌شود و شیء حاصل در خروجی استاندارد نوشته می‌شود\&. از این گزینه برای تولید یک شیء JSON واحد متشکل از امضاهای ایجادشده با چندین کلید امضا استفاده کنید (برای مثال، داشتن یک کلید به ازای هر فاز بوت)\&. این فرمان موارد تکراری را نادیده می‌گیرد: اگر یک امضای خاص از قبل در یک شیء امضای JSON گنجانده شده باشد، برای بار دوم اضافه نمی‌شود\&. .sp در نسخه ۲۵۳ اضافه شد\&. .RE .PP \fB\-\-json=\fR\fB\fIMODE\fR\fR .RS 4 خروجی را در قالب JSON نمایش می‌دهد\&. یکی از مقادیر "short" (برای کوتاه‌ترین خروجی ممکن بدون فاصله‌های خالی اضافه یا شکست خط)، "pretty" (برای نسخه‌ای خوانا و آراسته از همان، همراه با تورفتگی و شکست خط) یا "off" (برای خاموش کردن خروجی JSON، که پیش‌فرض است) را می‌پذیرد\&. .RE .PP \fB\-\-no\-pager\fR .RS 4 خروجی را به صفحه‌بند (pager) هدایت نکن\&. .RE .PP \fB\-h\fR, \fB\-\-help\fR .RS 4 یک متن راهنمای کوتاه را چاپ کرده و خارج شو\&. .RE .PP \fB\-\-version\fR .RS 4 یک رشته نسخه کوتاه را چاپ کرده و خارج شو\&. .RE .SH "مثال‌ها (EXAMPLES)" .PP \fBمثال\ \&۱.\ \&تولید یک ایمیج هسته یکپارچه و محاسبه مقدار مورد انتظار TPM PCR 11\fR .sp .if n \{\ .RS 4 .\} .nf $ ukify build \e \-\-linux=vmlinux \e \-\-initrd=initrd\&.cpio \e \-\-os\-release=@os\-release\&.txt \e \-\-cmdline=@cmdline\&.txt \e \-\-splash=splash\&.bmp \e \-\-devicetree=devicetree\&.dtb \e \-\-measure \e \-\-output=vmlinux\&.efi 11:sha1=d775a7b4482450ac77e03ee19bda90bd792d6ec7 11:sha256=bc6170f9ce28eb051ab465cd62be8cf63985276766cf9faf527ffefb66f45651 11:sha384=1cf67dff4757e61e5\&.\&.\&.7f49ad720be02fd07263e1f93061243aec599d1ee4b4 11:sha512=8e79acd3ddbbc8282\&.\&.\&.0c3e8ec0c714821032038f525f744960bcd082d937da .fi .if n \{\ .RE .\} .PP دستور \fBukify\fR(1) به‌صورت داخلی \fBsystemd\-measure\fR را فراخوانی می‌کند\&. خروجی حاوی درهم‌سازی‌ها از جانب \fBsystemd\-measure\fR است\&. .PP \fBمثال\ \&۲.\ \&تولید یک جفت‌کلید خصوصی/عمومی، یک ایمیج هسته یکپارچه و یک امضای TPM PCR 11 برای آن، و جاسازی امضا و کلید عمومی در ایمیج\fR .sp .if n \{\ .RS 4 .\} .nf $ openssl genpkey \-algorithm RSA \-pkeyopt rsa_keygen_bits:2048 \-out tpm2\-pcr\-private\-key\&.pem \&.\&.+\&.+++++++++\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.+\&.\&.\&.\&.\&.+\&.+\&.\&.\&.+\&.\&.\&.\&.\&.\&.\&.\&.\&.\&. $ openssl rsa \-pubout \-in tpm2\-pcr\-private\-key\&.pem \-out tpm2\-pcr\-public\-key\&.pem $ systemd\-measure sign \e \-\-linux=vmlinux \e \-\-osrel=os\-release\&.txt \e \-\-cmdline=cmdline\&.txt \e \-\-initrd=initrd\&.cpio \e \-\-splash=splash\&.bmp \e \-\-dtb=devicetree\&.dtb \e \-\-pcrpkey=tpm2\-pcr\-public\-key\&.pem \e \-\-bank=sha1 \e \-\-bank=sha256 \e \-\-private\-key=tpm2\-pcr\-private\-key\&.pem \e \-\-public\-key=tpm2\-pcr\-public\-key\&.pem >tpm2\-pcr\-signature\&.json $ ukify build \e \-\-linux=vmlinux \e \-\-initrd=initrd\&.cpio \e \-\-os\-release=@os\-release\&.txt \e \-\-cmdline=@cmdline\&.txt \e \-\-splash=splash\&.bmp \e \-\-devicetree=devicetree\&.dtb \e \-\-pcr\-private\-key=tpm2\-pcr\-private\-key\&.pem \e \-\-pcr\-public\-key=tpm2\-pcr\-public\-key\&.pem \e \-\-pcr\-banks=sha1,sha256 \e \-\-output=vmlinuz\&.efi .fi .if n \{\ .RE .\} .PP سپس، خط‌مشی امضاشده PCR را روی یک حجم LUKS ثبت (enroll) کنید: .sp .if n \{\ .RS 4 .\} .nf # systemd\-cryptenroll \-\-tpm2\-device=auto \e \-\-tpm2\-public\-key=tpm2\-pcr\-public\-key\&.pem \e \-\-tpm2\-signature=tpm2\-pcr\-signature\&.json \e /dev/sda5 .fi .if n \{\ .RE .\} .PP و سپس دستگاه را با امضا بازگشایی کنید: .sp .if n \{\ .RS 4 .\} .nf # systemd\-cryptsetup attach \e volume5 /dev/sda5 \- \e tpm2\-device=auto,tpm2\-signature=/path/to/tpm2\-pcr\-signature\&.json .fi .if n \{\ .RE .\} .PP توجه داشته باشید زمانی که ایمیج هسته یکپارچه تولیدشده vmlinux\&.efi بوت می‌شود، فایل‌های امضا و کلید عمومی در مکان‌هایی قرار می‌گیرند که \fBsystemd\-cryptenroll\fR و \fBsystemd\-cryptsetup\fR به هر حال در آنجا به دنبالشان خواهند گشت، و بنابراین نیازی به مشخص کردن صریح این مسیرها نیست\&. .PP \fBمثال\ \&۳.\ \&معرفی یک کلید عمومی دوم، برای امضای همان اندازه‌گیری‌های PCR هسته، اما فقط برای فاز بوت initrd\fR .PP این مثال نمونه قبلی را گسترش می‌دهد، اما اکنون یک کلید امضای دوم را معرفی می‌کنیم که فقط برای امضای خط‌مشی‌های PCR محدود به فاز بوت initrd استفاده می‌شود\&. این کار می‌تواند برای قفل کردن حجم‌های ریشه به گونه‌ای استفاده شود که فقط قبل از انتقال به سیستم میزبان قابل بازگشایی باشند\&. بنابراین ما دو دسته از اسرار یا اعتبارنامه‌ها داریم: دسته‌ای که می‌توانند در تمام طول زمان اجرا بازگشایی شوند، و دسته‌ای که فقط در initrd قابل استفاده هستند\&. .sp .if n \{\ .RS 4 .\} .nf $ openssl genpkey \-algorithm RSA \-pkeyopt rsa_keygen_bits:2048 \-out tpm2\-pcr\-private\-key\&.pem \&.+\&.\&.\&.\&.\&.\&.\&.\&.+\&.+\&.\&.\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.\&.\&.\&.+\&.\&.\&.+\&.\&.\&.+\&.\&.\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.+\&.\&.\&.\&.\&.\&.+\&.\&.+\&.\&.\&.\&.\&.\&.\&.\&.\&.\&. $ openssl rsa \-pubout \-in tpm2\-pcr\-private\-key\&.pem \-out tpm2\-pcr\-public\-key\&.pem $ openssl genpkey \-algorithm RSA \-pkeyopt rsa_keygen_bits:2048 \-out tpm2\-pcr\-initrd\-private\-key\&.pem \&.\&.+\&.\&.\&.\&.\&.\&.\&.++\&.\&.\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.\&.\&.\&.\&.+\&.\&.\&.\&.+\&.\&.\&.\&.\&.+\&.+\&.\&.+\&.\&.\&.\&.\&.\&.\&.\&.\&.\&. $ openssl rsa \-pubout \-in tpm2\-pcr\-initrd\-private\-key\&.pem \-out tpm2\-pcr\-initrd\-public\-key\&.pem $ ukify build \e \-\-linux=vmlinux\-1\&.2\&.3 \e \-\-initrd=initrd\&.cpio \e \-\-os\-release=@os\-release\&.txt \e \-\-cmdline=@cmdline\&.txt \e \-\-splash=splash\&.bmp \e \-\-devicetree=devicetree\&.dtb \e \-\-pcr\-private\-key=tpm2\-pcr\-private\-key\&.pem \e \-\-pcr\-public\-key=tpm2\-pcr\-public\-key\&.pem \e \-\-phases=enter\-initrd,enter\-initrd:leave\-initrd,enter\-initrd:leave\-initrd:sysinit,enter\-initrd:leave\-initrd:sysinit:ready \e \-\-pcr\-banks=sha1,sha256 \e \-\-pcr\-private\-key=tpm2\-pcr\-initrd\-private\-key\&.pem \e \-\-pcr\-public\-key=tpm2\-pcr\-initrd\-public\-key\&.pem \e \-\-phases=enter\-initrd \e \-\-uname=1\&.2\&.3 \e \-\-output=vmlinux\-1\&.2\&.3\&.efi + /usr/lib/systemd/systemd\-measure sign \-\-linux=vmlinux\-1\&.2\&.3 \e \-\-osrel=os\-release\&.txt \-\-cmdline=cmdline\&.txt \-\-dtb=devicetree\&.dtb \e \-\-splash=splash\&.bmp \-\-initrd=initrd\&.cpio \-\-bank=sha1 \-\-bank=sha256 \e \-\-private\-key=tpm2\-pcr\-private\-key\&.pem \-\-public\-key=tpm2\-pcr\-public\-key\&.pem \e \-\-phase=enter\-initrd \-\-phase=enter\-initrd:leave\-initrd \e \-\-phase=enter\-initrd:leave\-initrd:sysinit \e \-\-phase=enter\-initrd:leave\-initrd:sysinit:ready + /usr/lib/systemd/systemd\-measure sign \-\-linux=vmlinux\-1\&.2\&.3 \e \-\-osrel=os\-release\&.txt \-\-cmdline=cmdline\&.txt \-\-dtb=devicetree\&.dtb \e \-\-splash=splash\&.bmp \-\-initrd=initrd\&.cpio \-\-bank=sha1 \-\-bank=sha256 \e \-\-private\-key=tpm2\-pcr\-initrd\-private\-key\&.pem \e \-\-public\-key=tpm2\-pcr\-initrd\-public\-key\&.pem \e \-\-phase=enter\-initrd Wrote unsigned vmlinux\-1\&.2\&.3\&.efi .fi .if n \{\ .RE .\} .PP ابزار \fBukify\fR هر دو فراخوانی \fBsystemd\-measure\fR را به‌عنوان خروجی اطلاعاتی چاپ می‌کند (سطرهایی که با "+" شروع می‌شوند)؛ این امر به ما امکان می‌دهد ببینیم چگونه \fBsystemd\-measure\fR فراخوانی می‌شود\&. سپس خروجی هر دو فراخوانی را در بخش "\&.pcrsig" ادغام می‌کند\&. \fBsystemd\-measure\fR همچنین می‌تواند این ادغام را خود با استفاده از گزینه \fB\-\-append=\fR انجام دهد\&. .PP توجه داشته باشید که در این مثال، بخش PE با نام "\&.pcrpkey" حاوی کلید مشخص‌شده توسط اولین گزینه \fB\-\-pcr\-private\-key=\fR است که تمام فازهای بوت را پوشش می‌دهد\&. بخش "\&.pcrpkey" در خط‌مشی‌های پیش‌فرض \fBsystemd\-cryptenroll\fR و \fBsystemd\-creds\fR استفاده می‌شود\&. برای استفاده از خط‌مشی سخت‌گیرانه‌تر مقید به tpm2\-pcr\-initrd\-public\-key\&.pem، گزینه \fB\-\-tpm2\-public\-key=\fR را در خط فرمان آن ابزارها مشخص کنید\&. .SH "کدهای خروج (EXIT STATUS)" .PP در صورت موفقیت 0 و در غیر این صورت یک کد خطای غیر صفر برگردانده می‌شود\&. .SH "همچنین ببینید (SEE ALSO)" .PP \fBsystemd\fR(1), \fBsystemd-stub\fR(7), \fBukify\fR(1), \fBsystemd-creds\fR(1), \fBsystemd-cryptsetup@.service\fR(8), \fBsystemd-pcrphase.service\fR(8) .SH "نکات (NOTES)" .IP " 1." 4 UAPI.5 Unified Kernel Image (UKI) .RS 4 \%https://uapi-group.org/specifications/specs/unified_kernel_image .RE