| GSSD(8) | دستورات مدیریت سیستم | GSSD(8) |
نام (NAME)
gssd, rpc.gssd - دیمن امنیتی RPCSEC_GSS برای کلاینت NFS
خلاصه دستور (SYNOPSIS)
rpc.gssd [-DfMnlvrHC] [-k keytab] [-p pipefsdir] [-d ccachedir] [-t timeout] [-T timeout] [-U timeout] [-R realm]
مقدمه (INTRODUCTION)
پروتکل RPCSEC_GSS، تعریفشده در RFC 5403، برای ارائه امنیت قوی برای پروتکلهای مبتنی بر RPC مانند NFS استفاده میشود.
پیش از تبادل درخواستهای RPC با استفاده از RPCSEC_GSS، یک کلاینت RPC باید یک بستر امنیتی (security context) GSS برقرار کند. یک بستر امنیتی، وضعیتی مشترک در هر دو سمت انتقال شبکه است که سرویسهای امنیتی GSS-API را فعال میسازد.
بسترهای امنیتی با استفاده از اعتبارنامههای امنیتی (security credentials) ایجاد میشوند. یک اعتبارنامه دسترسی موقت به یک سرویس امن شبکه را اعطا میکند، همانطور که یک بلیط قطار دسترسی موقت برای استفاده از خدمات راهآهن را فراهم میسازد.
یک کاربر معمولاً با ارائه گذرواژه به دستور kinit(1) یا از طریق کتابخانه PAM در زمان ورود به سیستم، اعتبارنامه دریافت میکند. اعتبارنامهای که با یک شناسه اصلی کاربر (user principal) به دست میآید، به عنوان اعتبارنامه کاربر (user credential) شناخته میشود (برای اطلاعات بیشتر درباره شناسههای اصلی، kerberos(1) را ببینید).
برخی از عملیاتها به اعتبارنامهای نیاز دارند که نماینده هیچ کاربر خاصی نبوده یا نماینده خود میزبان است. این نوع اعتبارنامه را اعتبارنامه ماشین (machine credential) مینامند.
یک میزبان اعتبارنامه ماشین خود را با استفاده از یک شناسه اصلی سرویس (service principal) ایجاد میکند که گذرواژه رمزگذاریشده آن در فایلی محلی به نام keytab ذخیره شده است. اعتبارنامه ماشین تا زمانی که میزبان بتواند آن را تمدید کند، بدون دخالت کاربر معتبر باقی میماند.
پس از دریافت، اعتبارنامهها معمولاً در فایلهای موقت محلی با مسیرهای شناختهشده ذخیره میشوند.
توضیحات (DESCRIPTION)
دیمن rpc.gssd امنیت و نشستهای احراز هویت GSS-API (مانند کربروس Kerberos) را برای کلاینتهای NFS پیادهسازی میکند.
برای ایجاد بسترهای امنیتی GSS با استفاده از این فایلهای اعتبارنامه، کلاینت RPC کرنل لینوکس به یک دیمن در فضای کاربری به نام rpc.gssd وابسته است. دیمن rpc.gssd از سیستمفایل rpc_pipefs برای ارتباط با کرنل استفاده میکند.
اعتبارنامههای کاربر (User Credentials)
هنگامی که یک کاربر با دستوری مانند kinit(1) احراز هویت میکند، اعتبارنامه حاصل در فایلی با نام مشخص که بر اساس UID کاربر ساخته میشود، ذخیره میگردد.
برای تعامل با یک سرور NFS از طرف یک کاربر احراز هویتشده خاص با کربروس، کلاینت RPC در کرنل لینوکس از rpc.gssd درخواست میکند تا یک بستر امنیتی را با اعتبارنامه موجود در فایل اعتبارنامه آن کاربر مقداردهی اولیه کند.
معمولاً فایلهای اعتبارنامه در /tmp قرار میگیرند. با این حال، rpc.gssd میتواند در بیش از یک دایرکتوری به دنبال فایلهای اعتبارنامه بگردد. برای جزئیات به توضیحات گزینه -d مراجعه کنید.
اعتبارنامههای ماشین (Machine Credentials)
rpc.gssd کیتب پیشفرض، یعنی /etc/krb5.keytab را به ترتیب زیر برای یافتن شناسه اصلی و گذرواژه جهت استفاده در ایجاد اعتبارنامه ماشین جستجو میکند. در این جستجو، rpc.gssd عبارات <hostname> و <REALM> را با نام میزبان محلی سیستم و قلمرو کربروس جایگزین میکند.
<HOSTNAME>$@<REALM>
root/<hostname>@<REALM>
nfs/<hostname>@<REALM>
host/<hostname>@<REALM>
root/<anyname>@<REALM>
nfs/<anyname>@<REALM>
host/<anyname>@<REALM>
اگر rpc.gssd شناسه اصلی سرویسی مطابق با نام میزبان محلی پیدا نکند (مثلاً اگر DHCP نام میزبان محلی را به صورت پویا اختصاص دهد)، یکی از ورودیهای <anyname> را انتخاب میکند. قابلیت <anyname> استفاده از یک کیتب یکسان را روی چندین سیستم امکانپذیر میسازد. با این حال، استفاده از یک شناسه اصلی سرویس یکسان برای ایجاد اعتبارنامه ماشین روی چندین میزبان میتواند خطرات امنیتی ناخواسته ایجاد کند و بنابراین توصیه نمیشود.
توجه داشته باشید که <HOSTNAME>$@<REALM> یک شناسه اصلی کاربر است که امکان NFS مجهز به کربروس را هنگامی که سیستم محلی با استفاده از Samba به یک دامنه اکتیو دایرکتوری ملحق شده است، فراهم میکند. کیتب گذرواژه این شناسه اصلی را ارائه میدهد.
اگر /etc/krb5.keytab وجود نداشته باشد یا یکی از این شناسههای اصلی را ارائه ندهد، میتوانید با استفاده از گزینه -k یک کیتب دیگر مشخص کنید.
اعتبارنامهها برای UID 0
کاربر ریشه (UID 0) یک مورد خاص است. به طور پیشفرض rpc.gssd از اعتبارنامههای ماشین سیستم برای دسترسیهای UID 0 که نیاز به احراز هویت GSS دارند استفاده میکند. این کار امتیازات کاربر ریشه را هنگام دسترسی به منابع شبکهای که نیاز به احراز هویت دارند محدود میکند.
اگر میخواهید کاربر ریشه را مجبور کنید به جای استفاده از اعتبارنامه ماشین سیستم محلی، اعتبارنامه کاربری دریافت کند، گزینه -n را هنگام شروع rpc.gssd مشخص کنید.
هنگامی که -n مشخص شده باشد، کرنل همچنان برای عملیاتهای NFSv4 که وضعیت را مدیریت میکنند (مانند SETCLIENTID یا RENEW)، درخواست بستر GSS ایجادشده با اعتبارنامه ماشین میکند. اگر rpc.gssd نتواند اعتبارنامه ماشین به دست آورد (مثلاً سیستم محلی کیتب نداشته باشد)، عملیاتهای NFSv4 که به اعتبارنامه ماشین نیاز دارند با شکست مواجه خواهند شد.
انواع رمزگذاری (Encryption types)
مدیر قلمرو (realm) میتواند کلیدهای کدگذاریشده با انواع مختلف رمزگذاری را به کیتب سیستم محلی اضافه کند. برای نمونه، یک شناسه اصلی host/ ممکن است کلیدهایی برای انواع رمزگذاری aes256-cts-hmac-sha1-96، aes128-cts-hmac-sha1-96، des3-cbc-sha1 و arcfour-hmac داشته باشد. این به rpc.gssd اجازه میدهد تا نوع رمزگذاری مناسبی را که سرور NFS مقصد پشتیبانی میکند انتخاب کند.
این انواع رمزگذاری قویتر از رمزگذاری قدیمی تک-DES هستند. برای سازگاری در محیطهایی که سرورها فقط از انواع رمزگذاری ضعیف پشتیبانی میکنند، میتوانید کلاینت خود را محدود کنید که تنها از انواع رمزگذاری تک-DES استفاده کند؛ این کار با تعیین گزینه -l هنگام شروع rpc.gssd انجام میشود.
گزینهها (OPTIONS)
- -D
- نام سروری که برای احراز هویت به GSSAPI ارسال میشود، معمولاً دقیقاً همان نام درخواستشده است؛ مثلاً برای NFS، این نام سرور در درخواست مونت "servername:/path" است. تنها در صورتی که این نام سرور یک آدرس IP (نسخه ۴ یا ۶) یا یک نام فاقد صلاحیت کامل (بدون نقطه) به نظر برسد، یک جستجوی معکوس DNS برای دریافت نام استاندارد (canonical) سرور انجام خواهد شد.
- اگر -D حاضر باشد، یک جستجوی معکوس DNS همیشه استفاده خواهد شد، حتی اگر نام سرور شبیه به یک نام استاندارد به نظر برسد. بنابراین اگر نامهای دارای صلاحیت ناقص یا غیراستاندارد به طور مرتب استفاده میشوند، به آن نیاز است.
- استفاده از -D میتواند یک آسیبپذیری امنیتی ایجاد کند، بنابراین توصیه میشود که از -D استفاده نشود و هنگام درخواست سرویسها همیشه از نامهای استاندارد استفاده شود.
- -f
- اجرای rpc.gssd در پیشزمینه و ارسال خروجی به stderr (به جای syslogd).
- -n
- هنگامی که مشخص شود، UID 0 مجبور میشود اعتبارنامههای کاربری دریافت کند که به جای اعتبارنامههای ماشین سیستم محلی استفاده میشوند.
- -k keytab
- به rpc.gssd میگوید که از کلیدهای موجود در keytab برای دریافت اعتبارنامههای ماشین استفاده کند. مقدار پیشفرض /etc/krb5.keytab است.
- -l
- هنگامی که مشخص شود، نشستهای rpc.gssd را به انواع رمزگذاری ضعیف مانند des-cbc-crc محدود میکند. این گزینه تنها زمانی در دسترس است که کتابخانه Kerberos سیستم محلی از انواع رمزگذاری قابل تنظیم پشتیبانی کند.
- -p path
- به rpc.gssd میگوید که سیستمفایل rpc_pipefs را در کجا جستجو کند. مقدار پیشفرض /var/lib/nfs/rpc_pipefs است.
- -d search-path
- این گزینه فهرستی از دایرکتوریهای جداشده با دونقطه (کولون) را مشخص میکند که rpc.gssd در آنها به دنبال فایلهای اعتبارنامه میگردد. مقدار پیشفرض /tmp:/run/user/%U است. توالی نویسه "%U" میتواند برای جایگزینی UID کاربری که اعتبارنامههایش در حال جستجو است مشخص شود.
- -M
- به طور پیشفرض، اعتبارنامههای ماشین در فایلهایی در اولین دایرکتوری در مسیر جستجوی دایرکتوری اعتبارنامه ذخیره میشوند (گزینه -d را ببینید). هنگامی که -M تنظیم شود، rpc.gssd اعتبارنامههای ماشین را در حافظه ذخیره میکند.
- -v
- میزان جزئیات خروجی را افزایش میدهد (میتواند چندین بار مشخص شود).
- -r
- اگر کتابخانه RPCSEC_GSS از تنظیم سطح دیباگ پشتیبانی کند، میزان جزئیات خروجی را افزایش میدهد (میتواند چندین بار مشخص شود).
- -R realm
- بلیطهای کربروس از این realm هنگام اسکن فایلهای حافظه پنهان اعتبارنامه موجود برای ایجاد یک بستر ترجیح داده میشوند. به طور پیشفرض، قلمرو پیشفرض طبق پیکربندی در فایل تنظیمات کربروس ترجیح داده میشود.
- -t timeout
- مهلت زمانی (بر حسب ثانیه) برای بسترهای GSS کرنل. این گزینه به شما امکان میدهد مذاکره مجدد برای بسترهای جدید کرنل را پس از timeout ثانیه اجباری کنید، که امکان تغییر مکرر بلیطها و هویتهای کربروس را فراهم میسازد. حالت پیشفرض بدون مهلت زمانی صریح است، به این معنی که بستر کرنل به اندازه طول عمر بلیط سرویس کربروس استفادهشده در ایجاد آن زنده خواهد ماند.
- -T timeout
- مهلت زمانی (بر حسب ثانیه) برای ایجاد یک اتصال RPC با سرور در حین ایجاد یک بستر احراز هویتشده gss برای یک کاربر. مهلت زمانی پیشفرض روی ۵ ثانیه تنظیم شده است. اگر پیامهایی مانند "WARNING: can't create tcp rpc_clnt to server %servername% for user with uid %uid%: RPC: Remote system error - Connection timed out" دریافت میکنید، باید افزایش این مهلت زمانی را در نظر بگیرید.
- -U timeout
- مهلت زمانی (بر حسب ثانیه) برای ریسههای upcall. ریسههایی که اجرای آنها بیش از timeout ثانیه طول بکشد باعث ثبت پیام خطا در لاگ میشوند. مهلت زمانی پیشفرض ۳۰ ثانیه است. حداقل مقدار ۵ ثانیه و حداکثر ۶۰۰ ثانیه است.
- -C
- علاوه بر ثبت یک پیام خطا برای ریسههایی که مهلت زمانی آنها تمام شده است، ریسه لغو خواهد شد و یک خطای -ETIMEDOUT به کرنل گزارش داده میشود.
- -H
- از تنظیم HOME$ به "/" جلوگیری میکند. این کار به rpc.gssd اجازه میدهد تا فایلهای k5identity اختصاصی هر کاربر را بخواند، به جای اینکه تلاش کند k5identity./ را برای هر کاربر بخواند.
- اگر -H تنظیم نشود، rpc.gssd از اولین تطابق یافتشده در /var/kerberos/krb5/user/$EUID/client.keytab استفاده میکند و از شناسه اصلی مبتنی بر پارامترهای میزبان و/یا سرویس فهرستشده در HOME/.k5identity$ استفاده نخواهد کرد.
فایل پیکربندی (CONFIGURATION FILE)
بسیاری از گزینههایی که میتوان در خط فرمان تنظیم کرد، از طریق مقادیر تعیینشده در بخش [gssd] فایل پیکربندی /etc/nfs.conf نیز قابل کنترل هستند. مقادیر شناختهشده شامل موارد زیر است:
- verbosity
- مقداری معادل با تعداد -v.
- rpc-verbosity
- مقداری معادل با تعداد -r.
- use-memcache
- یک پرچم بولی معادل با -M.
- use-machine-creds
- یک پرچم بولی. تنظیم روی false معادل تعیین فلگ -n است.
- avoid-dns
- تنظیم روی false معادل تعیین فلگ -D است.
- limit-to-legacy-enctypes
- معادل با -l.
- allowed-enctypes
- به شما امکان میدهد rpc.gssd را به استفاده از زیرمجموعهای از انواع رمزگذاری مجاز توسط کرنل و کتابخانههای krb5 محدود کنید. این ویژگی برای مثال در صورتی مفید است که بخواهید با یک سرور NFS کار کنید که از انواع رمزگذاری جدیدتر SHA2 و Camellia پشتیبانی نمیکند. این گزینه فایل پیکربندی معادل خط فرمانی ندارد.
- context-timeout
- معادل با -t.
- rpc-timeout
- معادل با -T.
- keytab-file
- معادل با -k.
- cred-cache-directory
- معادل با -d.
- preferred-realm
- معادل با -R.
- upcall-timeout
- معادل با -U.
- cancel-timed-out-upcalls
- تنظیم روی true معادل تعیین فلگ -C است.
- set-home
- تنظیم روی false معادل تعیین فلگ -H است.
- use-gss-proxy
- تنظیم این مقدار به 1 به gssproxy(8) اجازه میدهد تا فراخوانیهای GSSAPI را رهگیری کرده و به جای rpc.gssd به آنها سرویس دهد؛ این قابلیت امکاناتی مانند مقداردهی اولیه کلاینت مبتنی بر کیتب را فعال میکند. توجه داشته باشید که این موضوع ارتباطی با کارکردی که gssproxy(8) از طرف سرور NFS ارائه میدهد ندارد. برای اطلاعات بیشتر، https://github.com/gssapi/gssproxy/blob/main/docs/NFS.md#nfs-client را ببینید.
علاوه بر این، مقدار زیر از بخش [general] شناسایی میشود:
- pipefs-directory
- معادل با -p.
همچنین ببینید (SEE ALSO)
rpc.svcgssd(8), kerberos(1), kinit(1), krb5.conf(5), gssproxy(8)
نویسندگان (AUTHORS)
Dug Song <dugsong@umich.edu>
Andy Adamson <andros@umich.edu>
Marius Aamodt Eriksen <marius@umich.edu>
J. Bruce Fields <bfields@umich.edu>
| مه ۲۰۲۵ | nfs-utils |