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

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

pam_tally2.so [file=/path/to/counter] [onerr=[fail|succeed]] [magic_root] [even_deny_root] [deny=n] [lock_time=n] [unlock_time=n] [root_unlock_time=n] [serialize] [audit] [silent] [no_log_info] [debug]

pam_tally2 [--file /path/to/counter] [--user username] [--reset[=n]] [--quiet]

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

pam_tally2 از دو بخش تشکیل شده است: pam_tally2.so و pam_tally2. بخش نخست، ماژول PAM است و بخش دوم، یک برنامه مستقل است. pam_tally2 یک برنامه کاربردی (اختیاری) است که می‌تواند برای بررسی و دستکاری پرونده شمارنده به کار رود. این برنامه می‌تواند تعداد تلاش‌های کاربران را نمایش دهد، شمارنده‌های فردی را تنظیم کند، یا تمام شمارنده‌ها را پاک نماید. تنظیم مقادیر شمارنده به‌طور مصنوعی روی اعداد بالا ممکن است برای مسدود کردن کاربران بدون تغییر گذرواژه‌شان مفید باشد. به عنوان مثال، ممکن است پاک کردن تمام شمارنده‌ها در هر نیمه‌شب از طریق یک وظیفه cron سودمند باشد.

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

این گزینه‌ها می‌توانند برای هر دو نوع ماژول auth و account استفاده شوند.

onerr=[fail|succeed]

اگر اتفاق غیرمنتظره‌ای رخ دهد (مانند عدم توانایی در باز کردن پرونده)، در صورتی که onerr=succeed تعیین شده باشد با PAM_SUCCESS و در غیر این صورت با کد خطای متناظر PAM بازمی‌گردد.

file=/path/to/counter

پرونده‌ای که شمارش‌ها در آن نگهداری می‌شوند. مقدار پیش‌فرض /var/log/tallylog است.

audit

در صورتی که کاربر یافت نشود، نام کاربری را در گزارش سیستم (سیستم‌لاگ) ثبت می‌کند.

silent

پیام‌های اطلاع‌رسانی را چاپ نمی‌کند.

no_log_info

پیام‌های اطلاع‌رسانی را از طریق syslog(3) ثبت نمی‌کند.

debug

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

فاز احراز هویت (Authentication phase) ابتدا شمارنده تلاش‌های ورود را افزایش می‌دهد و بررسی می‌کند که آیا باید از دسترسی کاربر جلوگیری شود یا خیر. اگر کاربر احراز هویت شود و فرایند ورود با فراخوانی pam_setcred(3) ادامه یابد، شمارنده تلاش‌ها بازنشانی می‌شود.

deny=n

اگر شمارش تلاش‌ها برای این کاربر از n فراتر رود، از دسترسی جلوگیری می‌کند.

lock_time=n

پس از یک تلاش ناموفق، همیشه به مدت n ثانیه از دسترسی جلوگیری می‌کند.

unlock_time=n

اجازه دسترسی پس از n ثانیه پس از یک تلاش ناموفق. اگر از این گزینه استفاده شود، کاربر پس از فراتر رفتن از حداکثر تلاش‌های مجاز خود، به مدت زمان مشخص‌شده قفل خواهد شد. در غیر این صورت، حساب کاربری تا زمانی که قفل با دخالت دستی مدیر سیستم برداشته نشود، قفل می‌ماند.

magic_root

اگر ماژول توسط کاربری با uid=0 فراخوانی شود، شمارنده افزایش نمی‌یابد. مدیر سیستم باید از این گزینه برای سرویس‌هایی که توسط کاربر اجرا می‌شوند (مانند su) استفاده کند، در غیر این صورت این آرگومان باید حذف شود.

even_deny_root

حساب ریشه (root) نیز می‌تواند غیرقابل دسترس شود.

root_unlock_time=n

این گزینه متضمن گزینه even_deny_root است. اجازه دسترسی به حساب root پس از n ثانیه از تلاش ناموفق. اگر از این گزینه استفاده شود، کاربر root پس از فراتر رفتن از حداکثر تلاش‌های مجاز، به مدت زمان مشخص‌شده قفل خواهد شد.

serialize

دسترسی به پرونده شمارش را با استفاده از قفل‌ها ترتیب‌بندی (serialize) می‌کند. این گزینه ممکن است تنها برای سرویس‌های تک‌ریسه‌ای (غیر چندریسه‌ای) استفاده شود، زیرا به قفل‌گذاری fcntl روی پرونده شمارش وابسته است. همچنین ایده خوبی است که از این گزینه تنها در پیکربندی‌هایی استفاده شود که زمان بین فاز auth و فاز account یا setcred به کلاینت احراز هویت وابسته نباشد. در غیر این صورت، کلاینت احراز هویت می‌تواند با طولانی کردن ساختگی زمان نگهداری قفل رکورد پرونده، از احراز هویت هم‌زمان توسط همان کاربر جلوگیری کند.

فاز حساب کاربری (Account phase) در صورتی که کاربر magic root نباشد، شمارنده تلاش‌ها را بازنشانی می‌کند. این فاز می‌تواند به‌طور اختیاری برای سرویس‌هایی که pam_setcred(3) را به‌درستی فراخوانی نمی‌کنند، یا اگر بازنشانی باید فارغ از شکست فاز account ماژول‌های دیگر انجام شود، استفاده گردد.

magic_root

اگر ماژول توسط کاربری با uid=0 فراخوانی شود، شمارنده تغییری نمی‌کند. مدیر سیستم باید از این گزینه برای سرویس‌هایی که توسط کاربر اجرا می‌شوند (مانند su) استفاده کند، در غیر این صورت این آرگومان باید حذف شود.

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

PAM_AUTH_ERR

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

PAM_SUCCESS

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

PAM_USER_UNKNOWN

کاربر ناشناخته است.

ماژول pam_tally2 با قالب پرونده faillog ماژول قدیمی pam_tally سازگار نیست. این امر به دلیل الزامات سازگاری قالب پرونده tallylog بین معماری‌های ۳۲ بیتی و ۶۴ بیتی در سیستم‌های چندمعماری (multiarch) است.

هیچ لفاف setuid برای دسترسی به پرونده داده وجود ندارد، مانند زمانی که ماژول pam_tally2.so از طرف xscreensaver فراخوانی می‌شود. از آنجا که این مسئله اشتراک‌گذاری پیکربندی PAM را با چنین سرویس‌هایی غیرممکن می‌کند، از راه‌حل جایگزین زیر استفاده می‌شود: اگر پرونده داده به دلیل مجوزهای ناکافی (EACCES) باز نشود، ماژول مقدار PAM_IGNORE را بازمی‌گرداند.

خط زیر را به /etc/pam.d/login اضافه کنید تا حساب کاربری پس از ۴ ورود ناموفق قفل شود. حساب root نیز قفل خواهد شد. حساب‌ها پس از ۲۰ دقیقه به‌طور خودکار بازگشایی می‌شوند. این ماژول نیازی به فراخوانی در مرحله account ندارد زیرا فرایند login تابع pam_setcred(3) را به‌درستی فراخوانی می‌کند.

auth     required       pam_securetty.so
auth     required       pam_tally2.so deny=4 even_deny_root unlock_time=1200
auth     required       pam_env.so
auth     required       pam_unix.so
auth     required       pam_nologin.so
account  required       pam_unix.so
password required       pam_unix.so
session  required       pam_limits.so
session  required       pam_unix.so
session  required       pam_lastlog.so nowtmp
session  optional       pam_mail.so standard

/var/log/tallylog

پرونده ثبت شمارش دفعات شکست

pam.conf(5)، pam.d(5)، pam(8)

ماژول pam_tally2 توسط Tim Baverstock و Tomas Mraz نوشته شده است.

04/01/2016 Linux-PAM