389-ds على خادم Ubuntu 12.04 قيد التشغيل. تمكين Fine-grained password policiesو User must change password after resetعن الشجرة كلها. تم إنشاء مستخدم الاختبار بعد ذلك.

تسجيل الدخول من عميل CentOS: يُطلب من المستخدم تغيير كلمة المرور الخاصة به: You are required to change your password immediately.

تسجيل الدخول من عميل Ubuntu: تسجيل دخول المستخدم ، بدون مطالبة .

تم نسخ ملفات تكوين عميل CentOS إلى عميل Ubuntu ، على وجه التحديد /etc/pam_ldap.conf (على Ubuntu هذا هو /etc/ldap.conf) ، /etc/nslcd.conf ، /etc/openldap/ldap.conf (على أوبونتو / إلخ / ldap / ldap.conf) - لا نرد.

قام كلا العميلين بالمصادقة بنجاح ، يمكن لكليهما تغيير كلمات مرور المستخدم.

جميع عمليات تسجيل الدخول هي عمليات تسجيل دخول طرفية ، ولا توجد واجهة مستخدم رسومية متضمنة.

PAM على كلا العميلين:

  1. أوبونتو:

    • /etc/pam.d/common-account

      account [success=2 new_authtok_reqd=done default=ignore]
      pam_unix.so account [success=1 default=ignore] pam_ldap.so account requisite pam_deny.so account required
      pam_permit.so

    • /etc/pam.d/common-auth

      auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_ldap.so use_first_pass auth
      requisite pam_deny.so auth required
      pam_permit.so auth optional pam_cap.so

    • /etc/pam.d/common-password

      password [success=2 default=ignore] pam_unix.so obscure sha512 password [success=1 user_unknown=ignore default=die]
      pam_ldap.so try_first_pass password requisite
      pam_deny.so password required
      pam_permit.so password optional pam_gnome_keyring.so

  2. CentOS

    • /etc/pam.d/system-auth-ac

      #%PAM-1.0 auth required pam_env.so auth sufficient pam_fprintd.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth sufficient pam_ldap.so use_first_pass auth
      required pam_deny.so

      account required pam_unix.so broken_shadow account
      sufficient pam_localuser.so account sufficient
      pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so account required
      pam_permit.so

      password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so

      session optional pam_keyinit.so revoke session required
      pam_limits.so session optional pam_mkhomedir.so session
      [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional
      pam_ldap.so

    • /etc/pam.d/passwd-auth-ac

      #%PAM-1.0 auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass auth requisite
      pam_succeed_if.so uid >= 500 quiet auth sufficient
      pam_ldap.so use_first_pass auth required pam_deny.so

      account required pam_unix.so broken_shadow account
      sufficient pam_localuser.so account sufficient
      pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so account required
      pam_permit.so

      password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so

      session optional pam_keyinit.so revoke session required
      pam_limits.so session optional pam_mkhomedir.so session
      [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional
      pam_ldap.so

أحد الاختلافات هو أنه على Ubuntu ليس لدي برنامج cracklib. أخطط للقيام بذلك لاحقًا ، والآن أقوم بالاختبار فقط.

أتساءل عما إذا كان عميل Ubuntu LDAP ينضم إلى Windows AD ، وكيف يتلقى إشعارات لانتهاء صلاحية كلمة المرور منه. يجب أن يكون شيئًا مشابهًا لكن لا يمكنني اكتشافه.

كيف تجعل عميل Ubuntu يحترم / يطيع سياسات كلمة المرور؟ لماذا لا أرى You are required to change your password immediately.المطالبة عند تسجيل الدخول ، بالنظر إلى أن نفس التكوين يعمل مع CentOS؟

شكرا لك!

اجازة سعيدة!

answer

لقد كنت ألعب مع 389-ds على Ubuntu لمشروع عمل وواجهت نفس المشكلة بالضبط.

لست متأكدًا من نسخ التكوين من CentOS - لم يكن لدي مربع في متناول يدي.

لكن عندما بحثت وقرأت على PAM ، اتضح أنها كلها موجودة في الملف /etc/pam.d/common-account .

كان pam_unix.so أعلى من pam_ldap.so ، وكان يحتوي أيضًا على [Success = 2 افتراضي = ignore] ، مما يعني أنه إذا نجح في تخطي القاعدتين التاليتين ، وتجاهل السطر لأي شيء آخر.

الآن بما أن حسابات LDAP هي حسابات UNIX صالحة منذ أن أضفنا ldap إلى /etc/nsswitch.conf ، فإن هذه القاعدة ستعيد النجاح ولن يتم تشغيل الوحدة النمطية pam_ldap.so أبدًا.

للتغلب على هذا ، يبدو الآن /etc/pam.d/common-account الخاص بي كما يلي:

# here are the per-package modules (the "Primary" block)
account [success=1 default=bad]  pam_succeed_if.so user ingroup auth-access quiet
account [success=reset default=bad]  pam_succeed_if.so uid <= 500 quiet
account [success=2 user_unknown=ignore default=ok]      pam_ldap.so
account [success=1 new_authtok_reqd=done default=ignore]        pam_unix.so
# here's the fallback if no module succeeds
account requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
account required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config

كما ترى ، لقد أضفت أيضًا بعض القواعد هناك للسماح فقط للمستخدمين في مجموعة LDAP "وصول المصادقة" ، أو مستخدمي النظام الذين لديهم UID أقل من 500 ليتم اعتبارهم حسابات صالحة.

وشرح قليلا:

ضربنا القاعدة الأولى

account [success=1 default=bad]  pam_succeed_if.so user ingroup auth-access quiet

الذي ينجح إذا كان المستخدم في تلك المجموعة وإذا كان الأمر كذلك ، فإننا نتخطى السطر التالي لأننا نعلم أنه سيفشل (إنهم مستخدم LDAP صالح ، لذلك لن يكون لديهم معرّف نظام UID أقل من 500) - إذا لم يكن كذلك لن تنجح ، قم بإرجاع الخطأ (السيئ).

ثم القاعدة التالية إذا لم يتم تخطيها

account [success=reset default=bad]  pam_succeed_if.so uid <= 500 quiet

لذلك إذا نجح ذلك (لأن UID أقل من 500) ، فأعد تعيين قيمة الفشل التي حددتها الوحدة النمطية أعلاه ، لأنها لن تكون جزءًا من مجموعة LDAP هذه.

والجزء المهم

account [success=2 user_unknown=ignore default=ok]      pam_ldap.so

تحقق من خادم LDAP لمعرفة حالة الحساب - إذا نجح ذلك ، فنحن نعلم أن مستخدم LDAP هو مستخدم UNIX صالح ، لذا تابع وتخطي السطرين التاليين (لنقلنا إلى pam_permit.so والسماح للمستخدم بتسجيل الدخول). إذا كان المستخدم غير معروف لخادم LDAP ، فتجاهل هذا السطر وانتقل إلى السطر التالي - وبالنسبة لجميع الحالات الأخرى ، تعني "موافق" أنه لا بأس من تمرير رموز الإرجاع هذه كما هي ، والتي ستمرر أشياء مثل كلمة المرور منتهية الصلاحية ، إلخ. .

وثم:

account [success=1 new_authtok_reqd=done default=ignore]        pam_unix.so

لم نكن مستخدم LDAP صالحًا إذا وصلنا إلى هذه القاعدة ، لذا تحقق مما إذا كنا مستخدمًا صالحًا للنظام - إذا نجحنا ، تخطي السطر الأول التالي (يأخذنا إلى pam_permit.so). خلاف ذلك ، تجاهل ، الأمر الذي سيأخذنا إلى pam_deny.so.

آمل أن يساعد ذلك في التوضيح أكثر قليلاً - المستند الذي ساعدني إذا لم يكن من السهل جدًا فهمه هو: http://uw714doc.sco.com/en/SEC_pam/pam-4.html

تحياتي ، iamacarpet