VERITYTAB(5) veritytab VERITYTAB(5)

veritytab - پیکربندی دستگاه‌های ذخیره‌سازی محافظت‌شده با dm-verity

/etc/veritytab

پرونده /etc/veritytab دستگاه‌های بلوکی محافظت‌شده با verity را که در طول بوت سیستم راه‌اندازی می‌شوند، توصیف می‌کند.

خطوط خالی و خطوطی که با نویسه "#" شروع می‌شوند نادیده گرفته می‌شوند. هر یک از خطوط باقی‌مانده یک دستگاه بلوکی محافظت‌شده با verity را توصیف می‌کند. فیلدها با فاصله خالی (whitespace) از یکدیگر جدا می‌شوند.

هر خط به شکل زیر است:

volume-name data-device hash-device roothash [options]

چهار فیلد اول اجباری هستند، فیلد باقی‌مانده اختیاری است.

فیلد اول شامل نام حجم verity حاصل است؛ دستگاه بلوکی آن زیر مسیر /dev/mapper/ راه‌اندازی می‌شود.

فیلد دوم شامل مسیری به دستگاه بلوکی داده‌های زیرین است، یا مشخصه‌ای از یک دستگاه بلوکی از طریق UUID= به همراه UUID.

فیلد سوم شامل مسیری به دستگاه بلوکی هش زیرین است، یا مشخصه‌ای از یک دستگاه بلوکی از طریق UUID= به همراه UUID.

فیلد چهارم roothash (هش ریشه) به صورت شانزده‌شانزدهی (هگزادسیمال) است. اگر این فیلد به صورت خط تیره مشخص شود، تلاش می‌شود هش ریشه از ویژگی udev به نام "ID_DISSECT_PART_ROOTHASH=" (کدگذاری شده به صورت هگزادسیمال) دستگاه داده خوانده شود.

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

superblock=BOOL

استفاده از dm-verity با یا بدون ابربلاک (superblock) دائمی روی دیسک.

اضافه‌شده در نسخه 254.

format=NUMBER

نوع نسخه هش را مشخص می‌کند. نوع قالب "0" نسخه اصلی Chrome OS است. نوع قالب "1" نسخه مدرن است.

اضافه‌شده در نسخه 254.

data-block-size=BYTES

اندازه بلوک مورد استفاده برای دستگاه داده. (توجه داشته باشید که هسته در اینجا حداکثر فقط از اندازه صفحه (page-size) پشتیبانی می‌کند؛ مضاربی از ۵۱۲ بایت.)

اضافه‌شده در نسخه 254.

hash-block-size=BYTES

اندازه بلوک مورد استفاده برای دستگاه هش. (توجه داشته باشید که هسته در اینجا حداکثر فقط از اندازه صفحه (page-size) پشتیبانی می‌کند؛ مضاربی از ۵۱۲ بایت.)

اضافه‌شده در نسخه 254.

data-blocks=BLOCKS

تعداد بلوک‌های دستگاه داده که در راستی‌آزمایی استفاده می‌شوند. اگر مشخص نشود، از کل دستگاه استفاده می‌شود.

اضافه‌شده در نسخه 254.

hash-offset=BYTES

آفست ناحیه هش/ابربلاک روی "hash-device". (مضاربی از ۵۱۲ بایت.)

اضافه‌شده در نسخه 254.

salt=HEX

نمک (salt) مورد استفاده برای قالب‌بندی یا راستی‌آزمایی. قالب به صورت یک رشته هگزادسیمال است؛ حداکثر ۲۵۶ بایت طول دارد؛ "-" مقدار ویژه برای حالت خالی است.

اضافه‌شده در نسخه 254.

uuid=UUID

استفاده از UUID ارائه‌شده به جای تولید یک شناسه جدید. UUID باید در قالب استاندارد UUID ارائه شود، مانند "12345678-1234-1234-1234-123456789abc".

اضافه‌شده در نسخه 254.

ignore-corruption, restart-on-corruption, panic-on-corruption

تعیین می‌کند در صورت شناسایی مشکل در درستی داده‌ها (خرابی داده / data corruption) چه اقدامی انجام شود. بدون این گزینه‌ها، هسته عملیات IO را با خطای I/O با شکست مواجه می‌کند. با گزینه --ignore-corruption خرابی تنها ثبت (لاگ) می‌شود. با گزینه --restart-on-corruption یا --panic-on-corruption هسته بلافاصله بازراه‌اندازی (یا دچار وحشت/panic) می‌شود. (باید راهکاری برای جلوگیری از حلقه‌های بازراه‌اندازی ارائه دهید.)

اضافه‌شده در نسخه 248.

ignore-zero-blocks

به هسته دستور می‌دهد بلوک‌هایی را که انتظار می‌رود حاوی صفر باشند راستی‌آزمایی نکند و به جای آن همیشه مستقیماً صفر برگرداند.

هشدار
تنها در موارد بسیار خاص از این گزینه استفاده کنید. این گزینه از نسخه ۴.۵ هسته لینوکس در دسترس است.
اضافه‌شده در نسخه 248.

check-at-most-once

به هسته دستور می‌دهد بلوک‌ها را فقط نخستین باری که از دستگاه داده خوانده می‌شوند راستی‌آزمایی کند، نه در هر بار.

هشدار
این گزینه سطح امنیت کمتری را فراهم می‌کند زیرا تنها دستکاری برون‌خط (offline) محتوای دستگاه داده شناسایی خواهد شد، نه دستکاری برخط (online). این گزینه از نسخه ۴.۱۷ هسته لینوکس در دسترس است.
اضافه‌شده در نسخه 248.

hash=HASH

الگوریتم هش برای dm-verity. این مقدار باید نام الگوریتم باشد، مانند "sha1". برای مقدار پیش‌فرض veritysetup --help را ببینید.

اضافه‌شده در نسخه 254.

fec-device=PATH

استفاده از تصحیح خطای پیش‌رو (FEC) برای بازیابی از خرابی در صورتی که راستی‌آزمایی هش با شکست مواجه شود. استفاده از داده‌های کدگذاری‌شده از دستگاه مشخص‌شده. آرگومان fec device می‌تواند دستگاه بلوکی یا ایمیج فایل باشد. اگر مسیر fec device وجود نداشته باشد، به عنوان فایل ایجاد خواهد شد. توجه: اندازه‌های بلوک برای دستگاه‌های داده و هش باید مطابقت داشته باشند. همچنین، اگر verity data_device رمزنگاری شده باشد، fec_device نیز باید رمزنگاری شود.

اضافه‌شده در نسخه 254.

fec-offset=BYTES

این مقدار آفست (انحراف)، بر حسب بایت، از ابتدای دستگاه FEC تا ابتدای داده‌های کدگذاری‌شده است. (تراز شده بر روی ۵۱۲ بایت.)

اضافه‌شده در نسخه 254.

fec-roots=NUM

تعداد ریشه‌های مولد (generator roots). این مقدار برابر با تعداد بایت‌های توازن (parity) در داده‌های کدگذاری‌شده است. در کدگذاری RS(M, N)، تعداد ریشه‌ها برابر با M-N است. مقدار M برابر با ۲۵۵ و M-N بین ۲ و ۲۴ (شامل هر دو) است.

اضافه‌شده در نسخه 254.

root-hash-signature=PATH|base64:BASE64|auto

یک رشته Base64 کدگذاری‌شده از امضای هش ریشه با پیشوند "base64:"، یا یک مسیر مطلق به پرونده امضای هش ریشه که برای راستی‌آزمایی هش ریشه (در هسته) استفاده می‌شود. اگر رشته ویژه "auto" مشخص شود، تلاش می‌شود امضای هش ریشه از ویژگی udev به نام "ID_DISSECT_PART_ROOTHASH_SIG=" (در قالب Base64) دستگاه داده خوانده شود. این ویژگی به نسخه ۵.۴ یا جدیدتر هسته لینوکس نیاز دارد.

اضافه‌شده در نسخه 248.

_netdev

این دستگاه veritysetup را به عنوان نیازمند شبکه علامت‌گذاری می‌کند. پس از در دسترس قرار گرفتن شبکه راه‌اندازی خواهد شد، مشابه با واحدهای systemd.mount(5) که با _netdev علامت‌گذاری شده‌اند. واحد سرویس برای راه‌اندازی این دستگاه، به جای قرار گرفتن بین veritysetup-pre.target و veritysetup.target، بین remote-fs-pre.target و remote-veritysetup.target ترتیب‌بندی خواهد شد.

نکته: اگر این دستگاه برای یک نقطه اتصال (mount point) استفاده شود که در fstab(5) مشخص شده است، گزینه _netdev باید برای آن نقطه اتصال نیز استفاده شود. در غیر این صورت، ممکن است یک حلقه وابستگی ایجاد شود که در آن نقطه اتصال توسط local-fs.target فراخوانی شود، در حالی که سرویس پیکربندی شبکه معمولاً تنها پس از اتصال سیستم‌فایل محلی راه‌اندازی می‌شود.

اضافه‌شده در نسخه 248.

noauto

این دستگاه به veritysetup.target اضافه نخواهد شد. این بدان معنی است که در زمان بوت به صورت خودکار فعال نمی‌شود، مگر اینکه چیز دیگری آن را فراخوانی کند. به ویژه، اگر دستگاه برای یک نقطه اتصال استفاده شود، در طول بوت به طور خودکار فعال خواهد شد، مگر اینکه خود نقطه اتصال نیز با noauto غیرفعال شده باشد.

اضافه‌شده در نسخه 248.

nofail

این دستگاه یک وابستگی سخت (hard dependency) برای veritysetup.target نخواهد بود. همچنان فراخوانی و راه‌اندازی می‌شود، اما سیستم منتظر ظاهر شدن و فعال شدن دستگاه نمی‌ماند و در صورت ناموفق بودن این عمل، بوت با شکست مواجه نخواهد شد. توجه داشته باشید که سایر واحدهایی که به دستگاه فعال‌شده وابسته هستند ممکن است همچنان با شکست مواجه شوند. به ویژه، اگر دستگاه برای یک نقطه اتصال استفاده شود، خود نقطه اتصال نیز باید گزینه nofail را داشته باشد، در غیر این صورت اگر دستگاه با موفقیت فعال نشود، بوت با شکست مواجه خواهد شد.

اضافه‌شده در نسخه 248.

x-initrd.attach

راه‌اندازی این دستگاه بلوکی محافظت‌شده با verity در initrd، مشابه با واحدهای systemd.mount(5) که با x-initrd.mount علامت‌گذاری شده‌اند.

اگرچه علامت‌گذاری مدخل اتصال برای سیستم‌فایل ریشه با x-initrd.mount ضروری نیست، اما استفاده از x-initrd.attach همراه با دستگاه بلوکی محافظت‌شده با verity حاوی سیستم‌فایل ریشه همچنان توصیه می‌شود؛ زیرا در غیر این صورت systemd در طول خاموش شدن عادی سیستم در حالی که دستگاه هنوز در حال استفاده است تلاش می‌کند آن را جدا کند. با این گزینه، دستگاه همچنان جدا می‌شود اما دیرتر و پس از قطع اتصال سیستم‌فایل ریشه.

همه دستگاه‌های بلوکی محافظت‌شده با verity دیگر که حاوی سیستم‌فایل‌های متصل‌شده در initrd هستند باید از این گزینه استفاده کنند.

اضافه‌شده در نسخه 248.

tpm2-measure-nvpcr=

یک آرگومان بولی (boolean) یا نام یک NvPCR را به عنوان آرگومان می‌پذیرد. می‌تواند برای فعال کردن اندازه‌گیری خودکار نام حجم و هش ریشه Verity استفاده شود؛ همچنین شماره‌سریال‌ها و صادرکنندگان گواهی‌های استفاده‌شده برای تولید امضاهای ارائه‌شده (در صورت وجود) اندازه‌گیری خواهند شد. ارسال مقدار false این سازوکار را غیرفعال می‌کند. ارسال مقدار true اندازه‌گیری را درون NvPCR به نام "verity" فعال می‌کند. اگر هر رشته دیگری مشخص شود، NvPCR مورد نظر برای اندازه‌گیری را با نام انتخاب می‌کند.

اضافه‌شده در نسخه 260.

در ابتدای بوت و هنگام بارگذاری مجدد پیکربندی مدیر سیستم، این پرونده توسط systemd-veritysetup-generator(8) به واحدهای بومی systemd ترجمه می‌شود.

مثال 1. نمونه /etc/veritytab

راه‌اندازی دو دستگاه بلوکی محافظت‌شده با verity. یکی با استفاده از بلوک‌های دستگاه، دیگری با استفاده از پرونده‌ها.

usr  PARTUUID=783e45ae-7aa3-484a-beef-a80ff9c19cbb PARTUUID=21dc1dfe-4c33-8b48-98a9-918a22eb3e37 36e3f740ad502e2c25e2a23d9c7c17bf0fdad2300b7580842d4b7ec1fb0fa263 auto
data /etc/data /etc/hash a5ee4b42f70ae1f46a08a7c92c2e0a20672ad2f514792730f5d49d7606ab8fdf auto

systemd(1), systemd-veritysetup@.service(8), systemd-veritysetup-generator(8), fstab(5), veritysetup(8)

systemd 261.2