PAM_LISTFILE(8) Linux-PAM Manual PAM_LISTFILE(8)

pam_listfile - رد یا مجاز کردن دسترسی به سرویس‌ها بر اساس محتوای یک فایل دلخواه

pam_listfile.so item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=/path/filename onerr=[succeed|fail] [apply=[user|@group]] [quiet]

ماژول pam_listfile یک ماژول PAM است که سازوکاری را برای رد یا مجاز کردن سرویس‌ها بر اساس محتوای یک فایل دلخواه فراهم می‌کند.

این ماژول item مربوط به نوع مشخص‌شده را دریافت می‌کند -- user نام کاربری (یعنی PAM_USER) را مشخص می‌کند؛ tty نام ترمینالی را که درخواست از طریق آن ارسال شده است (در صورت وجود، PAM_TTY) مشخص می‌کند؛ rhost نام میزبان راه دور را که درخواست از آن ارسال شده است (در صورت وجود، PAM_RHOST) مشخص می‌کند؛ و ruser نام کاربر راه دور درخواست‌دهنده را (در صورت در دسترس بودن، PAM_RUSER) مشخص می‌کند -- و به دنبال نمونه‌ای از آن مورد در file=filename می‌گردد. فایل filename شامل یک خط به ازای هر مورد فهرست‌شده است. اگر مورد در فایل پیدا شود، در صورتی که sense=allow باشد، مقدار PAM_SUCCESS بازگردانده می‌شود که باعث تأیید و موفقیت درخواست مجوز می‌گردد؛ در غیر این صورت، اگر sense=deny باشد، مقدار PAM_AUTH_ERR بازگردانده شده و باعث رد درخواست مجوز می‌شود.

اگر خطایی رخ دهد (به عنوان مثال، اگر filename وجود نداشته باشد، یا یک آرگومان با ساختار نامعتبر ارائه شده باشد)، در صورتی که onerr=succeed تنظیم شده باشد، مقدار PAM_SUCCESS بازگردانده می‌شود؛ در غیر این صورت اگر onerr=fail باشد، بسته به شرایط، PAM_AUTH_ERR یا PAM_SERVICE_ERR بازگردانده خواهد شد.

یک آرگومان اضافی، یعنی apply=، می‌تواند برای محدود کردن اعمال موارد بالا به یک کاربر خاص (apply=username) یا یک گروه مشخص (apply=@groupname) استفاده شود. این محدودیت اضافی تنها زمانی معنادار است که همراه با موارد tty، rhost و shell به کار گرفته شود.

به جز این مورد آخر، تمامی آرگومان‌ها باید به طور صریح مشخص شوند؛ روی هیچ رفتار پیش‌فرضی حساب نکنید.

هیچ اعتبارنامه‌ای توسط این ماژول اعطا نمی‌شود.

item=[tty|user|rhost|ruser|group|shell]

آنچه در فایل فهرست شده است و باید بررسی شود.

sense=[allow|deny]

عملی که در صورت یافتن مورد در فایل باید انجام شود. اگر مورد در فایل یافت نشود، عمل معکوس آن درخواست می‌شود.

file=/path/filename

فایلی که در هر خط آن یک مورد قرار دارد. این فایل باید یک فایل معمولی (plain file) باشد و نباید برای همگان قابل نوشتن (world writable) باشد.

onerr=[succeed|fail]

اقدامی که در صورت بروز شرایط غیرعادی (مانند عدم امکان باز کردن فایل) باید انجام گیرد.

apply=[user|@group]

محدود کردن رده کاربری که این محدودیت بر آن‌ها اعمال می‌شود. توجه داشته باشید که این گزینه برای item=[user|ruser|group] بی‌معنی است، اما برای item=[tty|rhost|shell] دارای کاربرد و معنا است.

quiet

عدم ثبت امتناع از ارائه سرویس یا گم‌شدن فایل‌های فهرست به عنوان خطاهایی که نیاز به ثبت در گزارش (لاگ) دارند.

تمام انواع ماژول (auth، account، password و session) پشتیبانی می‌شوند.

PAM_AUTH_ERR

شکست در احراز هویت.

PAM_BUF_ERR

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

PAM_IGNORE

قاعده به گزینه apply اعمال نمی‌شود.

PAM_SERVICE_ERR

خطا در ماژول سرویس.

PAM_SUCCESS

موفقیت.

احراز هویت سنتی 'ftpusers' را می‌توان با قرار دادن این مدخل در /etc/pam.d/ftpd پیاده‌سازی کرد:

#
# deny ftp-access to users listed in the /etc/ftpusers file
#
auth    required       pam_listfile.so \
        onerr=succeed item=user sense=deny file=/etc/ftpusers

توجه داشته باشید کاربرانی که در فایل /etc/ftpusers فهرست شده‌اند (بر خلاف انتظار اولیه) اجازه دسترسی به سرویس ftp را نخواهند داشت.

برای اینکه امکان ورود تنها به کاربران خاصی داده شود، می‌توانید از مدخلی مانند زیر در /etc/pam.d/login استفاده کنید:

#
# permit login to users listed in /etc/loginusers
#
auth    required       pam_listfile.so \
        onerr=fail item=user sense=allow file=/etc/loginusers

برای کارکرد درست این مثال، تمام کاربرانی که مجاز به استفاده از سرویس ورود (login) هستند باید در فایل /etc/loginusers فهرست شوند. مگر اینکه صریحاً قصد داشته باشید دسترسی root را مسدود کنید، مطمئن شوید که هنگام انجام این کار، راهی برای ورود root باقی می‌گذارید؛ چه با قرار دادن نام root در /etc/loginusers و چه با فهرست کردن کاربری که بتواند با su به حساب کاربری root تغییر وضعیت دهد.

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

ماژول pam_listfile توسط Michael K. Johnson <johnsonm@redhat.com> و Elliot Lee <sopwith@cuc.edu> نوشته شده است.

01/26/2026 Linux-PAM