REQUEST-KEY.CONF(5) فایلهای پیکربندی REQUEST-KEY.CONF(5)

request-key.conf - فایل پیکربندی پردازندههای مقداردهی کلید در هسته

فایل request-key.conf قواعد نگاشت و برنامههای مرتبط برای مقداردهی انواع کلیدها را هنگام فراخوانی request-key تعیین میکند.

این فایل‌ها توسط برنامه /sbin/request-key استفاده می‌شوند تا مشخص گردد برای نمونه‌سازی (مقداردهی اولیه) یک کلید چه برنامه‌ای باید اجرا شود.

برنامه request-key برای یافتن بهترین تطابق، تمام فایل‌های زیر را می‌خواند:

/etc/request-key.d/*.conf
/etc/request-key.conf

اگر هیچ تطابقی پیدا نکند، یک خطا بازمی‌گرداند و هسته به طور خودکار کلید را باطل (negate) می‌کند.

بهترین تطابق به عنوان خطی با کوتاه‌ترین پرش‌های کاراکتر عام (wildcard skips) تعریف می‌شود، به طوری که ستون‌ها به ترتیب از چپ به راست رتبه‌بندی می‌شوند. اگر دو خط دارای پرش‌هایی با طول یکسان باشند، خطی که ابتدا خوانده شده انتخاب می‌شود.

در این فایل‌ها، هر خط خالی یا خطی که با علامت هش '#' آغاز شود، به عنوان توضیح (کامنت) در نظر گرفته شده و نادیده گرفته می‌شود.

فرض می‌شود سایر خطوط، خطوط دستوری با تعدادی فیلد جداشده با فاصله خالی هستند:

<op> <type> <description> <callout-info> <prog> <arg1> <arg2> ...

چهار فیلد اول برای تطبیق با پارامترهای ارائه‌شده از هسته به request-key استفاده می‌شوند. فیلد op نوع عملیات است؛ در حال حاضر تنها عملیات پشتیبانی‌شده "create" است.

فیلدهای type، description و callout-info با سه پارامتر ارسال‌شده به keyctl request2 یا فراخوانی سیستمی request_key() تطبیق داده می‌شوند. هر یک از این‌ها می‌تواند شامل یک نویسه ستاره '*' به عنوان کاراکتر عام در هر کجای رشته باشد.

در صورت یافتن تطابق، برنامه مشخص‌شده توسط <prog> اجرا خواهد شد. این برنامه باید دارای یک نام مسیر کامل و معتبر (fully qualified path) باشد. مقدار argv[0] از بخشی از نام برنامه که پس از آخرین نویسه اسلش '/' قرار دارد تنظیم خواهد شد.

اگر پیش از نام برنامه یک نویسه پایپ '|' قرار گیرد، برنامه فورک شده و در حالی که به سه پایپ متصل است اجرا می‌شود. اطلاعات فراخوانی (callout information) از طریق ورودی استاندارد (stdin) به آن ارسال شده و داده‌های محموله (payload) مورد نظر از خروجی استاندارد (stdout) آن دریافت خواهد شد. هر آنچه به خروجی خطای استاندارد (stderr) ارسال شود در syslog ثبت می‌گردد. اگر برنامه با وضعیت 0 خاتمه یابد، آنگاه /sbin/request-key تلاش خواهد کرد کلید را با داده‌های خوانده‌شده از stdout مقداردهی کند. اگر به هر طریق دیگری با شکست مواجه شود، request-key تلاش می‌کند دستور عملیات 'negate' مناسب را اجرا کند.

آرگومان‌های برنامه می‌توانند با ماکروهای مختلف جایگزین شوند. تنها جایگزینی کامل آرگومان پشتیبانی می‌شود - جایگزینی ماکروها نمی‌تواند درون متن یک آرگومان تعبیه شود. تمام ماکروها با یک نویسه درصد '%' آغاز می‌شوند. آرگومانی که با دو نویسه درصد شروع شود، یکی از آن‌ها حذف خواهد شد.

ماکروهای زیر پشتیبانی می‌شوند:

%o    نوع عملیات (Operation type)
%k    شناسه کلید (Key ID)
%t    نوع کلید (Key type)
%d    توضیحات کلید (Key description)
%c    اطلاعات فراخوانی (Callout information)
%u    شناسه کاربری کلید (Key UID)
%g    شناسه گروهی کلید (Key GID)
%T    دسته‌کلید رشته درخواست‌کننده (Requestor's thread keyring)
%P    دسته‌کلید پردازه درخواست‌کننده (Requestor's process keyring)
%S    دسته‌کلید نشست درخواست‌کننده (Requestor's session keyring)

همچنین جایگزینی ماکروی دیگری نیز وجود دارد که امکان درج محتوای یک کلید را فراهم می‌سازد:

%{<type>:<description>}

این ماکرو جستجویی را برای کلیدی با نوع و توضیحات مشخص در دسته‌کلیدهای درخواست‌کننده انجام می‌دهد و در صورت یافتن، محتوای آن را جایگزین ماکرو می‌کند. اگر پیدا نشود، خطایی ثبت شده و کلید در حال ایجاد باطل (negate) خواهد شد.

یک فایل اولیه در /etc نصب خواهد شد. این فایل شامل خطوط اشکال‌زدایی زیر است که می‌توان از آن‌ها برای آزمایش فرایند نصب استفاده کرد:

create user debug:* negate /bin/keyctl negate %k 30 %S
create user debug:loop:* * |/bin/cat
create user debug:* * /usr/share/keyutils/request-key-debug.sh %k %d %c %S
negate * * * /bin/keyctl negate %k 30 %S

این موارد به گونه‌ای تنظیم شده‌اند که فرمانی مانند:

keyctl request2 user debug:xxxx negate

یک کلید منفی تعریف‌شده توسط کاربر ایجاد می‌کند، فرمانی مانند:

keyctl request2 user debug:yyyy spoon

یک کلید مقداردهی‌شده تعریف‌شده توسط کاربر با "Debug spoon" به عنوان داده محموله ایجاد می‌کند، و فرمانی مانند:

keyctl request2 user debug:loop:zzzz abcdefghijkl

یک کلید مقداردهی‌شده تعریف‌شده توسط کاربر با اطلاعات فراخوانی به عنوان بار محموله ایجاد خواهد کرد.

/etc/request-key.conf
/etc/request-key.d/*.conf

keyctl(1), request-key.conf(5)

مه ۲۰۲۵ keyutils