MUNGED(8) MUNGE Uid 'N' Gid Emporium MUNGED(8)

munged - دیمن MUNGE

munged [گزینه]...

دیمن munged مسئول احراز هویت کلاینت‌های محلی MUNGE و پاسخ‌گویی به درخواست‌های رمزگذاری (encode) و رمزگشایی (decode) گواهی‌های اعتباری آن‌ها است.

تمام دیمن‌های munged درون یک قلمرو امنیتی (security realm) یک کلید مشترک دارند. انتظار می‌رود تمام میزبان‌های داخل این قلمرو دارای کاربران/UIDها و گروه‌ها/GIDهای مشترک باشند. این کلید برای حفاظت رمزنگاری‌شده از گواهی‌های اعتباری استفاده می‌شود؛ این کلید با دستور mungekey ایجاد می‌گردد.

هنگامی که یک گواهی اعتباری ایجاد می‌شود، munged فراداده‌هایی (metadata) را درون آن تعبیه می‌کند که شامل UID و GID مؤثر کلاینت درخواست‌کننده (طبق تشخیص munged) و زمان جاری (بر اساس ساعت محلی) است. سپس داده‌ها را فشرده‌سازی می‌کند، یک کد اصالت‌سنجی پیام (MAC) محاسبه می‌نماید، داده‌ها را رمزگذاری کرده و نتیجه را با کدگذاری Base64 درمی‌آورد و در نهایت گواهی اعتباری را به کلاینت بازمی‌گرداند.

هنگامی که یک گواهی اعتباری اعتبارسنجی می‌شود، munged ابتدا کد اصالت‌سنجی پیام را بررسی می‌کند تا مطمئن شود گواهی دستکاری نشده باشد. سپس، محدودیت‌های UID/GID تعبیه‌شده را بررسی می‌کند تا مشخص شود آیا کلاینت درخواست‌کننده مجاز به رمزگشایی آن است یا خیر. پس از آن، زمان رمزگذاری تعبیه‌شده را با زمان جاری مقایسه می‌کند؛ اگر این اختلاف از طول عمر مجاز (TTL) تعبیه‌شده فراتر رود، گواهی اعتباری منقضی شده است. در نهایت، بررسی می‌کند که آیا این گواهی قبلاً روی این میزبان رمزگشایی شده است یا خیر؛ در این صورت، گواهی بازپخش (replayed) شده است. اگر تمام بررسی‌ها با موفقیت انجام شوند، فراداده و بار داده (payload) گواهی اعتباری به کلاینت بازگردانده می‌شوند.

نمایش خلاصه‌ای از گزینه‌های خط فرمان.
نمایش اطلاعات مجوز.
نمایش اطلاعات نسخه.
اجبار دیمن به اجرا در صورت امکان. این گزینه هشدارهای مربوط به وجود سوکت دامنه محلی از قبل، کمبود آنتروپی برای PRNG، و مجوزهای دسترسی ناامن فایل/دایرکتوری را نادیده می‌گیرد. با احتیاط استفاده شود زیرا نادیده گرفتن این هشدارها می‌تواند امنیت را تحت تأثیر قرار دهد.
اجرای دیمن در پیش‌زمینه (foreground).
قفل کردن صفحات در حافظه جهت جلوگیری از انتقال (swap) صفحات دیمن به دیسک. این کار می‌تواند از تأخیرهای احراز هویت تحت فشار شدید حافظه جلوگیری کند. نیازمند محدودیت‌های کافی برای قفل حافظه است. بخش قفل‌کردن حافظه (MEMORY LOCKING) در زیر را ببینید.
متوقف کردن دیمنی که به سوکت متصل است و انتظار برای خاموش شدن کامل آن. برای هدف قرار دادن دیمنی که به یک مسیر سوکت غیرپیش‌فرض متصل است، از این گزینه همراه با --socket استفاده کنید. در صورتی که دیمن مشخص‌شده با موفقیت متوقف شود، این گزینه با وضعیت خروج صفر خارج می‌شود، در غیر این صورت وضعیت خروج غیرصفر برمی‌گرداند.
تعیین سوکت دامنه محلی برای برقراری ارتباط با کلاینت‌ها.
نمایش گزارش‌های مشروح و تفصیلی.
تعیین یک دایرکتوری جایگزین که دیمن در آن پایپ مورد استفاده برای احراز هویت کلاینت‌ها را ایجاد می‌کند. سطح دسترسی توصیه‌شده برای این دایرکتوری 0711 است. این گزینه تنها روی پلتفرم‌هایی معتبر است که در آن‌ها احراز هویت کلاینت از طریق سازوکار انتقال توصیف‌کننده فایل انجام می‌شود.
تعیین یک دایرکتوری جایگزین که کلاینت‌ها در آن فایل مورد استفاده برای احراز هویت خود در برابر دیمن را ایجاد می‌کنند. سطح دسترسی توصیه‌شده برای این دایرکتوری 1733 است. این گزینه تنها روی پلتفرم‌هایی معتبر است که در آن‌ها احراز هویت کلاینت از طریق سازوکار انتقال توصیف‌کننده فایل انجام می‌شود.
غیرفعال کردن تایمرهای دوره‌ای به منظور کاهش نویز در حین بنچ‌مارک و محک‌زنی. این گزینه بر مخزن آنتروپی PRNG، نگاشت گروه‌های تکمیلی، و هش بازپخش گواهی‌های اعتباری تأثیر می‌گذارد. هنگام اجرا در محیط عملیاتی این گزینه را فعال نکنید.
تعیین این‌که آیا زمان آخرین تغییر فایل /etc/group باید پیش از به‌روزرسانی نگاشت عضویت در گروه‌های تکمیلی بررسی شود یا خیر. اگر این مقدار غیرصفر باشد، بررسی فعال می‌شود و نگاشت تنها در صورتی به‌روزرسانی خواهد شد که فایل از زمان آخرین به‌روزرسانی تغییر کرده باشد.
تعیین فاصله زمانی (به ثانیه) بین به‌روزرسانی‌های نگاشت عضویت در گروه‌های تکمیلی؛ این نگاشت هنگام اعمال محدودیت بر روی گواهی‌های اعتباری بر اساس GID استفاده می‌شود. مقدار 0 باعث می‌شود که نگاشت در ابتدا محاسبه شود اما هرگز به‌روزرسانی نگردد (مگر اینکه توسط SIGHUP فعال شود). مقدار -1 باعث غیرفعال شدن آن می‌شود.
تعیین یک مسیر جایگزین برای فایل کلید.
تعیین حد صف انتظار گوش‌دادن (listen backlog) سوکت؛ توجه داشته باشید که هسته ممکن است حد کمتری را اعمال کند. مقدار 0 از پیش‌فرض نرم‌افزار استفاده می‌کند. مقدار -1 نشان‌دهنده SOMAXCONN، یعنی حداکثر طول صف انتظار گوش‌دادن تعریف‌شده در <sys/socket.h> است.
تعیین یک مسیر جایگزین برای فایل لاگ (گزارش وقایع).
تعیین حداکثر طول عمر (TTL به ثانیه) برای گواهی‌های اعتباری. این مقدار سقف TTL را هم در هنگام رمزگذاری و هم رمزگشایی تعیین می‌کند. حد بالای تعریف‌شده در کد ۳۶۰۰ ثانیه (۱ ساعت) است؛ مقدار پیش‌فرض ۳۶۰۰ می‌باشد. کاهش این مقدار، حداکثر زمان نگهداری ورودی‌های حافظه موقت بازپخش را محدود می‌کند، که در صورت امکان همگام نگه‌داشتن ساعت‌های درون قلمرو MUNGE با کمترین انحراف، راهکاری مناسب است.
تعیین تعداد ریسمان‌ها (threads) جهت ایجاد برای پردازش درخواست‌های گواهی اعتباری.
تعیین آدرس مبدأ که در فراداده گواهی اعتباری رمزگذاری می‌شود. این مقدار می‌تواند نام میزبان یا آدرس IPv4 باشد؛ همچنین می‌تواند نام یک رابط شبکه محلی باشد که در این صورت نخستین آدرس IPv4 یافت‌شده و اختصاص‌یافته به آن رابط استفاده خواهد شد. مقدار پیش‌فرض، آدرس IPv4 مربوط به نام میزبان بازگردانده‌شده توسط gethostname() است. ناتوانی در تحلیل آدرس منجر به بروز خطا خواهد شد؛ در صورت نادیده‌گیری، مبدأ بر روی آدرس null تنظیم می‌شود.
تعیین یک مسیر جایگزین برای ذخیره شناسه فرایند (PID) دیمن.
تعیین یک مسیر جایگزین برای فایل بذر (seed) تولیدکننده اعداد شبه‌تصادفی (PRNG).
هدایت پیام‌های لاگ به syslog هنگام اجرای دیمن در پس‌زمینه.
تعیین نام گروه یا GID مربوط به «گروه معتمد» (trusted group). این گزینه برای بررسی مجوزهای دسترسی در ساختار سلسله‌مراتبی دایرکتوری‌ها استفاده می‌شود. دایرکتوری‌هایی که دارای مجوز نوشتن برای گروه هستند در صورتی مجاز شناخته می‌شوند که متعلق به گروه معتمد باشند (یا بیت چسبنده / sticky bit تنظیم شده باشد).

گزینه --mlockall صفحات حافظه را در حافظه اصلی قفل می‌کند تا از انتقال آن‌ها به فضای مبادله (swap) تحت فشار حافظه جلوگیری شود.

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

در بسیاری از سیستم‌ها مقدار پیش‌فرض حد مجاز قفل حافظه ناکافی است. حداقل ۱۶ مگابایت برای عملکرد پایه مورد نیاز است؛ مقدار ۶۴ تا ۲۵۶ مگابایت برای پیکربندی‌های معمول توصیه می‌شود. برای افزایش آن می‌توانید از یکی از روش‌های زیر استفاده کنید:

فایل /etc/systemd/system/munge.service.d/memlock.conf را ایجاد کنید:

[Service]
LimitMEMLOCK=256M

سپس سرویس‌ها را مجدداً بارگذاری کرده و ری‌استارت کنید:

systemctl daemon-reload
systemctl restart munge.service

خطوط زیر را به فایل /etc/security/limits.conf اضافه کنید (مقادیر به کیلوبایت):

munge  soft  memlock  262144
munge  hard  memlock  262144

در سیستم‌های مبتنی بر systemd، محدودیت‌های PAM برای سرویس‌ها نادیده گرفته می‌شوند. در عوض از پیکربندی systemd استفاده کنید.

پیش از اجرای munged، مقدار حد مجاز را تنظیم کنید (مقدار به کیلوبایت):

ulimit -l 262144
munged --mlockall

حافظه موقت بازپخش نامحدود است و همگام با نرخ رمزگشایی گواهی‌های اعتباری رشد می‌کند. ورودی‌های بازپخش تا زمان انقضای گواهی‌ها بر اساس طول عمر (TTL) آن‌ها نگهداری می‌شوند. گواهی‌ها به صورت پیش‌فرض دارای TTL به مدت ۵ دقیقه هستند؛ کلاینت‌ها می‌توانند تا حداکثر TTL پیکربندی‌شده روی دیمن munged رمزگذارنده (به طور پیش‌فرض ۱ ساعت، قابل تنظیم از طریق --max-ttl) را مشخص کنند. در طول رمزگشایی، TTL گواهی به حداکثر TTL دیمن munged رمزگشا محدود می‌شود. هنگامی که --mlockall مشخص شده باشد، ورودی‌های بازپخش در حافظه فیزیکی قفل می‌شوند.

در سیستم‌هایی با کاربران محلی غیرقابل‌اعتماد، یک مهاجم می‌تواند گواهی‌هایی با حداکثر TTL (به طور پیش‌فرض ۱ ساعت) رمزگذاری کرده و آن‌ها را مکرراً رمزگشایی کند تا حافظه موقت بازپخش پر شود. پس از رسیدن به سقف محدودیت قفل حافظه، munged احتمالاً در هنگام تلاش برای تخصیص حافظه بیشتر متوقف خواهد شد که منجر به بروز وضعیت انکار سرویس (DoS) می‌گردد.

از این گزینه تنها در سیستم‌های معتمد که کاربران محلی کنترل شده‌اند استفاده کنید، یا حد مجاز قفل حافظه را به جای نامحدود، روی یک حد بالای منطقی تنظیم نمایید. میزان استفاده از حافظه قفل‌شده munged را در سیستم‌های پرترافیک مانیتور کنید تا اطمینان حاصل شود که در شرایط کارکرد عادی به این حد نزدیک نمی‌شود. کاهش --max-ttl می‌تواند رشد حافظه موقت بازپخش را محدود سازد اما نیازمند همگام‌سازی دقیق ساعت‌ها است.

به‌روزرسانی فوری نگاشت عضویت در گروه‌های تکمیلی به جای انتظار برای به‌روزرسانی زمان‌بندی‌شده بعدی؛ این نگاشت هنگام اعمال محدودیت بر روی گواهی‌های اعتباری بر اساس GID استفاده می‌شود.
پایان دادن به فعالیت دیمن.

تمامی ساعت‌ها درون یک قلمرو امنیتی باید در محدوده تنظیمات طول عمر (TTL) گواهی‌های اعتباری با یکدیگر همگام باشند.

در حالی که munged از رمزگشایی مجدد یک گواهی اعتباری مشخص بر روی یک میزبان خاص جلوگیری می‌کند، هیچ عاملی مانع از رمزگشایی یک گواهی اعتباری پیش از انقضای آن بر روی چندین میزبان مختلف درون همان قلمرو امنیتی نمی‌شود.

کریس دانلپ (Chris Dunlap) <cdunlap@llnl.gov>

حق نشر © 2007-2025 شرکت امنیت ملی لارنس لیورمور (Lawrence Livermore National Security, LLC).
حق نشر © 2002-2007 هیئت امنای دانشگاه کالیفرنیا (The Regents of the University of California).

پروژه MUNGE یک نرم‌افزار آزاد است: شما می‌توانید آن را تحت شرایط مجوز عمومی گنو (GNU General Public License) همان‌طور که توسط بنیاد نرم‌افزار آزاد منتشر شده است، چه نسخه ۳ مجوز و چه (به انتخاب خودتان) هر نسخه پس از آن، بازتوزیع کرده و/یا تغییر دهید.

همچنین در مورد کتابخانه MUNGE (libmunge)، شما می‌توانید آن را تحت شرایط مجوز عمومی کمتر فراگیر گنو (GNU Lesser General Public License) منتشر شده توسط بنیاد نرم‌افزار آزاد، چه نسخه ۳ مجوز و چه (به انتخاب خودتان) هر نسخه پس از آن، بازتوزیع کرده و/یا تغییر دهید.

munge(1), remunge(1), unmunge(1), munge(3), munge_ctx(3), munge_enum(3), munge(7), mungekey(8).

https://github.com/dun/munge

2026-02-10 munge-0.5.18