PAM_FAILLOCK(8) راهنمای لینوکس PAM PAM_FAILLOCK(8)

pam_faillock - ماژول PAM برای قفل کردن حساب‌ها پس از تلاش‌های ناموفق ورود

auth ... pam_faillock.so {preauth|authfail|authsucc} [conf=/path/to/config-file] [dir=/path/to/tally-directory] [even_deny_root] [deny=n] [fail_interval=n] [unlock_time=n] [root_unlock_time=n] [admin_group=name] [audit] [silent] [no_log_info]

account ... pam_faillock.so [dir=/path/to/tally-directory] [no_log_info]

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

به‌طور معمول، تلاش‌های ناموفق برای احراز هویت root باعث مسدود شدن حساب کاربری ریشه (root) نخواهد شد، تا از حملات منع خدمت (denial-of-service) جلوگیری شود؛ اگر به کاربران شما دسترسی شل داده نشده باشد و root تنها بتواند از طریق su یا در کنسول محلی دستگاه (نه telnet/rsh و غیره) وارد شود، این رفتار ایمن است.

{preauth|authfail|authsucc}

این آرگومان باید متناسب با موقعیت قرارگیری این نمونه از ماژول در پشته PAM تنظیم شود.

آرگومان preauth باید هنگامی استفاده شود که ماژول قبل از ماژول‌های درخواست‌کننده اطلاعات هویتی کاربر (مانند رمز عبور) فراخوانی می‌شود. ماژول فقط بررسی می‌کند که آیا به دلیل تعداد غیرعادی دفعات متوالی احراز هویت ناموفق اخیر، باید از دسترسی کاربر به سرویس جلوگیری شود یا خیر. این فراخوانی در صورت استفاده از authsucc اختیاری است.

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

آرگومان authsucc باید هنگامی استفاده شود که ماژول پس از ماژول‌های تعیین‌کننده نتیجه احراز هویت و پس از موفقیت آن‌ها فراخوانی شود. در این حالت، ماژول رکورد شکست‌ها را در پرونده شمارش مربوط به کاربر پاک می‌کند، مگر آنکه کاربر قبلاً مسدود شده باشد؛ در غیر این صورت، خطای احراز هویت بازمی‌گرداند. اگر این فراخوانی انجام نشود، pam_faillock تفاوتی بین تلاش‌های ناموفق متوالی و غیرمتوالی قائل نخواهد شد. در چنین حالتی باید از فراخوانی preauth استفاده شود. به دلیل پیچیدگی‌های نحوه پیکربندی پشته PAM، امکان فراخوانی pam_faillock به‌عنوان یک ماژول account نیز وجود دارد. در چنین پیکربندی‌ای، ماژول باید در مرحله preauth نیز فراخوانی شود.

conf=/path/to/config-file

استفاده از یک پرونده پیکربندی دیگر به‌جای پرونده پیش‌فرض /etc/security/faillock.conf.

گزینه‌های مربوط به پیکربندی رفتار ماژول در صفحه راهنمای faillock.conf(5) شرح داده شده‌اند. گزینه‌های مشخص‌شده در خط فرمان ماژول، مقادیر موجود در پرونده پیکربندی را بازنویسی (override) می‌کنند.

انواع ماژول auth و account ارائه شده‌اند.

PAM_AUTH_ERR

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

PAM_BUF_ERR

خطای بافر حافظه.

PAM_CONV_ERR

روش گفت‌وگو (conversation) ارائه‌شده توسط برنامه در دریافت نام کاربری ناموفق بود.

PAM_INCOMPLETE

روش گفت‌وگو (conversation) ارائه‌شده توسط برنامه مقدار PAM_CONV_AGAIN را بازگرداند.

PAM_SUCCESS

همه موارد با موفقیت انجام شد.

PAM_IGNORE

کاربر در پایگاه داده passwd وجود ندارد.

پیکربندی گزینه‌ها در خط فرمان ماژول توصیه نمی‌شود. به‌جای آن باید از /etc/security/faillock.conf استفاده شود.

پیکربندی pam_faillock در پشته PAM با پیکربندی ماژول pam_tally2 متفاوت است.

پرونده‌های جداگانه حاوی رکوردهای شکست با مالکیت همان کاربر ایجاد می‌شوند. این موضوع به ماژول pam_faillock.so اجازه می‌دهد هنگامی که از یک محافظ صفحه نمایش (screensaver) فراخوانی می‌شود نیز به‌درستی کار کند.

توجه داشته باشید که استفاده از ماژول در حالت preauth بدون تعیین گزینه silent در /etc/security/faillock.conf یا با فیلد کنترلی requisite باعث نشت اطلاعات درباره وجود یا عدم وجود حساب کاربری در سیستم می‌شود، زیرا شکست‌ها برای کاربران ناشناخته ثبت نمی‌شوند. پیام مربوط به قفل بودن حساب کاربری هرگز برای حساب‌های کاربری ناموجود نمایش داده نمی‌شود و به مهاجم اجازه می‌دهد استنباط کند که یک حساب خاص در سیستم وجود ندارد.

در اینجا دو نمونه پیکربندی احتمالی برای /etc/pam.d/login آورده شده است. این تنظیمات باعث می‌شوند pam_faillock حساب کاربری را پس از ۴ بار ورود ناموفق متوالی در طول بازه زمانی پیش‌فرض ۱۵ دقیقه قفل کند. حساب root نیز قفل خواهد شد. حساب‌ها پس از ۲۰ دقیقه به‌طور خودکار از حالت قفل خارج می‌شوند.

در اولین مثال، ماژول فقط در فاز auth فراخوانی می‌شود و ماژول هیچ اطلاعاتی درباره مسدود شدن حساب توسط pam_faillock چاپ نمی‌کند. فراخوانی preauth می‌تواند اضافه شود تا به کاربران اطلاع دهد که ورود آن‌ها توسط ماژول مسدود شده است و همچنین در چنین حالتی، احراز هویت را بدون درخواست رمز عبور متوقف کند.

نمونه پرونده /etc/security/faillock.conf:

deny=4
unlock_time=1200
silent

نمونه پرونده /etc/pam.d/config:

auth     required       pam_securetty.so
auth     required       pam_env.so
auth     required       pam_nologin.so
# optionally call: auth requisite pam_faillock.so preauth
# to display the message about account being locked
auth     [success=1 default=bad] pam_unix.so
auth     [default=die]  pam_faillock.so authfail
auth     sufficient     pam_faillock.so authsucc
auth     required       pam_deny.so
account  required       pam_unix.so
password required       pam_unix.so shadow
session  required       pam_selinux.so close
session  required       pam_loginuid.so
session  required       pam_unix.so
session  required       pam_selinux.so open

در مثال دوم، ماژول در هر دو فاز auth و account فراخوانی می‌شود و در صورتی که گزینه silent در faillock.conf مشخص نشده باشد، قفل بودن حساب را به کاربری که در حال احراز هویت است اطلاع می‌دهد.

auth     required       pam_securetty.so
auth     required       pam_env.so
auth     required       pam_nologin.so
auth     required       pam_faillock.so preauth
# optionally use requisite above if you do not want to prompt for the password
# on locked accounts
auth     sufficient     pam_unix.so
auth     [default=die]  pam_faillock.so authfail
auth     required       pam_deny.so
account  required       pam_faillock.so
# if you drop the above call to pam_faillock.so the lock will be done also
# on non-consecutive authentication failures
account  required       pam_unix.so
password required       pam_unix.so shadow
session  required       pam_selinux.so close
session  required       pam_loginuid.so
session  required       pam_unix.so
session  required       pam_selinux.so open

/var/run/faillock/*

پرونده‌های ثبت شکست‌های احراز هویت برای کاربران

نکته: این پرونده‌ها پس از راه‌اندازی مجدد در سیستم‌هایی که پوشه /var/run/faillock در آن‌ها روی حافظه مجازی سوار (mount) شده باشد، ناپدید خواهند شد. برای ذخیره‌سازی پایدار، از گزینه dir= در پرونده /etc/security/faillock.conf استفاده کنید.

/etc/security/faillock.conf

پرونده پیکربندی برای گزینه‌های pam_faillock

faillock(8), faillock.conf(5), pam.conf(5), pam.d(5), pam(8)

برنامه pam_faillock توسط Tomas Mraz نوشته شده است.

2025-06-29 Linux-PAM