في خادم RHEL7 ، لا بد لي من تنفيذ سياستين لكلمة المرور يمكن وصفهما كمعلمات لوحدة PAM pam_pwquality:

  1. كلمة المرور مطلوبة pam_pwquality.so try_first_pass local_users_only minlen = 14
  2. كلمة المرور مطلوبة pam_pwquality.so try_first_pass local_users_only dcredit = 0 ucredit = 0 ocredit = 0 lcredit = 0 minclass = 3 maxsequence = 1

علاوة على ذلك ، يحتوي تكوين RHEL 7 PAM الافتراضي بالفعل على الإدخال التالي لـ pam_pwquality:

  1. كلمة المرور مطلوبة pam_pwquality.so try_first_pass local_users_only أعد المحاولة = 3

لدي متطلبات لتطبيق سياسة كلمة المرور للإدخال 3 على جميع المستخدمين وسياسة كلمة المرور لمجموعتين مختلفتين من المستخدم المحلي المسمى group1 و group2.

لتطبيق هذه المتطلبات ، أضفت الكود التالي في /etc/pam.d/password-auth-ac و /etc/pam.d/system-auth-ac بعد إدخال pam_pwquality الافتراضي (المسمى 3. في هذا السؤال) :

password requisite pam_pwquality.so try_first_pass local_users_only minlen=14 # Default RHEL7 pam_pwquality.so entry
#BEGIN PWPOLICY 1
password [success=1 default=ignore] pam_succeed_if.so user notingroup group1
password    requisite     pam_pwquality.so try_first_pass local_users_only minlen=14 use_authtok
#END PWPOLICY 1


#BEGIN PWPOLICY 2
password [success=1 default=ignore] pam_succeed_if.so user notingroup group2
password    requisite     pam_pwquality.so try_first_pass local_users_only dcredit=0 ucredit=0 ocredit=0 lcredit=0 minclass=3 maxsequence=1 use_authtok
#END PWPOLICY 2

يعمل هذا التكوين كما هو متوقع ولكن له عيب أنه عندما يقوم مستخدم (مدرج في المجموعة 1 والمجموعة 2) بتغيير كلمة المرور فإنه يحتاج إلى تكرارها عدة مرات ، كما هو موضح في المثال التالي:

[[email protected] ~]$ passwd 
Changing password for user test.
Changing password for test.
(current) UNIX password: 
New password: 
Retype new password: 
Retype new password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

يبدو أن الخيار "use_authtok" المتضمن في آخر إدخالات pam_pwquality قد تم تجاهله.

هل تعلم ما هو الخطأ في هذا التكوين أو طرق أخرى لتنفيذ هذه المتطلبات؟

answer

المشكلة هنا مضاعفة:

  1. pam_pwqualityتم تصميمه للمطالبة صراحةً بالتحقق من كلمة المرور باستخدام pam_get_authtok_verify، use_authtokوينطبق فقط على pam_get_authtok_noverify.
  2. تعمل PAM في طريقها إلى أسفل المكدس بالترتيب ، لذا فإن جميع المستخدمين لديك يصلون إلى السياسة الافتراضية في السطر الأول ، وأعتقد أن عمليات pam_succeed_ifالتخطي لا تعمل بالطريقة التي تعتقد أنها تعمل بها.

أعتقد أنك قد ترغب في عكس الترتيب وإضافة واستخدام صيغة القوس لتحقيق ما تريده بعد:

### Policy Group 1
# If the user is in group 1, do nothing (and run the next module), 
# otherwise skip to Group 2
password [success=ignore default=1] pam_succeed_if.so user ingroup group1

# If this module succeeds skip 3 modules: the two for Group 2 
# and 1 for the default entry, otherwise fail the stack immediately. 
# "die" matches the "requisite" in your original policy. If "required" is 
# intended, change this to "bad"
password [success=3      default=die]   pam_pwquality.so try_first_pass local_users_only minlen=14

### Policy Group 2
# If the user is in group 2, do nothing (and run the next module), 
# otherwise skip to the default entry
password [success=ignore default=1] pam_succeed_if.so user ingroup group2

# Similar to Group 1, except we only need to skip the default module entry on success
password [success=1  default=die]   pam_pwquality.so try_first_pass local_users_only dcredit=0 ucredit=0 ocredit=0 lcredit=0 minclass=3 maxsequence=1 

### Default RHEL7 pam_pwquality.so entry
password requisite          pam_pwquality.so try_first_pass local_users_only minlen=14

### This should be replaced with the stack responsible for managing passwords, if not the RHEL7 default
password sufficient         pam_unix.so try_first_pass use_authtok nullok sha512 shadow

لا يبدو أن هناك أي اختلاف بالنسبة لي بين سياسة المجموعة رقم 1 والسياسة الافتراضية. على افتراض أن هذا ليس مقصودًا ، أعتقد أن ما ورد أعلاه يجب أن يعمل إذا كنت بحاجة إلى أن تكون جميع الثلاثة مختلفة.

أيضًا: يفترض هذا الحل أن عضوية المجموعة 1 والمجموعة 2 حصرية بشكل متبادل. إذا كان شخص ما في كلتا المجموعتين ، فإن المجموعة 1 لها الأسبقية.