سنبدأ هذا المقال بتوضيح بعض مفاهيم LDAP الأساسية (ما هو، وأين يُستخدم، ولماذا)، وسنوضح كيفية إعداد خادم LDAP وتكوين عميل للمصادقة عليه باستخدام أنظمة Red Hat Enterprise Linux 7.

كما سنرى، هناك سيناريوهات تطبيقية أخرى ممكنة، ولكن في هذا الدليل سنركز تمامًا على المصادقة المبنية على LDAP. وبالإضافة إلى ذلك، يُرجى أخذ العلم بأننا بسبب شمولية الموضوع، سنغطي الأساسيات فقط هنا، لكن يمكنك الرجوع إلى الوثائق المُذكورة في الخلاصة للحصول على تفاصيل أعمق.
لنفس السبب، ستلاحظ أنني قررت ترك العديد من الإشارات إلى صفحات الرجل لأدوات LDAP من أجل الإيجاز، لكن التفسيرات المقابلة على بُعد نقرة (man ldapadd، على سبيل المثال).
ذلك قيل، دعونا نبدأ.
بيئة الاختبار لدينا
بيئة الاختبار لدينا تتألف من جهازين RHEL 7:
Server: 192.168.0.18. FQDN: rhel7.mydomain.com Client: 192.168.0.20. FQDN: ldapclient.mydomain.com
إذا كنت ترغب، يمكنك استخدام الجهاز المثبت في الجزء 12: أتمتة تثبيت RHEL 7 باستخدام Kickstart كعميل.
ما هو LDAP؟
يشير LDAP إلى بروتوكول الوصول الخفيف إلى الدليل ويتكون من مجموعة من البروتوكولات التي تسمح للعميل بالوصول، عبر الشبكة، إلى المعلومات المخزنة مركزيًا (مثل دليل القواقع لتسجيل الدخول، والمسارات المطلقة للمجلدات الرئيسية، ومعلومات المستخدمين النظامية النموذجية الأخرى، على سبيل المثال) التي يجب أن تكون متاحة من أماكن مختلفة أو متاحة لعدد كبير من المستخدمين النهائيين (مثال آخر سيكون دليل عناوين المنازل وأرقام الهواتف لجميع الموظفين في شركة).
الاحتفاظ بمثل هذه المعلومات (وغيرها) مركزيًا يعني أنه يمكن الحفاظ عليها والوصول إليها بسهولة أكبر من قبل كل من حصل على أذونات لاستخدامها.
الشكل التالي يقدم رسمًا توضيحيًا مبسطًا لـ LDAP، ويتم وصفه أدناه بمزيد من التفصيل:

شرح الشكل السابق بالتفصيل.
- إدخال في دليل LDAP يمثل وحدة معلومات واحدة ويتم التعرف عليه بشكل فريد بما يسمى الاسم المميز.
- السمة هي قطعة معلومات مرتبطة بإدخال (على سبيل المثال، العناوين، وأرقام الهواتف المتاحة للاتصال، وعناوين البريد الإلكتروني).
- تُخصص قيمة واحدة أو أكثر لكل سمة تتكون من قائمة مفصولة بفراغ. القيمة التي تكون فريدة لكل إدخال تسمى الاسم المميز النسبي.
وبعد هذا، دعنا نتابع مع تثبيت الخادم والعميل.
تثبيت وتكوين خادم وعميل LDAP
في RHEL 7 ، يتم تنفيذ LDAP بواسطة OpenLDAP. لتثبيت الخادم والعميل ، استخدم الأوامر التالية على التوالي:
# yum update && yum install openldap openldap-clients openldap-servers # yum update && yum install openldap openldap-clients nss-pam-ldapd
بمجرد الانتهاء من التثبيت ، هناك بعض الأشياء التي نلقي بها نظرًا. يجب أن تُنفَّذ الخطوات التالية على الخادم وحده ، ما لم يُشار إلى خلاف ذلك:
1. تأكد من عدم عرقلة SELinux من خلال تمكين الـ booleans التالية بشكل دائم ، على الخادم والعميل على حد سواء:
# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0
حيث يُعتبر allow_ypbind ضروريًا للمصادقة القائمة على LDAP ، وقد يكون من الضروري توفير authlogin_nsswitch_use_ldap لبعض التطبيقات.
2. قم بتمكين وبدء الخدمة:
# systemctl enable slapd.service # systemctl start slapd.service
تذكر أنه يمكنك أيضًا تعطيل أو إعادة تشغيل أو إيقاف الخدمة باستخدام systemctl أيضًا:
# systemctl disable slapd.service # systemctl restart slapd.service # systemctl stop slapd.service
3. نظرًا لأن خدمة slapd تعمل باسم المستخدم ldap (الذي يمكنك التحقق منه باستخدام ps -e -o pid,uname,comm | grep slapd) ، يجب على هذا المستخدم أن يمتلك دليل /var/lib/ldap من أجل أن يتمكن الخادم من تعديل الإدخالات التي تم إنشاؤها بواسطة أدوات إدارية يمكن تشغيلها فقط بواسطة root (المزيد عن هذا في دقيقة).
قبل تغيير ملكية هذا الدليل بشكل تكراري ، قم بنسخ ملف تكوين قاعدة البيانات العينية لـ slapd إليه:
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chown -R ldap:ldap /var/lib/ldap
4. قم بإعداد مستخدم إداري لـ OpenLDAP وتعيين كلمة مرور:
# slappasswd
كما هو موضح في الصورة التالية:

وأنشئ ملف LDIF (ldaprootpasswd.ldif) بالمحتويات التالية:
dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD
حيث:
- PASSWORD هو سلسلة التجزئة التي تم الحصول عليها سابقًا.
- cn=config يشير إلى خيارات التكوين العامة.
- olcDatabase يشير إلى اسم مثيل قاعدة البيانات المحدد ويمكن العثور عليه عادة داخل /etc/openldap/slapd.d/cn=config.
بالرجوع إلى الخلفية النظرية المقدمة سابقًا، سيقوم ملف ldaprootpasswd.ldif
بإضافة إدخال إلى دليل LDAP. في ذلك الإدخال، يمثل كل سطر زوج السمة: القيمة (حيث dn و changetype و add و olcRootPW هي السمات والسلاسل على يمين كل نقطة هي القيم الخاصة بها).
قد ترغب في الأخذ بهذا في الاعتبار بينما نتقدم أكثر، ويرجى ملاحظة أننا نستخدم نفس أسماء الأشياء الشائعة (cn=)
طوال بقية هذه المقالة، حيث يعتمد كل خطوة على السابقة.
5. الآن، أضف إدخال LDAP المقابل عن طريق تحديد URI المشير إلى خادم ldap، حيث يُسمح فقط بحقول البروتوكول/المضيف/المنفذ.
# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif
يجب أن يكون الإخراج مشابهًا ل:

واستيراد بعض تعريفات LDAP الأساسية من الدليل /etc/openldap/schema
:
# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

6. اجعل LDAP يستخدم نطاقك في قاعدة بياناته.
أنشئ ملف LDIF آخر، سنسميه ldapdomain.ldif
، بالمحتويات التالية، مستبدلاً نطاقك (في مكون النطاق dc=) وكلمة المرور حسب الاقتضاء:
dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=mydomain,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=mydomain,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}PASSWORD dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read
ثم قم بتحميله كما يلي:
# ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. الآن حان الوقت لإضافة بعض الإدخالات إلى دليل LDAP الخاص بنا. يتم فصل السمات والقيم بواسطة الفاصلة المنقوطة (:)
في الملف التالي، الذي سنسميه baseldapdomain.ldif
:
dn: dc=mydomain,dc=com objectClass: top objectClass: dcObject objectclass: organization o: mydomain com dc: mydomain dn: cn=Manager,dc=mydomain,dc=com objectClass: organizationalRole cn: Manager description: Directory Manager dn: ou=People,dc=mydomain,dc=com objectClass: organizationalUnit ou: People dn: ou=Group,dc=mydomain,dc=com objectClass: organizationalUnit ou: Group
أضف الإدخالات إلى دليل LDAP:
# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

8. أنشئ مستخدم LDAP يسمى ldapuser (adduser ldapuser)، ثم أنشئ التعريفات لمجموعة LDAP في ldapgroup.ldif
.
# adduser ldapuser # vi ldapgroup.ldif
أضف المحتوى التالي.
dn: cn=Manager,ou=Group,dc=mydomain,dc=com objectClass: top objectClass: posixGroup gidNumber: 1004
حيث gidNumber هو GID في /etc/group لـ ldapuser) وقم بتحميله:
# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif
9. أضف ملف LDIF بالتعريفات للمستخدم ldapuser (ldapuser.ldif
):
dn: uid=ldapuser,ou=People,dc=mydomain,dc=com objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: ldapuser uid: ldapuser uidNumber: 1004 gidNumber: 1004 homeDirectory: /home/ldapuser userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M loginShell: /bin/bash gecos: ldapuser shadowLastChange: 0 shadowMax: 0 shadowWarning: 0
وقم بتحميله:
# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

بالمثل، يمكنك حذف إدخال المستخدم الذي أنشأته للتو:
# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"
10. السماح بالتواصل من خلال جدار الحماية:
# firewall-cmd --add-service=ldap
11. الأخير، ولكن ليس آخرا، تمكين العميل من المصادقة باستخدام LDAP.
لمساعدتنا في هذه الخطوة النهائية، سنستخدم أداة authconfig (واجهة لتكوين موارد المصادقة النظام).
باستخدام الأمر التالي، يتم إنشاء دليل المستخدم المطلوب إذا لم يكن موجودًا بعد نجاح المصادقة ضد خادم LDAP:
# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

ملخص
في هذه المقالة قمنا بشرح كيفية إعداد المصادقة الأساسية ضد خادم LDAP. لتكوين الإعداد الموجود في الدليل الحالي بشكل أعمق، يرجى الرجوع إلى الفصل 13 – تكوين LDAP في دليل مسؤول نظام RHEL 7، مع إيلاء اهتمام خاص لإعدادات الأمان باستخدام TLS.
لا تتردد في ترك أي أسئلة قد تكون لديك باستخدام نموذج التعليق أدناه.
Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/