KSU(1) دستورهای کاربری KSU(1)

ksu - ارتقای دسترسی کاربر ارشد با احراز هویت کربروس (Kerberized su)

ksu [ نام_کاربر_هدف ] [ -n اصالت_مبدا ] [ -k ] [ -z | -Z ] [ -q ] [ -l مدت_اعتبار ] [ -c حافظه_بلیت ] [ -a [ دستور [ آرگومانها... ] ] ]

برای کامپایل ksu باید کربروس نسخه ۵ (Kerberos version 5) نصب باشد. برای استفاده از ksu باید یک کارساز کربروس نسخه ۵ در حال اجرا باشد.

دستور ksu به کاربر امکان میدهد با استفاده از بلیتهای کربروس به عنوان کاربری دیگر (معمولاً root) بدون افشای رمز عبور محلی احراز هویت کرده و دستور اجرا کند.

برنامه ksu نسخه‌ای مجهز به کربروس از برنامه su است که دو هدف اصلی دارد: نخست، تغییر امن شناسه‌های کاربری واقعی و مؤثر (real and effective UID) به کاربر هدف؛ و دوم، ایجاد یک زمینه امنیتی (security context) جدید.

نکته:

به منظور وضوح بیشتر، تمامی ارجاعات و مشخصه‌های کاربری که برنامه را فراخوانی می‌کند با پیشوند «مبدأ» (مانند «کاربر مبدأ»، «حافظه موقت مبدأ» و غیره) مشخص می‌شوند.

به همین ترتیب، تمامی ارجاعات و مشخصه‌های حساب کاربری مقصد با پیشوند «هدف» مشخص می‌شوند.

برای تحقق هدف نخست، ksu در دو فاز عمل می‌کند: احراز هویت (Authentication) و مجوزدهی (Authorization). تعیین نام اصالت (Principal) هدف، نخستین گام در احراز هویت است. کاربر می‌تواند نام اصالت خود را با گزینه -n مشخص کند (برای نمونه، -n jqpublic@USC.EDU) یا اینکه یک نام اصالت پیش‌فرض با استفاده از روش ارزیابی شرح داده شده در بخش گزینه‌ها (توضیحات گزینه -n) اختصاص داده خواهد شد. نام کاربر هدف باید نخستین آرگومان ksu باشد؛ در صورت مشخص نشدن، به صورت پیش‌فرض root در نظر گرفته می‌شود. اگر نقطه (.) مشخص شود، کاربر هدف همان کاربر مبدأ خواهد بود (مانند ksu .). اگر کاربر مبدأ ریشه (root) باشد یا کاربر هدف همان کاربر مبدأ باشد، هیچ احراز هویت یا مجوزدهی انجام نمی‌شود. در غیر این صورت، ksu به دنبال یک بلیت کربروس معتبر در حافظه موقت مبدأ می‌گردد.

این بلیت می‌تواند بلیت کارساز نهایی (End-Server) یا بلیت صدور بلیت (TGT) برای قلمرو (Realm) نام اصالت هدف باشد. اگر بلیت کارساز نهایی از قبل در حافظه موقت موجود باشد، رمزگشایی و اعتبارسنجی می‌شود. اگر در حافظه موقت نباشد اما TGT موجود باشد، از TGT برای دریافت بلیت کارساز نهایی استفاده شده و سپس بلیت کارساز نهایی تأیید اعتبار می‌شود. اگر هیچ‌یک از بلیت‌ها در حافظه موقت نباشد، اما ksu با ماکروی GET_TGT_VIA_PASSWD کامپایل شده باشد، از کاربر رمز عبور کربروس پرسیده می‌شود و سپس از آن برای دریافت TGT استفاده می‌گردد. چنانچه کاربر از راه دور متصل شده باشد و کانال امن نداشته باشد، رمز عبور ممکن است افشا شود. اگر هیچ‌کدام از بلیت‌ها در حافظه موجود نباشد و ماکروی GET_TGT_VIA_PASSWD نیز تعریف نشده باشد، احراز هویت با شکست مواجه می‌شود.

این بخش فرایند مجوزدهی کاربر مبدأ را در حالتی که ksu بدون گزینه -e فراخوانی می‌شود توصیف می‌کند. برای توضیحات مربوط به گزینه -e، بخش گزینه‌ها را ببینید.

پس از احراز هویت موفقیت‌آمیز، ksu بررسی می‌کند که آیا نام اصالت هدف مجاز به دسترسی به حساب کاربری هدف است یا خیر. در دایرکتوری خانگی کاربر هدف، ksu تلاش می‌کند به دو فایل مجوزدهی دسترسی پیدا کند: .k5login(5) و .k5users. در فایل .k5login، هر خط شامل نام یک اصالت است که مجاز به دسترسی به حساب کاربری است.

برای نمونه:

jqpublic@USC.EDU
jqpublic/secure@USC.EDU
jqpublic/admin@USC.EDU

قالب فایل .k5users نیز مشابه است، با این تفاوت که پس از نام اصالت ممکن است فهرستی از دستوراتی که آن اصالت مجاز به اجرای آن‌هاست بیاید (برای جزئیات به گزینه -e در بخش گزینه‌ها مراجعه فرمایید).

بنابراین اگر نام اصالت هدف در فایل .k5login یافت شود، کاربر مبدأ مجاز به دسترسی به حساب کاربری هدف خواهد بود. در غیر این صورت ksu به فایل .k5users نگاه می‌کند. اگر نام اصالت هدف بدون هیچ دستور اضافه‌ای یا تنها همراه با یک ستاره (*) پیدا شود، کاربر مبدأ مجاز شناخته می‌شود. اگر هر یک از فایل‌های .k5login یا .k5users وجود داشته باشند اما مدخل مناسبی برای اصالت هدف یافت نشود، دسترسی رد می‌شود. اگر هیچ‌یک از این دو فایل وجود نداشته باشند، طبق قوانین نگاشت aname->lname به اصالت دسترسی داده خواهد شد. در غیر این صورت، مجوزدهی شکست می‌خورد.

پس از احراز هویت و مجوزدهی موفق، ksu به روشی مشابه با su عمل می‌کند. متغیرهای محیطی دست‌نخورده باقی می‌مانند مگر متغیرهای USER، HOME و SHELL. اگر کاربر هدف root نباشد، متغیر USER برابر با نام کاربر هدف تنظیم می‌شود؛ در غیر این صورت USER بدون تغییر می‌ماند. متغیرهای HOME و SHELL هر دو برابر مقادیر پیش‌فرض ورود کاربر هدف قرار می‌گیرند. علاوه بر این، متغیر محیطی KRB5CCNAME برابر با نام حافظه موقت هدف تنظیم می‌شود. شناسه کاربری واقعی و مؤثر به شناسه کاربر هدف تغییر می‌یابد. سپس پوسته (شل) کاربر هدف فراخوانی می‌شود (نام پوسته در فایل passwd مشخص شده است). پس از خاتمه پوسته، ksu حافظه موقت هدف را حذف می‌کند (مگر اینکه ksu با گزینه -k فراخوانی شده باشد). این سازوکار با انجام یک fork و سپس exec پیاده‌سازی شده است، بر خلاف su که صرفاً exec را انجام می‌دهد.

از ksu می‌توان برای ایجاد یک زمینه امنیتی جدید برای برنامه هدف (چه پوسته هدف یا دستوری که از طریق گزینه -e مشخص شده) استفاده کرد. برنامه هدف مجموعه‌ای از اعتبارات (Credentials) را از کاربر مبدأ به ارث می‌برد. به طور پیش‌فرض، این مجموعه شامل تمام اعتبارات موجود در حافظه موقت مبدأ به همراه اعتبارات اضافه‌ای است که در طول احراز هویت به دست آمده‌اند. کاربر مبدأ می‌تواند با استفاده از گزینه‌های -z یا -Z این مجموعه اعتبارات را محدود سازد. گزینه -z رونوشت بلیت‌ها از حافظه مبدأ به حافظه هدف را تنها به بلیت‌هایی محدود می‌کند که کلاینت آن‌ها برابر با نام اصالت هدف باشد. گزینه -Z یک حافظه موقت جدید و خالی (بدون هیچ اعتباری) در اختیار کاربر هدف قرار می‌دهد. توجه داشته باشید که به دلایل امنیتی، هنگامی که کاربر مبدأ root بوده و کاربر هدف غیر از root باشد، گزینه -z حالت پیش‌فرض عملکرد برنامه است.

اگرچه در صورتی که کاربر مبدأ root باشد یا کاربر مبدأ و هدف یکسان باشند احراز هویت انجام نمی‌شود، اما همچنان می‌توان بلیت‌های اضافی برای حافظه موقت هدف دریافت کرد. اگر گزینه -n مشخص شده باشد و هیچ اعتباری نتواند به حافظه موقت هدف کپی شود، از کاربر مبدأ رمز عبور کربروس پرسیده می‌شود (مگر آنکه -Z مشخص شده باشد یا ماکروی GET_TGT_VIA_PASSWD تعریف نشده باشد). در صورت موفقیت، یک TGT از کارساز کربروس دریافت شده و در حافظه موقت هدف ذخیره می‌شود. در غیر این صورت، اگر رمز عبوری وارد نشود (کاربر کلید اینتر را فشار دهد)، ksu در حالت عادی به کار خود ادامه می‌دهد (حافظه موقت هدف شامل TGT مورد نظر نخواهد بود). اگر رمز عبور اشتباه وارد شود، ksu با خطا متوقف می‌شود.

نکته:

در طول فرایند احراز هویت، تنها بلیت‌هایی در حافظه موقت مبدأ ذخیره می‌شوند که بدون ارائه رمز عبور قابل دریافت بوده‌اند.

نام اصالت کربروس هدف را مشخص می‌کند. در فازهای احراز هویت و مجوزدهی ksu استفاده می‌شود.

اگر ksu بدون گزینه -n فراخوانی شود، یک نام اصالت پیش‌فرض بر اساس روش ابتکاری (Heuristic) زیر تعیین می‌گردد:

•
حالت ۱: کاربر مبدأ غیر از root باشد.

اگر کاربر هدف همان کاربر مبدأ باشد، نام اصالت پیش‌فرض برابر با اصالت پیش‌فرض حافظه موقت مبدأ تنظیم می‌شود. اگر حافظه موقت وجود نداشته باشد، نام اصالت پیش‌فرض برابر با target_user@local_realm خواهد بود. اگر کاربران مبدأ و هدف متفاوت باشند و هیچ‌یک از فایل‌های ~target_user/.k5users یا ~target_user/.k5login وجود نداشته باشند، نام اصالت پیش‌فرض برابر با target_user_login_name@local_realm خواهد بود. در غیر این صورت، ksu با شروع از نخستین اصالت فهرست‌شده در زیر، بررسی می‌کند که آیا آن اصالت مجاز به دسترسی به حساب کاربری هدف است و آیا بلیت معتبری برای آن در حافظه موقت مبدأ وجود دارد یا خیر. اگر هر دو شرط برقرار باشند، آن اصالت به اصالت هدف پیش‌فرض تبدیل می‌شود، وگرنه به سراغ اصالت بعدی می‌رود:

اصالت پیش‌فرض حافظه موقت مبدأ
target_user@local_realm
source_user@local_realm

اگر موارد a تا c ناموفق باشند، هر اصالتی که بلیتی برای آن در حافظه موقت مبدأ وجود داشته باشد و مجاز به دسترسی به حساب هدف باشد بررسی می‌شود. اگر این نیز شکست بخورد، نخستین اصالت از فهرست فوق که مجاز به دسترسی به حساب هدف باشد انتخاب می‌گردد. اگر هیچ‌یک مجاز نباشند و ksu با گزینه PRINC_LOOK_AHEAD کامپایل شده باشد، اصالت پیش‌فرض به شکل زیر انتخاب می‌شود:

برای هر گزینه در فهرست فوق، یک اصالت مجاز انتخاب می‌شود که نام قلمرو (realm) یکسان داشته و بخش اول نام اصالت آن با پیشوند گزینه مطابقت داشته باشد. برای نمونه اگر کاندیدای (a) برابر با jqpublic@ISI.EDU باشد و jqpublic/secure@ISI.EDU مجاز به دسترسی به حساب هدف باشد، اصالت پیش‌فرض برابر با jqpublic/secure@ISI.EDU تنظیم می‌شود.

•
حالت ۲: کاربر مبدأ root باشد.

اگر کاربر هدف غیر از root باشد، نام اصالت پیش‌فرض برابر با target_user@local_realm است. در غیر این صورت، اگر حافظه موقت مبدأ وجود داشته باشد، نام اصالت پیش‌فرض برابر با اصالت پیش‌فرض حافظه موقت مبدأ خواهد بود. چنانچه حافظه موقت مبدأ وجود نداشته باشد، نام اصالت پیش‌فرض برابر با root@local_realm تنظیم می‌گردد.

نام حافظه موقت مبدأ را مشخص می‌کند (برای نمونه، -c FILE:/tmp/my_cache). اگر گزینه -c استفاده نشود، نام از متغیر محیطی KRB5CCNAME گرفته می‌شود. اگر KRB5CCNAME تعریف نشده باشد، نام حافظه موقت مبدأ برابر با krb5cc_<source uid> تنظیم خواهد شد. نام حافظه موقت هدف به طور خودکار برابر با krb5cc_<target uid>.(gen_sym()) تنظیم می‌گردد که در آن gen_sym شماره جدیدی تولید می‌کند تا حافظه حاصل از قبل موجود نباشد. برای نمونه:
krb5cc_1984.2
پس از پایان کار پوسته هدف یا دستور (دستور با گزینه -e)، حافظه موقت هدف را حذف نمی‌کند. بدون گزینه -k، دستور ksu حافظه موقت هدف را حذف خواهد کرد.
کپی بلیت‌ها از حافظه موقت مبدأ به حافظه موقت هدف را تنها به بلیت‌هایی محدود می‌کند که کلاینت آن‌ها برابر با نام اصالت هدف باشد. اگر خواهان بلیت‌هایی غیر از اصالت پیش‌فرض هستید، از گزینه -n استفاده کنید. توجه داشته باشید که گزینه -z با گزینه -Z ناسازگار و مانعة‌الجمع است.
هیچ بلیتی را از حافظه موقت مبدأ به حافظه موقت هدف کپی نمی‌کند. صرفاً یک حافظه موقت هدف جدید و خالی ایجاد می‌کند که نام اصالت پیش‌فرض آن با نام اصالت هدف مقداردهی اولیه شده است. توجه داشته باشید که گزینه -Z با گزینه -z مانعة‌الجمع است.
چاپ پیام‌های وضعیت را بی‌صدا و غیرفعال می‌کند.

گزینه‌های بلیت صدور بلیت (Ticket Granting Ticket):

گزینه‌های بلیت صدور بلیت تنها در صورتی اعمال می‌شوند که بلیت مناسبی برای احراز هویت کاربر مبدأ در حافظه موقت وجود نداشته باشد. در این حالت، اگر ksu طوری پیکربندی شده باشد که رمز عبور کربروس را از کاربر بپرسد (ماکروی GET_TGT_VIA_PASSWD تعریف شده باشد)، گزینه‌های مشخص‌شده هنگام دریافت بلیت صدور بلیت از کارساز کربروس اعمال خواهند شد.

(رشته مدت زمان.) طول عمر درخواستی برای بلیت را مشخص می‌کند؛ اگر این گزینه مشخص نشود، طول عمر پیش‌فرض بلیت (۱۲ ساعت) استفاده می‌شود.
(رشته مدت زمان.) مشخص می‌کند که گزینه قابل تمدید (renewable) برای بلیت درخواست شود، و طول عمر کلی مورد نظر برای بلیت را مشخص می‌کند.
مشخص می‌کند که گزینه وکالت‌پذیر (proxiable) برای بلیت درخواست شود.
مشخص می‌کند که گزینه وکالت‌پذیر (proxiable) برای بلیت درخواست نشود، حتی اگر در پیکربندی پیش‌فرض درخواست بلیت‌های وکالت‌پذیر تنظیم شده باشد.
مشخص می‌کند که گزینه انتقال‌پذیر (forwardable) برای بلیت درخواست شود.
مشخص می‌کند که گزینه انتقال‌پذیر (forwardable) برای بلیت درخواست نشود، حتی اگر در پیکربندی پیش‌فرض درخواست بلیت‌های انتقال‌پذیر تنظیم شده باشد.
دستور ksu دقیقاً همانند زمانی که بدون گزینه -e فراخوانی شده باشد عمل می‌کند، با این تفاوت که به جای اجرای پوسته هدف، دستور مشخص‌شده را اجرا می‌نماید. نمونه استفاده:
ksu bob -e ls -lag

الگوریتم مجوزدهی برای گزینه -e به شرح زیر است:

اگر کاربر مبدأ root باشد یا کاربر مبدأ با کاربر هدف برابر باشد، هیچ مجوزی بررسی نشده و دستور فوراً اجرا می‌شود. اگر شناسه کاربر مبدأ مخالف ۰ باشد و فایل ~target_user/.k5users وجود نداشته باشد، مجوزدهی رد می‌شود. در غیر این صورت، فایل ~target_user/.k5users باید مدخل مناسبی برای اصالت هدف داشته باشد تا مجاز شناخته شود.

قالب فایل k5users.:

یک مدخل اصالت در هر خط که ممکن است فهرستی از دستورات مجاز برای اجرا توسط آن اصالت به دنبال آن بیاید. یک نام اصالت که به دنبال آن علامت ستاره (*) آمده باشد بدان معناست که کاربر مجاز به اجرای هر دستوری است. بنابراین در مثال زیر:

jqpublic@USC.EDU ls mail /local/kerberos/klist
jqpublic/secure@USC.EDU *
jqpublic/admin@USC.EDU

اصالت jqpublic@USC.EDU تنها مجاز به اجرای دستورهای ls، mail و klist است. اصالت jqpublic/secure@USC.EDU مجاز به اجرای هر دستوری می‌باشد. اصالت jqpublic/admin@USC.EDU مجاز به اجرای هیچ دستوری نیست. توجه فرمایید که jqpublic/admin@USC.EDU مجاز به اجرای پوسته هدف (حالت عادی ksu بدون گزینه -e) است اما jqpublic@USC.EDU مجاز به اجرای آن نیست.

دستورات فهرست‌شده پس از نام اصالت باید مسیر کامل یا فقط نام برنامه باشند. در حالت دوم، متغیر CMD_PATH که مسیر برنامه‌های مجاز را مشخص می‌کند باید در زمان کامپایل ksu تعریف شده باشد. کدام دستور اجرا می‌شود؟

اگر کاربر مبدأ root باشد یا کاربر هدف همان کاربر مبدأ باشد یا کاربر مجاز به اجرای هر دستوری باشد (مدخل *)، در این صورت دستور می‌تواند مسیر کامل یا نسبی منتهی به برنامه هدف باشد. در غیر این صورت، کاربر باید یا مسیر کامل یا صرفاً نام برنامه را مشخص کند.

آرگومان‌هایی که باید به پوسته هدف ارسال شوند را مشخص می‌کند. توجه داشته باشید که تمام پرچم‌ها و پارامترهای پس از -a به پوسته فرستاده می‌شوند، بنابراین تمامی گزینه‌های مربوط به ksu باید پیش از -a قرار گیرند.

از گزینه -a می‌توان برای شبیه‌سازی گزینه -e به صورت زیر استفاده کرد:

-a -c [command [arguments]]

سوئیچ -c توسط پوسته برای اجرای دستور تفسیر می‌شود.

برنامه ksu می‌تواند با چهار فلگ زیر کامپایل شود:

در صورتی که هیچ بلیت مناسبی در حافظه موقت مبدأ یافت نشود، رمز عبور کربروس از کاربر پرسیده خواهد شد. سپس از این رمز عبور برای دریافت یک بلیت صدور بلیت (TGT) از کارساز کربروس استفاده می‌شود. خطر پیکربندی ksu با این ماکرو این است که اگر کاربر مبدأ از راه دور وارد شده باشد و کانال امنی نداشته باشد، رمز عبور ممکن است افشا شود.
در زمان تفکیک و تعیین نام اصالت پیش‌فرض، گزینه PRINC_LOOK_AHEAD به ksu امکان می‌دهد نام‌های اصالت را در فایل k5users. همان‌طور که در بخش گزینه‌ها شرح داده شد (گزینه -n) جستجو کند.
فهرستی از دایرکتوری‌های حاوی برنامه‌هایی را مشخص می‌کند که کاربران مجاز به اجرای آن‌ها هستند (از طریق فایل k5users.).
اگر کاربر مبدأ غیر از root باشد، ksu اصرار دارد که پوسته فراخوانی‌شده کاربر هدف حتماً یک «پوسته قانونی» (legal shell) باشد. تابع getusershell(3) برای دریافت نام پوسته‌های قانونی فراخوانی می‌شود. توجه داشته باشید که پوسته کاربر هدف از فایل passwd به دست می‌آید.

نمونه پیکربندی:

KSU_OPTS = -DGET_TGT_VIA_PASSWD -DPRINC_LOOK_AHEAD -DCMD_PATH='"/bin /usr/ucb /local/bin"

مالکیت ksu باید متعلق به root بوده و بیت setuid آن فعال باشد (SUID).

برنامه ksu تلاش می‌کند همانند تلنت یا rlogin مجهز به کربروس، بلیتی برای کارساز نهایی به دست آورد. بنابراین، باید مدخلی برای کارساز در پایگاه داده کربروس وجود داشته باشد (برای نمونه، host/nii.isi.edu@ISI.EDU). همچنین فایل keytab باید در مکان مناسب قرار داشته باشد.

دستور ksu تمامی بلیت‌های منقضی‌شده را از حافظه موقت مبدأ پاک می‌کند.

گنادی (آری) مدوینسکی (Gennady (Ari) Medvinsky)

برای شرح متغیرهای محیطی کربروس به kerberos(7) مراجعه کنید.

kerberos(7), kinit(1)

مؤسسه فناوری ماساچوست (MIT)

1985-2024, MIT

مه ۲۰۲۵ krb5