سلسلة RHCSA: إعداد المصادقة المستندة إلى LDAP في RHEL 7 – الجزء 14

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

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

كما سنرى، هناك سيناريوهات تطبيقية أخرى ممكنة، ولكن في هذا الدليل سنركز تمامًا على المصادقة المبنية على 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 Diagram

شرح الشكل السابق بالتفصيل.

  1. إدخال في دليل LDAP يمثل وحدة معلومات واحدة ويتم التعرف عليه بشكل فريد بما يسمى الاسم المميز.
  2. السمة هي قطعة معلومات مرتبطة بإدخال (على سبيل المثال، العناوين، وأرقام الهواتف المتاحة للاتصال، وعناوين البريد الإلكتروني).
  3. تُخصص قيمة واحدة أو أكثر لكل سمة تتكون من قائمة مفصولة بفراغ. القيمة التي تكون فريدة لكل إدخال تسمى الاسم المميز النسبي.

وبعد هذا، دعنا نتابع مع تثبيت الخادم والعميل.

تثبيت وتكوين خادم وعميل 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

كما هو موضح في الصورة التالية:

Set LDAP Admin Password

وأنشئ ملف LDIF (ldaprootpasswd.ldif) بالمحتويات التالية:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

حيث:

  1. PASSWORD هو سلسلة التجزئة التي تم الحصول عليها سابقًا.
  2. cn=config يشير إلى خيارات التكوين العامة.
  3. 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 Configuration

واستيراد بعض تعريفات LDAP الأساسية من الدليل /etc/openldap/schema:

# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
LDAP Definitions

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
LDAP Domain Configuration

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
Add LDAP Domain Attributes and Values

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
LDAP User Configuration

بالمثل، يمكنك حذف إدخال المستخدم الذي أنشأته للتو:

# 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 Client Configuration

ملخص

في هذه المقالة قمنا بشرح كيفية إعداد المصادقة الأساسية ضد خادم LDAP. لتكوين الإعداد الموجود في الدليل الحالي بشكل أعمق، يرجى الرجوع إلى الفصل 13 – تكوين LDAP في دليل مسؤول نظام RHEL 7، مع إيلاء اهتمام خاص لإعدادات الأمان باستخدام TLS.

لا تتردد في ترك أي أسئلة قد تكون لديك باستخدام نموذج التعليق أدناه.

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/