PAM_PWQUALITY(8) Linux-PAM Manual PAM_PWQUALITY(8)

pam_pwquality - ماژول PAM برای بررسی کیفیت گذرواژه

pam_pwquality.so [...]

این ماژول می‌تواند به پشتهٔ password یک سرویس مشخص متصل شود تا امکان بررسی استحکام گذرواژه‌ها را به‌صورت یک افزونه فراهم کند. کد این ماژول در اصل بر پایه ماژول pam_cracklib توسعه یافته و با گزینه‌های آن سازگاری پس‌رو دارد.

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

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

بررسی‌های استحکام عبارتند از:

متقارن بودن (Palindrome)
آیا گذرواژه جدید متقارن (وارون‌خوان یا پالیندروم) است؟
تنها تغییر حروف کوچک و بزرگ (Case Change Only)
آیا گذرواژه جدید همان گذرواژه قبلی است که فقط حالت حروف کوچک و بزرگ آن تغییر کرده است؟
شباهت (Similar)
آیا گذرواژه جدید بیش از حد شبیه به گذرواژه قدیمی است؟ این بررسی عمدتاً توسط آرگومان difok کنترل می‌شود که تعداد تغییرات کاراکتری (درج، حذف یا جایگزینی) بین گذرواژه جدید و قدیم است که برای پذیرش گذرواژه جدید کفایت می‌کند.
ساده بودن (Simple)
آیا گذرواژه جدید بیش از حد کوتاه یا ساده است؟ این مورد توسط ۶ آرگومان کنترل می‌شود: minlen، maxclassrepeat، dcredit، ucredit، lcredit و ocredit. برای جزئیات نحوه عملکرد و مقادیر پیش‌فرض آن‌ها، بخش مربوط به آرگومان‌ها را ببینید.
چرخش کاراکترها (Rotated)
آیا گذرواژه جدید نسخهٔ چرخیده‌شده‌ای از گذرواژه قدیمی است؟
کاراکترهای متوالی یکسان (Same consecutive characters)
بررسی اختیاری برای کاراکترهای متوالی یکسان.
توالی یکنواخت بیش از حد طولانی کاراکترها (Too long monotonic character sequence)
بررسی اختیاری برای توالی‌های یکنواخت (مونو‌تونیک) بیش از حد طولانی کاراکترها.
شامل نام کاربری (Contains user name)
بررسی اینکه آیا گذرواژه به شکلی حاوی نام کاربر هست یا خیر.
بررسی واژه‌نامه (Dictionary check)
روال Cracklib فراخوانی می‌شود تا بررسی کند آیا گذرواژه بخشی از یک واژه‌نامه است یا خیر.

این بررسی‌ها هم با استفاده از آرگومان‌های ماژول و هم با ویرایش فایل پیکربندی /etc/security/pwquality.conf قابل تنظیم هستند. آرگومان‌های ماژول بر تنظیمات موجود در فایل پیکربندی اولویت دارند.

این گزینه باعث می‌شود که ماژول اطلاعات مربوط به رفتار خود را در syslog(3) بنویسد (این گزینه اطلاعات گذرواژه را در فایل لاگ ثبت نمی‌کند).
عملکرد پیش‌فرض ماژول این است که هنگام درخواست گذرواژه‌ها از اعلان‌های زیر استفاده کند: "New UNIX password: " و "Retype UNIX password: ". کلمه نمونهٔ UNIX را می‌توان با این گزینه جایگزین کرد؛ مقدار پیش‌فرض آن خالی است.
حداکثر N بار قبل از بازگرداندن خطا، از کاربر درخواست گذرواژه می‌کند. مقدار پیش‌فرض 1 است.
این آرگومان مقدار پیش‌فرض 1 را برای تعداد تغییرات در گذرواژه جدید نسبت به گذرواژه قدیمی تغییر می‌دهد.

مقدار ویژهٔ 0 تمام بررسی‌های شباهت گذرواژه جدید با گذرواژه قدیمی را غیرفعال می‌کند، به جز مواردی که گذرواژه جدید دقیقاً یکسان با گذرواژه قدیمی باشد.

حداقل اندازهٔ قابل قبول برای گذرواژه جدید (به‌علاوه یک، در صورتی که اعتبارها غیرفعال نشده باشند که حالت پیش‌فرض است). علاوه بر تعداد کاراکترهای گذرواژه جدید، برای هر نوع کاراکتر متفاوت (other، upper، lower و digit) اعتبار (به میزان ۱+ در طول) اعطا می‌شود. مقدار پیش‌فرض این پارامتر 8 است. توجه داشته باشید که در Cracklib که برای بررسی واژه‌نامه استفاده می‌شود نیز دو محدودیت طول وجود دارد: یک محدودیت "بسیار کوتاه" به میزان 4 که در کد هاردکد شده است، و یک محدودیت تعریف‌شده در زمان ساخت (6) که بدون در نظر گرفتن minlen بررسی خواهد شد.
(N >= 0) این مقدار حداکثر اعتبار برای وجود ارقام در گذرواژه جدید است. اگر کمتر از N یا برابر با آن رقم داشته باشید، هر رقم به اندازهٔ ۱+ برای رسیدن به مقدار minlen فعلی محاسبه می‌شود. مقدار پیش‌فرض برای dcredit برابر با 0 است که به معنی عدم وجود پاداش برای ارقام در گذرواژه است.

(N < 0) این مقدار حداقل تعداد ارقامی است که باید در گذرواژه جدید وجود داشته باشند.

(N >= 0) این مقدار حداکثر اعتبار برای وجود حروف بزرگ در گذرواژه جدید است. اگر کمتر از N یا برابر با آن حرف بزرگ داشته باشید، هر حرف بزرگ به اندازهٔ ۱+ برای رسیدن به مقدار minlen فعلی محاسبه می‌شود. مقدار پیش‌فرض برای ucredit برابر با 0 است که به معنی عدم وجود پاداش برای حروف بزرگ در گذرواژه است.

(N < 0) این مقدار حداقل تعداد حروف بزرگی است که باید در گذرواژه جدید وجود داشته باشند.

(N >= 0) این مقدار حداکثر اعتبار برای وجود حروف کوچک در گذرواژه جدید است. اگر کمتر از N یا برابر با آن حرف کوچک داشته باشید، هر حرف کوچک به اندازهٔ ۱+ برای رسیدن به مقدار minlen فعلی محاسبه می‌شود. مقدار پیش‌فرض برای lcredit برابر با 0 است که به معنی عدم وجود پاداش برای حروف کوچک در گذرواژه است.

(N < 0) این مقدار حداقل تعداد حروف کوچکی است که باید در گذرواژه جدید وجود داشته باشند.

(N >= 0) این مقدار حداکثر اعتبار برای وجود سایر کاراکترها در گذرواژه جدید است. اگر کمتر از N یا برابر با آن کاراکتر دیگر داشته باشید، هر کاراکتر دیگر به اندازهٔ ۱+ برای رسیدن به مقدار minlen فعلی محاسبه می‌شود. مقدار پیش‌فرض برای ocredit برابر با 0 است که به معنی عدم وجود پاداش برای سایر کاراکترها در گذرواژه است.

(N < 0) این مقدار حداقل تعداد سایر کاراکترهایی است که باید در گذرواژه جدید وجود داشته باشند.

حداقل تعداد کلاس‌های کاراکتری لازم برای گذرواژه جدید. چهار کلاس عبارتند از ارقام، حروف بزرگ، حروف کوچک و کاراکترهای دیگر. تفاوت با بررسی credit در این است که کلاس خاصی از کاراکترها الزامی نیست، بلکه وجود N کلاس از میان این چهار کلاس الزامی است. این بررسی به‌طور پیش‌فرض غیرفعال است.
رد کردن گذرواژه‌هایی که حاوی بیش از N کاراکتر متوالی یکسان باشند. مقدار پیش‌فرض 0 است که به معنی غیرفعال بودن این بررسی است.
رد کردن گذرواژه‌هایی که حاوی توالی‌های یکنواخت کاراکتری طولانی‌تر از N باشند. مقدار پیش‌فرض 0 است که به معنی غیرفعال بودن این بررسی است. نمونه‌هایی از چنین توالی‌هایی '12345' یا 'fedcb' هستند. توجه داشته باشید که بیشتر چنین گذرواژه‌هایی در بررسی سادگی نیز رد خواهند شد، مگر اینکه توالی تنها بخش کوچکی از گذرواژه باشد.
رد کردن گذرواژه‌هایی که حاوی بیش از N کاراکتر متوالی از یک کلاس یکسان باشند. مقدار پیش‌فرض 0 است که به معنی غیرفعال بودن این بررسی است.
اگر غیرصفر باشد، بررسی می‌کند که آیا کلمات منفرد طولانی‌تر از ۳ کاراکتر از فیلد GECOS کاربر در passwd(5) در گذرواژه جدید وجود دارند یا خیر. مقدار پیش‌فرض 0 است که به معنی غیرفعال بودن این بررسی است.
اگر غیرصفر باشد، بررسی می‌کند که آیا گذرواژه (با تغییرات احتمالی) با کلمه‌ای در واژه‌نامه مطابقت دارد یا خیر. در حال حاضر بررسی واژه‌نامه با استفاده از کتابخانهٔ cracklib انجام می‌شود. مقدار پیش‌فرض 1 است که به معنی فعال بودن این بررسی است.
اگر غیرصفر باشد، بررسی می‌کند که آیا گذرواژه (با تغییرات احتمالی) به شکلی شامل نام کاربری است یا خیر. مقدار پیش‌فرض 1 است که به معنی فعال بودن این بررسی است. این بررسی برای نام‌های کاربری کوتاه‌تر از ۳ کاراکتر انجام نمی‌شود.
اگر بزرگتر از ۳ باشد (به دلیل حداقل طول در usercheck)، بررسی می‌کند که آیا گذرواژه حاوی زیررشته‌ای از نام کاربری به طول حداقل N به هر شکلی هست یا خیر. مقدار پیش‌فرض 0 است که به معنی غیرفعال بودن این بررسی است.
اگر غیرصفر باشد، در صورت عدم قبولی در بررسی‌ها گذرواژه رد می‌شود، در غیر این صورت فقط هشدار چاپ می‌شود. مقدار پیش‌فرض 1 است که به معنی رد شدن گذرواژه ضعیف (برای کاربران غیرریشه) است.
کلمات با طول بیش از ۳ کاراکتر از این فهرست جداشده با فاصله، به‌صورت جداگانه در گذرواژه جدید جستجو و ممنوع می‌شوند. به‌طور پیش‌فرض این فهرست خالی است که به معنی غیرفعال بودن این بررسی است.
این گزینه امکان تعیین مسیر غیرپیش‌فرض برای واژه‌نامه‌های cracklib را فراهم می‌کند.
ماژول حتی در صورتی که کاربر تغییردهندهٔ گذرواژه root باشد، در صورت عدم قبولی در بررسی، خطا بازمی‌گرداند. این گزینه به‌طور پیش‌فرض غیرفعال است که به این معنی است که تنها پیام عدم قبولی در بررسی چاپ می‌شود اما root در هر حال می‌تواند گذرواژه را تغییر دهد. توجه داشته باشید که از root گذرواژه قبلی درخواست نمی‌شود، بنابراین بررسی‌هایی که گذرواژه قدیم و جدید را مقایسه می‌کنند انجام نمی‌شوند.
ماژول کیفیت گذرواژه را برای کاربرانی که در فایل /etc/passwd وجود ندارند آزمایش نمی‌کند. ماژول همچنان گذرواژه را درخواست می‌کند تا ماژول‌های بعدی در پشته بتوانند از گزینهٔ use_authtok استفاده کنند. این گزینه به‌طور پیش‌فرض غیرفعال است.
این آرگومان برای اجبار ماژول به درخواست نکردن گذرواژه جدید از کاربر و استفاده از گذرواژه ارائه‌شده توسط ماژول password قبلی در پشته استفاده می‌شود.

تنها نوع ماژول password ارائه شده است.

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

برای مثالی از کاربرد این ماژول، نحوه قرارگیری آن در پشته به همراه مؤلفهٔ password از pam_unix(8) نشان داده شده است.

#
# These lines stack two password type modules. In this example the
# user is given 3 opportunities to enter a strong password. The
# "use_authtok" argument ensures that the pam_unix module does not
# prompt for a password, but instead uses the one provided by
# pam_pwquality.
#
password required pam_pwquality.so retry=3
password required pam_unix.so use_authtok

مثال دیگر برای حالتی است که می‌خواهید از رمزنگاری sha256 برای گذرواژه استفاده کنید:

#
# These lines allow modern systems to support passwords of at least 14
# bytes with extra credit of 2 for digits and 2 for others the new
# password must have at least three bytes that are not present in the
# old password
#
password required pam_pwquality.so \
              difok=3 minlen=15 dcredit=2 ocredit=2
password required pam_unix.so use_authtok nullok sha256

و در اینجا مثال دیگری در حالتی که مایل به استفاده از اعتبارها نیستید آورده شده است:

#
# These lines require the user to select a password with a minimum
# length of 8 and with at least 1 digit number, 1 upper case letter,
# and 1 other character
#
password required pam_pwquality.so \
              dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8
password required pam_unix.so use_authtok nullok sha256

pwscore(1), pwquality.conf(5), pam_pwquality(8), pam.conf(5), PAM(8)

Tomas Mraz <tmraz@redhat.com>

نویسنده اصلی ماژول pam_cracklib: Cristian Gafton <gafton@redhat.com>

2025-12-14 Red Hat, Inc.