المحتوى عن 'openldap'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML5
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 5 نتائج

  1. لا يستعمل أغلب الناس Kerberos لوحده، فبعد أن يستوثق المستخدم (Kerberos)، فسنحتاج لمعرفة ماذا بإمكانه أن يفعل (تصريح [authorization])؛ وهنا تكون مهمة البرامج مثل LDAP. قد يكون استنساخ قاعدة مبادئ Kerberos بين خادومين أمرًا معقدًا، ويضيف قاعدة بيانات مستخدم أخرى إلى شبكتك؛ لحسن الحظ، MIT Kerberos مضبوطٌ ليستخدم دليل LDAP كقاعدة بيانات للمبادئ؛ يشرح هذا الدرس ضبط خادومَيّ Kerberos الرئيسي والثانوي لاستخدام OpenLDAP لقاعدة بيانات المبادئ. ملاحظة: الأمثلة هنا تستخدم MIT Kerberos و OpenLDAP. ضبط OpenLDAPأولًا، يجب تحميل المخطط الضروري على خادوم OpenLDAP الذي لديه اتصال شبكي مع مركز توزيع المفاتيح الرئيسي والثانوي؛ بقية هذا القسم تفترض أن لديك استنساخ LDAP مضبوط بين خادومين على الأقل؛ للمزيد من المعلومات حول ضبط OpenLDAP راجع درس «خادوم OpenLDAP». من المطلوب أيضًا ضبط OpenLDAP من أجل اتصالات TLS و SSL؛ لذلك ستكون جميع البيانات المارة بين خادومي LDAP و KDC مشفرةً. ملاحظة: cn=admin,cn=config هو المستخدم الذي أنشأناه مع امتياز الكتابة إلى قاعدة بيانات ldap؛ تكون القيمة في كثير من الأحيان هي RootDN، عدِّل قيمته وفقًا للضبط عندك. لتحميل المخطط على LDAP، فثبِّت الحزمة krb5-kdc-ldap في خادوم LDAP؛ أي أدخِل الأمر الآتي في الطرفية: sudo apt-get install krb5-kdc-ldapثم استخرج محتويات الملف kerberos.schema.gz: sudo gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz sudo cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/يجب أن يضاف مخطط kerberos إلى شجرة cn=config؛ آلية إضافة مخطط جديد إلى slapd مفصلةٌ في قسم «تعديل قاعدة بيانات ضيط slapd» من درس «خادوم OpenLDAP». أولًا، أنشِئ ملف ضبط باسم schema_convert.conf، أو أي اسم آخر ذي معنى، يحتوي على الأسطر الآتية: include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/kerberos.schemaأنشِئ مجلدًا مؤقتًا لاحتواء ملفات LDIF: mkdir /tmp/ldif_outputاستخدم الآن slapcat لتحويل ملفات المخطط: slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s \ "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn\=kerberos.ldifعدِّل اسم الملف والمسار السابق ليُطابِق ما عندك إن كان مختلفًا. عدِّل الخاصيات الآتية في الملف المولَّد ‎/tmp/cn=kerberos.ldif: dn: cn=kerberos,cn=schema,cn=config ... cn: kerberosواحذف الأسطر الآتية من نهاية الملف: structuralObjectClass: olcSchemaConfig entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc creatorsName: cn=config createTimestamp: 20090111203515Z entryCSN: 20090111203515.326445Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20090111203515Zقد تختلف قيم تلك الخاصيات، لكن تأكد أنها قد حُِذِفَت. حمِّل المخطط الجديد بالأمر ldapadd: ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=kerberos.ldifأضف فهرسًا لخاصية krb5principalname: ldapmodify -x -D cn=admin,cn=config -W Enter LDAP Password: dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: krbPrincipalName eq,pres,sub modifying entry "olcDatabase={1}hdb,cn=config"وفي النهاية، حدِّث قوائم التحكم في الوصول (ACL): ldapmodify -x -D cn=admin,cn=config -W Enter LDAP Password: dn: olcDatabase={1}hdb,cn=config replace: olcAccess olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none - add: olcAccess olcAccess: to dn.base="" by * read - add: olcAccess olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read modifying entry "olcDatabase={1}hdb,cn=config"هذا كل ما في الأمر، أصبح دليل LDAP جاهزًا لكي يخدم كقاعدة بيانات مبادئ Kerberos. ضبط مركز توزيع المفاتيح الرئيسيبعد ضبط OpenLDAP، حان الوقت الآن لضبط مركز توزيع المفاتيح. أولًا، ثبِّت الحزم الضرورية الآتية، بتنفيذ الأمر: sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldapعدِّل الآن ملف ‎/etc/krb5.conf بإضافة الخيارات الآتية تحت الأقسام الملائمة لها: [libdefaults] default_realm = EXAMPLE.COM ... [realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com admin_server = kdc01.example.com admin_server = kdc02.example.com default_domain = example.com database_module = openldap_ldapconf } ... [domain_realm] .example.com = EXAMPLE.COM ... [dbdefaults] ldap_kerberos_container_dn = dc=example,dc=com [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=example,dc=com" # this object needs to have read rights on # the realm container, principal container and realm sub-trees ldap_kadmind_dn = "cn=admin,dc=example,dc=com" # this object needs to have read and write rights on # the realm container, principal container and realm sub-trees ldap_service_password_file = /etc/krb5kdc/service.keyfile ldap_servers = ldaps://ldap01.example.com ldaps://ldap02.example.com ldap_conns_per_server = 5 }ملاحظة: عدِّل قيم example.com ،dc=example,dc=com ،cn=admin,dc=example,dc=com ،ldap01.example.com للقيم الملائمة للنطاق، وكائن LDAP، وخادوم LDAP لشبكتك. لاحقًا، استخدم الأداة kdb5_ldap_util لإنشاء الحقل: sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com create -subtrees \ dc=example,dc=com -r EXAMPLE.COM -s -H ldap://ldap01.example.comأنشِئ «مخبأً» (stash) لكلمة المرور المستخدم في خادوم LDAP، تستخدم هذه الكلمة من ldap_kdc_dn و ldap_kadmind_dn في ملف ‎/etc/krb5.conf: sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f \ /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=comانسخ شهادة سلطة الشهادات من خادوم LDAP: scp ldap01:/etc/ssl/certs/cacert.pem . sudo cp cacert.pem /etc/ssl/certsالآن عدِّل ‎/etc/ldap/ldap.conf ليستخدم الشهادة: TLS_CACERT /etc/ssl/certs/cacert.pemملاحظة: يجب أن تُنسَخ الشهادة أيضًا إلى مركز توزيع المفاتيح الثانوي، للسماح بالاتصال إلى خواديم LDAP باستخدام LDAPS. تستطيع الآن إضافة مبادئ Kerberos إلى قاعدة بيانات LDAP، وستُنسَخ إلى بقية خواديم LDAP المضبوطة للاستنساخ. فأدخل ما يليل لإضافة مبدأ باستخدام الأداة kadmin.local: sudo kadmin.local Authenticating as principal root/admin@EXAMPLE.COM with password. kadmin.local: addprinc -x dn="uid=steve,ou=people,dc=example,dc=com" steve WARNING: no policy specified for steve@EXAMPLE.COM; defaulting to no policy Enter password for principal "steve@EXAMPLE.COM": Re-enter password for principal "steve@EXAMPLE.COM": Principal "steve@EXAMPLE.COM" created.يجب أن تكون خاصيات krbPrincipalName ،krbPrincipalKey ،krbLastPwdChange ،krbExtraData مضافةً إلى كائن المستخدم uid=steve,ou=people,dc=example,dc=com؛ استخدم أداتَيّ kinit و klist لاختبار إذا أصدر المستخدم المعين بطاقةً. ملاحظة: إذا كان كائن المستخدم مُنشأً مسبقًا، فإنه يجب إضافة الخيار ‎-x dn="..."‎ إلى خاصيات Kerberos؛ لأنه سيُنشَأ فيما عدا ذلك كائن مبدأي جديد في شجرة الحقل الفرعية. ضبط مركز توزيع المفاتيح الثانويضبط مركز توزيع المفاتيح الثانوي لاستخدم LDAP هو شبيه بضبطه لاستخدام قاعدة بيانات Kerberos العادية. أولًا، ثبت الحزم الضرورية، بتطبيق الأمر الآتي في الطرفية: sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldapعدِّل الآن ملف ‎/etc/krb5.conf ليستخدم LDAP: [libdefaults] default_realm = EXAMPLE.COM ... [realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com admin_server = kdc01.example.com admin_server = kdc02.example.com default_domain = example.com database_module = openldap_ldapconf } ... [domain_realm] .example.com = EXAMPLE.COM ... [dbdefaults] ldap_kerberos_container_dn = dc=example,dc=com [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=example,dc=com" # this object needs to have read rights on # the realm container, principal container and realm sub-trees ldap_kadmind_dn = "cn=admin,dc=example,dc=com" # this object needs to have read and write rights on # the realm container, principal container and realm sub-trees ldap_service_password_file = /etc/krb5kdc/service.keyfile ldap_servers = ldaps://ldap01.example.com ldaps://ldap02.example.com ldap_conns_per_server = 5 }أنشِئ مخبأً لكلمة مرور LDAP: sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f \ /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=comالآن انسخ مخبأ ‎‏«Master Key‎»‏ على المركز الرئيسي ‎/etc/krb5kdc/.k5.EXAMPLE.COM إلى مركز توزيع المفاتيح الثانوي؛ تأكد من نسخ الملف عبر اتصال مشفر مثل scp، أو عبر وسيط تخزين فيزيائي. sudo scp /etc/krb5kdc/.k5.EXAMPLE.COM steve@kdc02.example.com:~ sudo mv .k5.EXAMPLE.COM /etc/krb5kdc/ملاحظة: مرةً أخرى، استبدل EXAMPLE.COM باسم الحقل الحقيقي. وبالعودة إلى المركز الثانوي، أعد تشغيل خادوم ldap فقط: sudo service slapd restartفي النهاية، ابدأ عفريت krb5-kdc: sudo service krb5-kdc startتأكد أن خادومَيّ ldap (وبالتالي kerberos) متزامنَين. تستطيع الآن إكمال استيثاق المستخدمين إن أصبح خادوم LDAP أو Kerberos، أو خادوم LDAP وخادوم Kerberos غير متوفرين. مصادرلدى دليل «Kerberos Admin Guide» بعض التفاصيل الإضافية.للمزيد من المعلومات حول kdb5_ldap_util راجع صفحة دليل man kdb5_ldap_util.مصدر آخر مفيد هو صفحة الدليل man krb5.conf.انظر أيضًا لصفحة ويكي أوبنتو: «Kerberos and LDAP».ترجمة -وبتصرف- للمقال Ubuntu Server Guide: Kerberos and LDAP.
  2. يشرح هذا الدرس دمج سامبا مع LDAP. دور خادوم سامبا هو أن يكون خادومًا قائمًا بحد ذاته، ويوفر دليل LDAP بطاقة الاستيثاق بالإضافة إلى احتواء معلومات حساب المستخدم والمجموعة والجهاز التي يتطلبها سامبا لكي يعمل (في أيٍّ من أدواره الممكنة)؛ المتطلب المسبق هو خادوم OpenLDAP مضبوط مع دليل يمكن استخدامه لطلبيات الاستيثاق؛ راجع الدرس «الإدارة عن بعد – OpenSSH» لمزيدٍ من المعلومات حول تحقيق هذا المتطلب؛ وبعد إكمال هذا الدرس، عليك تحديد ماذا تريد من سامبا أن يفعل لك، وتضبطه وفقًا لذلك. تثبيت البرمجياتهنالك ثلاث حزم مطلوبة لدمج سامبا مع LDAP: حزمة samba ،samba-doc و smbldap-tools. وإذا أردنا الدقة، فإن حزمة smbldap-tools ليست مطلوبة، لكن ما لم يكن لديك طريقة أخرى لإدارة قيود سامبا المختلفة (المستخدمين والمجموعات والحواسيب) في LDAP، فعليك تثبيتها. ثبِّت هذه الحزم الآن: sudo apt-get install samba samba-doc smbldap-toolsضبط LDAPسنضبط الآن خادوم LDAP لكي يلائم بيانات سامبا، إذ أننا سنجري ثلاث مهمات في هذا القسم: استيراد مخطط (schema).فهرسة بعض القيود.إضافة كائنات (objects).مخطط سامبالكي يُستخدَم OpenLDAP كسند خلفي (backend) لسامبا؛ فمنطقيًا يجب أن تَستخدم شجرة معلومات الدليل خاصياتٍ تستطيع وصف بيانات سامبا وصفًا سليمًا؛ و يمكن الحصول على مثل هذه الخاصيات باستخدام مخطط سامبا في LDAP؛ لنفعل ذلك الآن. ملاحظة: لمزيد من المعلومات حول المخططات وتثبيتهم، راجع القسم «تعديل قاعدة بيانات ضبط slapd» في الدرس السابق. يمكن العثور على المخطط في حزمة samba-doc التي ثبتناها الآن، لكنها تحتاج إلى أن يُفَكَّ ضغطها وتُنسَخ إلى مجلد ‎/etc/ldap/schema: sudo cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema sudo gzip -d /etc/ldap/schema/samba.schema.gzاحصل على ملف الضبط schema_convert.conf الذي يحتوي على الأسطر الآتية: include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/ldapns.schema include /etc/ldap/schema/pmi.schema include /etc/ldap/schema/samba.schemaاحصل على مجلد ldif_output لكي يُبقي على المخرجات. حدد فهرس المخطط: slapcat -f schema_convert.conf -F ldif_output -n 0 | grep samba,cn=schema dn: cn={14}samba,cn=schema,cn=configحوِّل المخطط إلى صيغة LDIF: slapcat -f schema_convert.conf -F ldif_output -n0 -H \ ldap:///cn={14}samba,cn=schema,cn=config -l cn=samba.ldifعدِّل ملف cn=samba.ldif المولَّد بحذف معلومات الفهرس حتى تصل إلى: dn: cn=samba,cn=schema,cn=config ... cn: sambaاحذف الأسطر في الأسفل: structuralObjectClass: olcSchemaConfig entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95 creatorsName: cn=config createTimestamp: 20080827045234Z entryCSN: 20080827045234.341425Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20080827045234Zستختلف قيم خاصياتك. أضف المخطط الجديد: sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f cn\=samba.ldifولطلب وإظهار المخطط الجديد: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config \ 'cn=*samba*'فهارس سامبايعرف الآن slapd عن خاصيات سامبا، لنضبط الآن بعض الفهارس (indices) بناءً عليها؛ فهرسة المدخلات هي طريقة لزيادة الأداء عندما يُجرِي العميل بحثًا مُرشَّحًا على شجرة معلومات الدليل. أنشِئ الملف samba_indices.ldif بالمحتويات الآتية: dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: uidNumber eq olcDbIndex: gidNumber eq olcDbIndex: loginShell eq olcDbIndex: uid eq,pres,sub olcDbIndex: memberUid eq,pres,sub olcDbIndex: uniqueMember eq,pres olcDbIndex: sambaSID eq olcDbIndex: sambaPrimaryGroupSID eq olcDbIndex: sambaGroupType eq olcDbIndex: sambaSIDList eq olcDbIndex: sambaDomainName eq olcDbIndex: default subاستخدم الأداة ldapmodify لتحميل الفهارس الجديدة: sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f samba_indices.ldifإذا جرى كل شيء على ما يرام، فيجب أن تشاهد الفهارس الجديدة باستخدام ldapsearch: sudo ldapsearch -Q -LLL -Y EXTERNAL -H \ ldapi:/// -b cn=config olcDatabase={1}hdb olcDbIndexإضافة كائنات LDAP لسامباتاليًا، اضبط حزمة smbldap-tools لمطابقة بيئتك؛ تأتي هذه الحزمة مع ملف ضبط سيسأل بعض الأسئلة عن الخيارات الضرورية (اسمه smbldap-config.pl، وكان اسمه فيما مضى configure.pl)؛ لكن هنالك علِّة1 ليست مثبتة لكنه موجودة في الكود المصدري (apt-get source smbldap-tools). لضبط الحزمة يدويًا، عليك إنشاء وتعديل ملفَيّ ‎/etc/smbldap-tools/smbldap.conf و ‎/etc/smbldap-tools/smbldap_bind.conf. سيضيف سكربت smbldap-populate كائنات LDAP اللازمة لعمل سامبا؛ من الجيد عادةً أن تأخذ نسخةً احتياطيةً من كامل الدليل باستخدام slapcat: sudo slapcat -l backup.ldifأكمل بإملاء الدليل بعد أخذك لنسخةٍ احتياطيةٍ منه: sudo smbldap-populateتستطيع إنشاء ملف LDIF يحتوي كائنات سامبا الجديدة بتنفيذ الأمر: sudo smbldap-populate -e samba.ldifوهذا سيسمح لك بمعاينة التعديلات والتأكد من أن كل شيء صحيح؛ ثم نفِّذ السكربت لكن بدون الخيار ‎-e؛ أو تستطيع أخذ ملف LDIF واستيراد بياناته كالمعتاد. يجب أن يملك دليل LDAP الآن المعلومات الضرورية للاستيثاق من مستخدمي سامبا. ضبط سامباهنالك عدّة طرق لضبط سامبا، التي سنشرحها في هذه السلسلة لاحقًا؛ لتضبط سامبا ليستخدم LDAP، فعدِّل الملف ‎/etc/samba/smb.conf وأزل التعليق قبل معامل passdb backend وأضف بعض معاملات ldap: # passdb backend = tdbsam # LDAP Settings passdb backend = ldapsam:ldap://hostname ldap suffix = dc=example,dc=com ldap user suffix = ou=People ldap group suffix = ou=Groups ldap machine suffix = ou=Computers ldap idmap suffix = ou=Idmap ldap admin dn = cn=admin,dc=example,dc=com ldap ssl = start tls ldap passwd sync = yes ... add machine script = sudo /usr/sbin/smbldap-useradd -t 0 -w "%u"عدِّل القيم لتطابق بيئتك. أعد تشغيل خدمة samba لتفعيل الإعدادات الجديدة: sudo restart smbd sudo restart nmbdأخبر سامبا الآن عن كلمة مرور rootDN (تلك التي ضُبِطَت أثناء تثبيت حزمة slapd): sudo smbpasswd -w passwordإذا كان لديك مستخدم LDAP موجود مسبقًا، وأردت تضمينه في سامبا، فستحتاج لإضافة بعض الخاصيات؛ تَفعَل أداة smbpasswd هذا أيضًا (يجب أن يقدر المضيف على رؤية [أو سرد] هؤلاء المستخدمين عبر NSS؛ ثَبِّت واضبط إما libnss-ldapd أو libnss-ldap): sudo smbpasswd -a usernameسيُطلَب منك إدخال كلمة المرور، وستُعتبَر هي كلمة المرور الجديدة لهذا المستخدم. لإدارة حسابات المستخدم والمجموعة والجهاز، فاستخدم الأدوات الموفرة من حزمة smbldap-tools؛ هذه بعض الأمثلة: إضافة مستخدم جديد: sudo smbldap-useradd -a -P usernameيضيف الخيار ‎-a خاصيات سامبا، ويستدعي الخيار ‎-P الأداة smbldap-passwd بعد إنشاء المستخدم مما يسمح لك بإدخال كلمة مرور لذاك المستخدم. لإزالة مستخدم: sudo smbldap-userdel usernameاستُخدِم الخيار ‎-r في الأمر السابق لحذف مجلد المنزل للمستخدم المحدد. لإضافة مجموعة:sudo smbldap-groupadd -a groupnameوكما في الأمر smbldap-useradd، يضيف الخيار ‎-a خاصيات سامبا. لإنشاء مستخدم جديد ويكون عضوًا في مجموعة:sudo smbldap-groupmod -m username groupnameيمكن أن يضيف الخيار ‎-m أكثر من مستخدم في نفس الوقت بسردهم مفصولًا بينهم بفاصلة. لحذف مستخدم من مجموعة:sudo smbldap-groupmod -x username groupnameلإضافة حساب جهاز في سامبا:sudo smbldap-useradd -t 0 -w usernameاستبدل username باسم محطة العمل (workstation)، يُنشِئ الخيار ‎-t 0 حساب جهاز بدون تأخير، بينما يحدد الخيار ‎-w الحساب كحساب جهاز؛ لاحظ أيضًا أن معامل add machine script في ‎/etc/samba/smb.conf قد غُيِّر لكي يستخدم smbldap-useradd. هذه هي الأدوات في حزمة smbldap-tools التي لم نشرحها هنا: smbldap-groupaddsmbldap-groupdelsmbldap-groupmodsmbldap-groupshowsmbldap-passwdsmbldap-populatesmbldap-useraddsmbldap-userdelsmbldap-userinfosmbldap-userlistsmbldap-usermodsmbldap-usershowمصادرهنالك عدّة أماكن وثِّق فيها LDAP مع سامبا في «Samba HOWTO Collection».على الرغم من أن هذه الصفحة قديمة (2007) لكن صفحة «Linux Samba-OpenLDAP HOWTO» تحتوي ملاحظات مهمة.الصفحة الرئيسية «Samba Ubuntu community documentation» فيها مجموعة من الوصلات للمقالات المفيدة.ترجمة -وبتصرف- للمقال Ubuntu Server Guide: Samba and LDAP.
  3. تعرفنا في المقالين السابقين على كيفية تثبيت وضبط خادوم OpenLDAP على أوبنتو و كيفية القيام بعملية التناسخ لتفادي توقف الخادوم. استيثاق LDAPبعد أن أصبح عندك خادوم LDAP يعمل جيدًا، فستحتاج إلى تثبيت مكتبات على جهاز العميل التي تعلم كيف ومتى عليها أن تتصل إلى الخادوم؛ يتم ذلك في أوبنتو تقليديًا بتثبيت حزمة libnss-ldap؛ ستجلب هذه الحزمة أدواتٍ أخرى، وستساعدك في خطوة الضبط؛ ثبت الآن الحزمة: sudo apt-get install libnss-ldapستُسأل عن معلوماتٍ حول خادوم LDAP؛ إذا ارتكبت خطأً هنا، فتستطيع المحاولة مرة أخرى بالأمر: sudo dpkg-reconfigure ldap-auth-configستظهر نتائج مربع الحوار السابق في ملف ‎/etc/ldap.conf، إذا تطلَّب الخادوم خياراتٍ غير موجودة في القائمة، فعليك تعديل هذا الملف وفقًا لها. اضبط LDAP لاستخدامه مع NSS: sudo auth-client-config -t nss -p lac_ldapاضبط النظام لاستخدام LDAP للاستيثاق: sudo pam-auth-updateاختر LDAP وأيّة آليات استيثاق أخرى قد تحتاج لها من القائمة. تستطيع الآن تسجيل الدخول بتصاريح مبنية على LDAP. سيحتاج عملاء LDAP إلى الإشارة إلى عدّة خواديم إذا اُستخدِم الاستنساخ؛ يجب أن تضع شيئًا شبيهًا بالسطر الآتي في ملف ‎/‎etc/ldap.conf: uri ldap://ldap01.example.com ldap://ldap02.example.comإذا نَفِذَت مهلة (timeout) الطلب، فسيحاول العميل الوصول إلى المستهلك (ldap02) إذا لم يستجيب المزود (ldap01). إذا كنت تريد استخدام LDAP لتخزين مستخدمي سامبا، فإن عليك ضبط سامبا ليستوثق عبر LDAP، وسنشرح ذلك في الدرس القادم. ملاحظة: بديل عن حزمة libnss-ldap هي حزمة libnss-ldapd؛ التي ستجلب معها حزمة nscd الذي قد لا نرغب فيها؛ احذفها ببساطة بعد التثبيت. إدارة المستخدمين والمجموعاتتأتي حزمة ldap-utils مع أدوات كافية لإدارة الدليل، لكن السلسلة الكبيرة من الإعدادات المطلوبة قد تصعِّب استخدامها؛ تحتوي حزمة ldapscripts على سكربتات متعلقة بهذه الأدوات التي يجدها بعض الأشخاص أسهل في الاستخدام. ثبِّت الحزمة: sudo apt-get install ldapscriptsثم عدِّل الملف ‎/etc/ldapscripts/ldapscripts.conf حتى يصبح شبيهًا بالآتي: SERVER=localhost BINDDN='cn=admin,dc=example,dc=com' BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd" SUFFIX='dc=example,dc=com' GSUFFIX='ou=Groups' USUFFIX='ou=People' MSUFFIX='ou=Computers' GIDSTART=10000 UIDSTART=10000 MIDSTART=10000أنشِئ الآن الملف ldapscripts.passwd لكي يستطيع rootDN الوصول إلى الدليل: sudo sh -c "echo -n 'secret' > /etc/ldapscripts/ldapscripts.passwd" sudo chmod 400 /etc/ldapscripts/ldapscripts.passwdملاحظة: ضع كلمة المرور الخاصة بمستخدم rootDN بدلًا من «secret». أصبحت السكربتات جاهزةً لإدارة دليلك؛ هذه بضعة أمثلة حول طريقة استخدامها: إنشاء مستخدم جديد: sudo ldapadduser george exampleهذا ما سيُنشِئ مستخدمًا بمعرِّف george ويضبط مجموعة المستخدم الرئيسية إلى example. تغيير كلمة مرور المستخدم: sudo ldapsetpasswd george Changing password for user uid=george,ou=People,dc=example,dc=com New Password: New Password (verify):حذف مستخدم: sudo ldapdeleteuser georgeإضافة مجموعة: sudo ldapaddgroup qaحذف مجموعة: sudo ldapdeletegroup qaإضافة مستخدم إلى مجموعة: sudo ldapaddusertogroup george qaعليك أن ترى الآن خاصية memberUid لمجموعة qa ذات القيمة george. إزالة مستخدم من مجموعة: sudo ldapdeleteuserfromgroup george qaيجب أن تزال الآن الخاصية memberUid من المجموعة qa. يسمح لك سكربت ldapmodifyuser بإضافة أو حذف أو استبدل خاصيات المستخدم؛ يستخدم هذا السكربت البنية العامة لأداة ldapmodify، على سبيل المثال: sudo ldapmodifyuser george # About to modify the following entry : dn: uid=george,ou=People,dc=example,dc=com objectClass: account objectClass: posixAccount cn: george uid: george uidNumber: 1001 gidNumber: 1001 homeDirectory: /home/george loginShell: /bin/bash gecos: george description: User account userPassword:: e1NTSEF9eXFsTFcyWlhwWkF1eGUybVdFWHZKRzJVMjFTSG9vcHk= # Enter your modifications here, end with CTRL-D. dn: uid=george,ou=People,dc=example,dc=com replace: gecos gecos: George Carlinيجب أن يصبح الآن المستخدم gecos باسم «George Carlin». ميزة جميلة من ميزات ldapscripts هو نظام القوالب؛ تسمح لك القوالب بتخصيص خاصيات المستخدم، والمجموعة، وكائنات الجهاز؛ فعلى سبيل المثال، لتفعيل قالب user، عدِّل الملف ‎/etc/ldapscripts/ldapscripts.conf مغيّرًا: UTEMPLATE="/etc/ldapscripts/ldapadduser.template"هنالك عينات عن القوالب في مجلد ‎/etc/ldapscripts، انسخ أو أعد تسمية ملف ldapadduser.template.sample إلى ‎/etc/ldapscripts/ldapadduser.template: sudo cp /usr/share/doc/ldapscripts/examples/ldapadduser.template.sample \ /etc/ldapscripts/ldapadduser.templateعدِّل القالب الجديد ليضيف الخاصيات التي تريدها؛ سيُنشِئ ما يلي مستخدمين جدد بقيمة inetOrgPerson للخاصية objectClass: dn: uid=<user>,<usuffix>,<suffix> objectClass: inetOrgPerson objectClass: posixAccount cn: <user> sn: <ask> uid: <user> uidNumber: <uid> gidNumber: <gid> homeDirectory: <home> loginShell: <shell> gecos: <user> description: User account title: Employeeلاحظ القيمة <ask> المُستخدَمة للخاصية sn؛ وهي ما سيجعل ldapadduser يسألك عن قيمتها. هنالك أدوات في هذه الحزمة لم نشرحها هنا، هذه هي قائمةٌ كاملةٌ بها: ldaprenamemachine ldapadduser ldapdeleteuserfromgroup ldapfinger ldapid ldapgid ldapmodifyuser ldaprenameuser lsldap ldapaddusertogroup ldapsetpasswd ldapinit ldapaddgroup ldapdeletegroup ldapmodifygroup ldapdeletemachine ldaprenamegroup ldapaddmachine ldapmodifymachine ldapsetprimarygroup ldapdeleteuserالنسخ الاحتياطي والاسترجاعالآن يجب أن يعمل LDAP كما نريده تمامًا، فحان الآن الوقت للتحقق من أن عملنا يمكن أن يُستَرجَع وقت الحاجة. كل ما نحتاج هو طريقة لنسخ قاعدة بيانات ldap احتياطيًا، وخصوصًا السند الخلفي (backend التي هي cn=config) والواجهة الأمامية (frontend التي هي dc=example,dc=com)؛ إذا كنت ستنسخ هذه القواعد نسخًا احتياطيًا إلى- ولِنَقُل- ‎/export/backup، فإننا سنستخدم slapcat كما هو موضَّح في السكربت الآتي المدعو ‎/usr/local/bin/ldapbackup: #!/bin/bash BACKUP_PATH=/export/backup SLAPCAT=/usr/sbin/slapcat nice ${SLAPCAT} -n 0 > ${BACKUP_PATH}/config.ldif nice ${SLAPCAT} -n 1 > ${BACKUP_PATH}/example.com.ldif nice ${SLAPCAT} -n 2 > ${BACKUP_PATH}/access.ldif chmod 640 ${BACKUP_PATH}/*.ldifملاحظة: هذه الملفات هي ملفات نصية غير مضغوطة تحتوي كل شيء في قواعد بيانات LDAP بما فيها مخطط الشجرة، وأسماء المستخدمين، وكل كلمات المرور؛ لذلك ربما تفكر في جعل ‎/export/backup قسمًا مشفرًا؛ وحتى كتابة سكربت يشفر هذه الملفات عند إنشائها، وربما تفعل كلا الأمرين، ولكن ذلك متعلقٌ بمتطلبات الأمن في نظامك. كل ما يلزم الآن هو الحصول على سكربت مهام مجدولة (cron) لتشغيل هذا البرنامج كل فترة زمنية (ترى أنها مناسبة)؛ سيكون ملائمًا للكثيرين جدولة تنفيذ البرنامج مرة واحدة كل يوم؛ لكن قد يحتاج الآخرون إلى مراتٍ أكثر في اليوم؛ هذا مثال عن سكربت cron مدعو ‎/etc/cron.d/ldapbackup، والذي سيعمل كل ليلة في تمام الساعة 22:45: MAILTO=backup-emails@domain.com 45 22 * * * root /usr/local/bin/ldapbackupوبعد إنشاء الملفات، يجب نقلها لخادوم النسخ الاحتياطي. وعلى فرض أنك أعدت تثبيت ldap، فإن عملية الاسترجاع ستكون شبيهةً بما يلي: sudo service slapd stop sudo mkdir /var/lib/ldap/accesslog sudo slapadd -F /etc/ldap/slapd.d -n 0 -l /export/backup/config.ldif sudo slapadd -F /etc/ldap/slapd.d -n 1 -l /export/backup/domain.com.ldif sudo slapadd -F /etc/ldap/slapd.d -n 2 -l /export/backup/access.ldif sudo chown -R openldap:openldap /etc/ldap/slapd.d/ sudo chown -R openldap:openldap /var/lib/ldap/ sudo service slapd startمصادرالمصدر الأساسي هو توثيق www.openldap.org.هنالك الكثير من صفحات الدليل للحزمة slapd؛ هذه أهمها آخذين بعين الاعتبار المعلومات المقدمة في هذا الفصل:man slapd man slapd-config man slapd.access man slapo-syncprovصفحات الدليل الأخرى: man auth-client-config man pam-auth-updateصفحة ويكي مجتمع أوبنتو «OpenLDAP» تحتوي مجموعةً من الملاحظات.كتاب O'Reilly المدعو «LDAP System Administration».كتاب Packt المدعو «Mastering OpenLDAP».ترجمة -وبتصرف- للمقال Ubuntu Server Guide: OpenLDAP Server.
  4. تعرفنا في الدرس السابق على كيفية تثبيت وضبط خادوم openldap على أوبنتو، سنتعرف في هذا الدرس على التناسخ في خادوم OpenLDAP. التناسختتزايد أهمية خدمة LDAP عندما تزداد أنظمة الشبكات المُعتَمِدة عليها؛ تكون الممارسات العملية القياسية -في مثل هذه البيئة- هي بناء redundancy في LDAP لمنع توقف الخدمات إذا لم يعد يستجيب خادوم LDAP؛ يتم ذلك باستخدام تناسخ LDAP؛ نصل إلى التناسخ باستخدام محرك Syncrepl؛ الذي يسمح بمزامنة التغيرات باستخدام موديل «مستهلك-مزود»؛ نوع التناسخ الذي سنستخدمه في هذا الدرس هو دمج للنوعين الآتيين: refreshAndPersist، و delta-syncrepl؛ الذي يُرسِل فيه المزود القيود إلى المستهلك عند إنشائهم مباشرةً؛ بالإضافة إلى أنه لا تُرسَل جميع القيود، وإنما التغيرات التي حصلت فقط. ضبط المزودسنبدأ بضبط المزود (Provider) أنشِئ ملف LDIF بالمحتويات الآتية وسمِّه provider_sync.ldif: # Add indexes to the frontend db. dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: entryCSN eq - add: olcDbIndex olcDbIndex: entryUUID eq #Load the syncprov and accesslog modules. dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: syncprov - add: olcModuleLoad olcModuleLoad: accesslog # Accesslog database definitions dn: olcDatabase={2}hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {2}hdb olcDbDirectory: /var/lib/ldap/accesslog olcSuffix: cn=accesslog olcRootDN: cn=admin,dc=example,dc=com olcDbIndex: default eq olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart # Accesslog db syncprov. dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpNoPresent: TRUE olcSpReloadHint: TRUE # syncrepl Provider for primary db dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpNoPresent: TRUE # accesslog overlay definitions for primary db dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config objectClass: olcOverlayConfig objectClass: olcAccessLogConfig olcOverlay: accesslog olcAccessLogDB: cn=accesslog olcAccessLogOps: writes olcAccessLogSuccess: TRUE # scan the accesslog DB every day, and purge entries older than 7 days olcAccessLogPurge: 07+00:00 01+00:00غيّر قيمة rootDN في ملف LDIF ليُطابِق الذي عندك في الدليل. لا يجب تعديل إعدادات apparmor لبرمجية slapd لتحديد موقع قاعدة بيانات accesslog، لأن الملف ‎/etc/apparmor/local/usr.sbin.slapd يحتوي على الأسطر الآتية: /var/lib/ldap/accesslog/ r, /var/lib/ldap/accesslog/** rwk,أنشِئ مجلدًا، وهيّء ملف ضبط قاعدة البيانات، وأعد تحميل apparmor: sudo -u openldap mkdir /var/lib/ldap/accesslog sudo -u openldap cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/accesslog sudo service apparmor reloadأضف المحتويات الجديدة؛ وأعد تشغيل العفريت بسبب التعديل في apparmor: sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif sudo service slapd restartلقد ضُبِطَ المزود بنجاح. ضبط المستهلكعليك الآن ضبط المستهلك. تثبيت البرمجية باتباع تعليمات قسم «التثبيت»؛ وتأكد أن قاعدة بيانات slapd-config مماثلة للمزود؛ وتحديدًا تأكد من أن المخططات ولاحقة قاعدة البيانات هي نفسها. أنشِئ ملف LDIF بالمحتويات الآتية وسمِّه consumer_sync.ldif: dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: syncprov dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: entryUUID eq - add: olcSyncRepl olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=exa credentials=secret searchbase="dc=example,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog - add: olcUpdateRef olcUpdateRef: ldap://ldap01.example.comتأكد أن قيم الخاصيات الآتية صحيحة: provider (اسم مضيف المزود –ldap01.example.com في هذا المثال– أو عنوان IP).binddn (الاسم الفريد للمدير الذي تستخدمه).credentials (كلمة مرور المدير الذي تستخدمه).searchbase (لاحقة قاعدة البيانات التي تستخدمها).olcUpdateRef (اسم مضيف أو عنوان IP لخادوم المزود).rid عدد من ثلاثة أرقام يعرف النسخة، يجب أن يكون لكل مستهلك رقم rid واحد على الأقل).أضف المحتويات الجديدة: sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f consumer_sync.ldifلقد انتهيت، يجب أن يبدأ الآن تزامن قاعدتَيّ البيانات (ذاتَيّ اللاحقة dc=example,dc=com). الاختباربعد بدء الاستنساخ، تستطيع مراقبته بتشغيل الأمر: ldapsearch -z1 -LLLQY EXTERNAL -H ldapi:/// -s base contextCSN dn: dc=example,dc=com contextCSN: 20120201193408.178454Z#000000#000#000000عندما تتوافق المخرجات في المزود والمستهلك (20120201193408.178454Z#000000#000#000000 في المثال السابق) في كلا الجهازين؛ فستكون عملية الاستنساخ قد تمَّت؛ وفي كل مرة يُجرى فيها تعديل في المزود، فإن القيمة ستُعدَّل وكذلك يجب أن تُعدَّل قيمة ناتج الأمر السابق في المستهلك أو المستهلكين. إذا كان اتصالك ضعيفًا، أو كان حجم قاعدة بيانات ldap كبيرًا، فربما يحتاج contextCSN في المستهلك وقتًا ليطابق مثيله في المزود؛ لكنك تعلم أن العملية قيد الإجراء لأن contextCSN في المستهلك يزداد مع الزمن. إذا كان contextCSN في المستهلك مفقودًا، أو كان لا يطابق المزود؛ فعليك إيقاف العملية والبحث عن سبب المشكلة قبل الإكمال، جرب التحقق من سجلات slapd‏ (syslog) وملفات auth في المزود للتأكد فيما إذا كانت طلبات الاستيثاق من المستهلك قد نجحت أم لا؛ وفيما إذا أعادت طلبياته للحصول على بيانات (ستشبه عبارات ldapsearch كثيرًا) أيّة أخطاء. لاختبار إذا كان يعمل؛ جرب طلب DN في قاعدة البيانات في المستهلك: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b dc=example,dc=com dnيجب أن تشاهد المستخدم «john» والمجموعة «miners» بالإضافة إلى عقدتَيّ «People» و «Groups». التحكم في الوصولإدارة أي نوع من الوصول (قراءة، أو كتابة ...إلخ.) التي يجب أن يحصل عليها المستخدمون للموارد تدعى «التحكم في الوصول» (access control)؛ تعليمات الضبط المستخدمة تسمى «قوائم التحكم في الوصول» (access control lists) أو ACL. عندما نُثبِّت حزمة slapd، فستُضبَط قوائم مختلفة للتحكم في الوصول؛ سنلقي نظرةً على بعض نتائج هذه القيم الافتراضية؛ وسنحصل بذلك على فكرة عن كيفية عمل قوائم التحكم بالوصول وكيفية ضبطها. لكي نحصل على ACL فعال لطلبية LDAP، فسنحتاج إلى أن ننظر إلى سجلات قوائم التحكم بالوصول لقاعدة البيانات التي تُجرى الطلبيات عليها، بالإضافة إلى واجهة أمامية (frontend) خاصة لقاعدة البيانات؛ قوائم التحكم بالوصول المتعلقة بالنقطة الأخيرة تسلك سلوكًا افتراضيًا في حالة لم تتطابق النقطة الأولى؛ الواجهة الأمامية لقاعدة البيانات هي ثاني ما «تنظر» إليه قوائم التحكم بالوصول؛ وأول ما ستُطبِّقه قوائم التحكم بالوصول هو أول ما سُيطابَق («first match wins») بين مصدرَيّ قوائم التحكم بالوصول السابقَين؛ ستعطي الأوامر الآتية، على التوالي وبالترتيب، قيم ACL لقاعدة بيانات hdb ‏(«dc=example,dc=com») والقيم المتعلقة بالواجهة الأمامية لقاعدة البيانات: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={1}hdb)' olcAccess dn: olcDatabase={1}hdb,cn=config olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none lcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by self write by dn="cn=admin,dc=example,dc=com" write by * readملاحظة: يملك rootDN دائمًا جميع الحقوق لقاعدة بياناته؛ تضمينها في قوائم التحكم بالوصول يوفر توضيحًا للضبط؛ لكنه يؤدي إلى تخفيض في أداء slapd. sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={-1}frontend)' olcAccess dn: olcDatabase={-1}frontend,cn=config olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred, cn=external,cn=auth manage by * break olcAccess: {1}to dn.exact="" by * read olcAccess: {2}to dn.base="cn=Subschema" by * readأول قائمة تحكم بالوصول هي مهمة ومحورية: olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * noneيمكن أن يعبر عنها بطريقة أخرى لتسهيل فهمها: to attrs=userPassword by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none to attrs=shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * noneتركيبة قوائم التحكم بالوصول (هنالك قاعدتين) تجبر ما يلي: الوصول المجهول 'auth' موفر إلى خاصية userPassword لكي يتم الاتصال الابتدائي؛ ربما هذا عكس البديهي، نحتاج إلى 'by anonymous auth' حتى لو لم نكن نريد الوصول المجهول إلى شجرة بيانات الدليل. بعد أن تتصل النهاية البعيدة، فعندها يمكن أن يقع الاستيثاق (انظر النقطة الآتية).يمكن أن يحدث الاستيثاق لأن جميع المستخدمين لديهم وصول 'read' (بسبب 'by self write') لخاصية userPassword.عدا ذلك، فلا يمكن الوصول إلى خاصية userPassword من أي مستخدمين آخرين؛ مع استثناء rootDN، الذي يملك وصولًا كاملًا إليها.لكي يغير المستخدمون كلمات مرورهم، باستخدام passwd أو غيرها من الأدوات، فإن خاصية shadowLastChange يجب أن تكون متاحةً بعد الاستيثاق من المستخدم.يمكن البحث في شجرة DIT السابقة بسبب 'by * read' في: to * by self write by dn="cn=admin,dc=example,dc=com" write by * readإذا لم يكن هذا مرغوبًا فعليك تعديل ACL؛ ولكي يكون الاستيثاق جبريًا أثناء طلب bind، فيمكنك بشكل بديل (أو بالمشاركة مع ACL المعدلة) استخدام التعليمة 'olcRequire: authc'. وكما ذُكِر سابقًا، لا يوجد حساب إدارة مُنشَأ لقاعدة بيانات slapd-config. لكن هنالك هوية SASL التي تملك الوصول الكامل إليها؛ والتي تمثل root أو sudo؛ ها هي ذا: dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authسيعرض الأمر الآتي قوائم التحكم بالوصول (ACLs) لقاعدة بيانات slapd-config: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={0}config)' olcAccess dn: olcDatabase={0}config,cn=config olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred, cn=external,cn=auth manage by * breakولما كانت هذه هوية SASL، فإننا نحتاج إلى استخدام آلية SASL عندما نستخدم أداة LDAP كما رأينا ذلك للعديد من المرات في هذا الكتاب؛ هذه الآلية خارجية؛ انظر إلى الأمر السابق كمثال، لاحظ أنه: يجب أن تستخدم sudo لكي تصبح بهوية الجذر لكي تطابق قوائم التحكم بالوصول.الآلية الخارجية (EXTERNAL) تعمل باستخدام IPC (مقابل نطاقات UNIX) الذي يعني أنه عليك استخدام صيغة ldapi URI.طريقة موجزة للحصول على جميع قوائم التحكم بالوصول: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcAccess=*)' olcAccess olcSuffixهنالك المزيد من الأمور التي يجب الحديث عنها في موضوع التحكم في الوصول؛ راجع صفحة الدليل man slapd.access. TLSعند الاستيثاق لخادوم OpenLDAP فمن الأفضل استخدام جلسة مشفرة؛ ويمكن أن يتم ذلك باستخدام أمن طبقة النقل (Transport Layer Security‏ [TLS]). هنا، سنكون «سلطة الشهادة» (Certificate Authority) الخاصة بنا وبعدها سنُنشِئ ونوقع شهادة خادوم LDAP؛ ولما كان slapd مُصَرَّفًا بمكتبة gnutls، فسنستخدم الأداة certtool لإكمال هذه المهام. ثبت حزمتَيّ gnutls-bin و ssl-cert: sudo apt-get install gnutls-bin ssl-certأنشِئ مفتاحًا خاصًا لسلطة الشهادة: sudo sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"أنشئ الملف/القالب ‎/etc/ssl/ca.info لتعريف سلطة الشهادة: cn = Example Company ca cert_signing_keyأنشِئ شهادة سلطة شهادات موقعة ذاتيًا: sudo certtool --generate-self-signed \ --load-privkey /etc/ssl/private/cakey.pem \ --template /etc/ssl/ca.info \ --outfile /etc/ssl/certs/cacert.pemاصنع مفتاحًا خاصًا للخادوم: sudo certtool --generate-privkey \ --bits 1024 \ --outfile /etc/ssl/private/ldap01_slapd_key.pemملاحظة: استبدل ldap01 في اسم الملف باسم مضيف خادومك؛ ستساعدك تسمية الشهادة والمفتاح للمضيف والخدمة التي تستخدمها في توضيح الأمور. أنشئ ملف المعلومات ‎/etc/ssl/ldap01.info الذي يحتوي: organization = Example Company cn = ldap01.example.com tls_www_server encryption_key signing_key expiration_days = 3650الشهادة السابقة صالحة لعشرة أعوام، عدِّل هذه القيمة وفقًا لمتطلباتك. أنشِئ شهادة الخادوم: sudo certtool --generate-certificate \ --load-privkey /etc/ssl/private/ldap01_slapd_key.pem \ --load-ca-certificate /etc/ssl/certs/cacert.pem \ --load-ca-privkey /etc/ssl/private/cakey.pem \ --template /etc/ssl/ldap01.info \ --outfile /etc/ssl/certs/ldap01_slapd_cert.pemأنشئ الملف certinfo.ldif بالمحتويات الآتية (عدلها وفقًا لمتطلباتك؛ حيث اعتبرت أمثلتنا أن الشهادات مُنشَأة باستخدام https://www.cacert.org): dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pemاستخدم الأمر ldapmodify لإخبار slapd عن عمل TLS عبر قاعدة بيانات slapd-config: sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ssl/certinfo.ldifوعلى النقيض من الاعتقاد الشائع؛ لا تحتاج إلى استخدام ldaps‎://‎ في ‎/etc/default/slapd لكي تستخدم التشفير، كل ما عليك امتلاكه هو: SLAPD_SERVICES="ldap:/// ldapi:///"ملاحظة: أصبح LDAP عبر TLS/SSL‏ (dlaps://‎) مهجورًا لتفضيل StartTLS، يشير الأخير إلى جلسة LDAP (تستمع على منفذ TCP ذي الرقم 389) التي تصبح محميةً بواسطة TLS/SSl؛ حيث LDAPS -مثل HTTPS- هو بروتوكول منفصل مشفر منذ البداية (encrypted-from-the-start) الذي يعمل على منفذ TCP ذي الرقم 636. اضبط الملكية والأذونات: sudo adduser openldap ssl-cert sudo chgrp ssl-cert /etc/ssl/private/ldap01_slapd_key.pem sudo chmod g+r /etc/ssl/private/ldap01_slapd_key.pem sudo chmod o-r /etc/ssl/private/ldap01_slapd_key.pemأعد تشغيل خدمة OpenLDAP: sudo service slapd restartتحقق من سجلات المضيف (‎/var/log/syslog) لترى إن بدأ تشغيل الخادوم بنجاح. التناسخ و TLSإذا ضبَطت التناسخ بين الخواديم، فمن الممارسات الشائعة هي تشفير (StartTLS) بيانات النسخ المارة في الشبكة لتفادي التنصت عليها؛ وهذا منفصل عن استخدام التشفير والاستيثاق كما فعلنا سابقًا؛ سنبني في هذا القسم على استيثاق TLS. سنفترض هنا أنك ضبطت الاستنساخ بين المزود والمستهلك وفقًا للقسم «التناسخ»؛ وضبطت TLS للاستيثاق في المزود وفقًا للقسم «TLS». وكما ذكر سابقًا؛ هدف التناسخ (بالنسبة لنا) هو أن تكون خدمة LDAP ذات إتاحية كبيرةً؛ ولمّا كنا نستخدم TLS للاستيثاق في المزود فإننا نحتاج إلى نفس الأمر في المستهلك؛ بالإضافة إلى ذلك، نريد أن تكون بيانات الاستنساخ المنقولة مشفرةً، وما بقي ليُفعَل هو إنشاء مفتاح وشهادة للمستهلك ثم الضبط وفقًا لذلك، وسنولد المفتاح/الشهادة في المزود؛ لكي نتجنب إنشاء شهادة أخرى لسلطة الشهادات، ثم سننقل ما يلزمنا إلى المستهلك. في المزود: أنشِئ مجلدًا (الذي سيستخدم في النقل النهائي)، ثم ولِّد مفتاح المستهلك الخاص: mkdir ldap02-ssl cd ldap02-ssl sudo certtool --generate-privkey \ --bits 1024 \ --outfile ldap02_slapd_key.pemأنشئ ملف المعلومات ldap02.info للخادوم المستهلك، وعدِّل قيمه وفقًا لمتطلباتك: organization = Example Company cn = ldap02.example.com tls_www_server encryption_key signing_key expiration_days = 3650أنشِئ شهادة المستهلك: sudo certtool --generate-certificate \ --load-privkey ldap02_slapd_key.pem \ --load-ca-certificate /etc/ssl/certs/cacert.pem \ --load-ca-privkey /etc/ssl/private/cakey.pem \ --template ldap02.info \ --outfile ldap02_slapd_cert.pemاحصل على نسخة من شهادة سلطة الشهادات: cp /etc/ssl/certs/cacert.pem .لقد انتهينا الآن، انقل مجلد ldap02-ssl إلى المستهلك؛ حيث استخدمنا هنا scp (عدّل الأمر وفقًا لمتطلباتك): cd .. scp -r ldap02-ssl user@consumer:في المستهلك: ضبط استيثاق TLS: sudo apt-get install ssl-cert sudo adduser openldap ssl-cert sudo cp ldap02_slapd_cert.pem cacert.pem /etc/ssl/certs sudo cp ldap02_slapd_key.pem /etc/ssl/private sudo chgrp ssl-cert /etc/ssl/private/ldap02_slapd_key.pem sudo chmod g+r /etc/ssl/private/ldap02_slapd_key.pem sudo chmod o-r /etc/ssl/private/ldap02_slapd_key.pemأنشئ الملف ‎/etc/ssl/certinfo.ldif وفيه المحتويات الآتية (عدِّلها وفقًا لمتطلباتك): dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap02_slapd_cert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap02_slapd_key.pemاضبط قاعدة بيانات slapd-config: sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f certinfo.ldifاضبط ‎/etc/default/slapd في المزود (SLAPD_SERVICES). في المستهلك: اضبط TLS للتناسخ من جهة المستهلك، وعدِّل خاصية olcSyncrepl الموجودة مسبقًا بتتبع بعض خيارات TLS؛ وبفعل ذلك، سنرى للمرة الأولى كيف نعدل قيمة خاصية ما. أنشئ الملف consumer_sync_tls.ldif بالمحتويات الآتية: dn: olcDatabase={1}hdb,cn=config replace: olcSyncRepl olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=example,dc=com" credentials=secret searchbase="dc=example,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog starttls=critical tls_reqcert=demandالخيارات الإضافية تحدد، على التوالي وبالترتيب، أن على المستهلك استخدام StartTLS وأن شهادة CA مطلوبةٌ للتحقق من هوية المزود، ولاحظ أيضًا صيغة LDIF لتعديل قيم خاصية ما ('replace'). نفِّذ هذه التعديلات: sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f consumer_sync_tls.ldifثم أعد تشغيل slapd: sudo service slapd restartعلى المزود: تأكد من أن جلسة TLS قد بدأت؛ وذلك عبر السجل ‎/var/log/syslog، بافتراض أنك أعدت مستوى التسجيل إلى 'conns'، وعليه سترى رسائل شبيهة بالآتي: slapd[3620]: conn=1047 fd=20 ACCEPT from IP=10.153.107.229:57922 (IP=0.0.0.0:389) slapd[3620]: conn=1047 op=0 EXT oid=1.3.6.1.4.1.1466.20037 slapd[3620]: conn=1047 op=0 STARTTLS slapd[3620]: conn=1047 op=0 RESULT oid= err=0 text= slapd[3620]: conn=1047 fd=20 TLS established tls_ssf=128 ssf=128 slapd[3620]: conn=1047 op=1 BIND dn="cn=admin,dc=example,dc=com" method=128 slapd[3620]: conn=1047 op=1 BIND dn="cn=admin,dc=example,dc=com" mech=SIMPLE ssf=0 slapd[3620]: conn=1047 op=1 RESULT tag=97 err=0 textترجمة -وبتصرف- للمقال Ubuntu Server Guide: OpenLDAP Server.
  5. البروتوكول الخفيف للوصول للدليل (Lightweight Directory Access Protocol) أو اختصارًا LDAP، هو بروتوكول لطلبيات وتعديل خدمة دليل مبني على X.500 يعمل عبر TCP/IP؛ الإصدارة الحالية من LDAP هي LDAPv3 كما هو معرَّف في RFC45101؛ والبرمجية المستخدمة في أوبنتو لتطبيق LDAPv3 هي OpenLDAP. هذه هي بعض المصطلحات والمفاهيم الأساسية: دليل LDAP هو شجرة من قيود البيانات (entries) التي تكون ذات هيكليّةٍ بطبيعتها، وتسمى شجرة معلومات الدليل (Directory Information Tree‏ [DIT]).يتكون القيد من مجموعة من الخاصيات (attributes).الخاصية لها نوع (type) يكون اسمًا أو شرحًا؛ وقيمةٌ واحدةٌ أو أكثر.يجب أن تُعرِّف كل خاصية ما يسمى objectClass واحدًا على الأقل.الخاصيات و objectClasses مُعرَّفةٌ في مخططات (schemas) حيث يُعتبَر objectClass نوعًا خاصًا من الخاصيات.لكل قيد معرِّف خاص به هو «الاسم الفريد» (Distinguished Name أو DN)؛ الذي يحتوي على «الاسم الفريد النسبي» (Relative Distinguished Name‏ [RDN]) متبوعًا بالاسم الفريد للقيد الأب.الاسم الفريد للقيد ليس خاصيةً، بل يعتبر جزءًا من القيد نفسه.ملاحظة: المصطلحات «الكائن» (object)، و«الحاوية» (container)، و«العقدة» (node) لها دلالات خاصة، لكنها أساسيًا تعني «قيد» (entry)؛ لكن «قيد» هو المصطلح الصحيح تقنيًا. على سبيل المثال، لدينا هنا قيدٌ واحدٌ يحتوي على 11 خاصية: اسمه الفريد: «cn=John Doe,dc=example,dc=com»واسمه الفريد النسبي (RDN) هو: «cn=John Doe»واسم الأب الفريد هو: «dc=example,dc=com»dn: cn=John Doe,dc=example,dc=com cn: John Doe givenName: John sn: Doe telephoneNumber: +1 888 555 6789 telephoneNumber: +1 888 555 1232 mail: john@example.com manager: cn=Larry Smith,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: topالقيد السابق مكتوب بصيغة LDIF (صيغة تبادل البيانات في LDAP‏ [LDAP Data Interchange Format])؛ أيّة معلومات تضعها في شجرة معلومات الدليل (DIT) يجب أن تكون بهذه الصيغة؛ كما هي معرَّفة في RFC28492. وعلى الرغم من أن هذا الفصل يستخدم LDAP للاستيثاق المركزي، لكنه يصلح لأي شيء فيه عدد كبير من طلبات الوصول لسندٍ خلفي (backend) تتمحور حول قراءة القيم المبنية على الخاصيات (name:value)؛ تتضمن الأمثلة على ذلك: دفترًا للعناوين، وقائمةً بعناوين البريد الإلكتروني، وضبطًا لخادوم البريد. التثبيتلتثبيت عفريت خادوم OpenLDAP مع أدوات إدارة LDAP التقليدية؛ عليك تثبيت حزمتَيّ slapd و ldap-utils على التوالي وبالترتيب. سيؤدي تثبيت slapd إلى إنشاء ضبط قادر على العمل مباشرةً؛ وخصوصًا إنشاء قاعدة بيانات تستطيع استخدامها لتخزين بياناتك؛ لكن اللاحقة (suffix أو DN الأساسية) ستُحدَّد من اسم نطاق الجهاز المحلي؛ إذا أردت شيئًا مختلفًا، فعدِّل ملف ‎/etc/hosts وبدِّل اسم النطاق باسمٍ ترغب في استخدامه كلاحقة؛ على سبيل المثال، إذا أردت أن تكون اللاحقة هي dc=example,dc=com، فعندها سيحتوي ملف hosts على سطرٍ شبيه بالآتي: 127.0.1.1 hostname.example.com hostnameتستطيع الرجوع إلى الإعدادات القديمة بعد تثبيت الحزمة. ملاحظة: سنستخدم قاعدة بيانات ذات لاحقة dc=example,dc=com. أكمل بتثبيت الحزمة: sudo apt-get install slapd ldap-utilsمنذ إصدارة أوبنتو 8.10، صُمِّمَ slapd ليُضبَط داخل slapd نفسه، باستخدام DIT خاصة به لهذا الغرض مما يسمح بأن يُعدَّ slapd ديناميكيًّا دون الحاجة إلى إعادة تشغيل الخدمة؛ وستتكون قاعدة بيانات الضبط من مجموعة من ملفات LDIF النصية الموجودة في المجلد ‎/etc/ldap/slapd.d؛ طريقة العمل هذه معروفةٌ بعدَّة أسماء: طريقة slapd-config، وطريقة RTC‏ (Real Time Configuration)، أو طريقة cn=config؛ ما زلتَ تستطيع استخدام ملف الضبط التقليدي slapd.conf لكن هذه الطريقة غير مستحسنة؛ وستلغى هذه الميزة تدريجيًا. ملاحظة: تستخدم أوبنتو طريقة slapd-config لضبط slapd، وكذلك هذا الدرس. سيُطلَب منك أثناء التثبيت تعريف «الأوراق الاعتمادية الإدارية» (administrative credentials)؛ وهي الأوراق الاعتمادية المبنية على LDAP لقاعدة rootDN؛ افتراضيًا، يكون DN للمستخدم هو cn=admin,dc=example, dc=com؛ وأيضًا افتراضيًا لا يُنشَأ حساب إداري لقاعدة بيانات slapd-config؛ لذا عليك الاستيثاق خارجيًا للوصول إلى LDAP وسنرى كيفية فعل ذلك لاحقًا. تأتي بعض المخططات الكلاسيكية (cosine، و nis، و inetorgperson) افتراضيًا مع slapd هذه الأيام؛ وهنالك أيضًا مخطط «core» المطلوب ليعمل أي مخطط آخر. ما يجب فعله بعد التثبيتتُعِدّ عملية التثبيت شجرتين لمعلومات الدليل؛ واحدة لاستخدامها في ضبط slapd‏ (slapd-config) وواحدة لبياناتك الشخصية (dc=example,dc=com)؛ لنلقِ نظرةً. هذا ما تبدو عليه قاعدة بيانات slapd-config؛ تذكَّر أن هذه القاعدة مبنية على LDIF وموجودة في ‎/etc/ldap/slapd.d: /etc/ldap/slapd.d/ /etc/ldap/slapd.d/cn=config /etc/ldap/slapd.d/cn=config/cn=module{0}.ldif /etc/ldap/slapd.d/cn=config/cn=schema /etc/ldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif /etc/ldap/slapd.d/cn=config/cn=schema/cn={1}cosine.ldif /etc/ldap/slapd.d/cn=config/cn=schema/cn={2}nis.ldif /etc/ldap/slapd.d/cn=config/cn=schema/cn={3}inetorgperson.ldif /etc/ldap/slapd.d/cn=config/cn=schema.ldif /etc/ldap/slapd.d/cn=config/olcBackend={0}hdb.ldif /etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif /etc/ldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif /etc/ldap/slapd.d/cn=config.ldifملاحظة: لا تُعدِّل قاعدة بيانات slapd-config مباشرةً، أجرِ التعديلات باستخدام بروتوكول LDAP (عبر الأدوات الخاصة). وهذا ما تبدو عليه شجرة معلومات الدليل slapd-config عند طلبها بواسطة بروتوكول LDAP: تنويه: في نسخة خادوم أوبنتو 14.10 وربما ما بعدها، قد لا يعمل الأمر الآتي بسبب علِّة. sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn dn: cn=config dn: cn=module{0},cn=config dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config dn: olcBackend={0}hdb,cn=config dn: olcDatabase={-1}frontend,cn=config dn: olcDatabase={0}config,cn=config dn: olcDatabase={1}hdb,cn=configشرح القيود السابقة: cn=config: الإعدادات العامة.cn=module{0},cn=config: وحدة مُحَمَّلة ديناميكيًا.cn=schema,cn=config: يحتوي على مخطط مستوى النظام (hard-coded).cn={0}core,cn=schema,cn=config: يحتوي على مخطط الأساس (hard-coded).cn={1}cosine,cn=schema,cn=config: المخطط cosine.cn={3}inetorgperson,cn=schema,cn=config: المخطط inetorgperson.olcBackend={0}hdb,cn=config: نوع تخزين 'hdb'.olcDatabase={-1}frontend,cn=config: قاعدة بيانات الواجهة (frontend)، الضبط الافتراضي لقواعد البيانات الأخرى.olcDatabase={0}config,cn=config: قاعدة بيانات ضبط slapd ‏(cn=config).olcDatabase={1}hdb,cn=config: نسخة قاعدة البيانات الخاصة بك (dc=example,dc=com).وهذا ما تبدو عليه شجرة معلومات الدليل dc=example,dc=com: ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com dn dn: dc=example,dc=com dn: cn=admin,dc=example,dc=comشرح القيود السابقة: dc=example,dc=com: أساس DIT.cn=admin,dc=example,dc=com: المدير (rootDN) لشجرة معلومات الدليل هذه (ضُبِط أثناء تثبيت الحزمة).تعديل وملء قاعدة البياناتلنضع بعض المحتويات في قاعدة البيانات؛ حيث سنضيف الآتي: عقدة اسمها People (لتخزين المستخدمين).عقدة اسمها Groups (لتخزين المجموعات).مجموعة اسمها miners.مستخدم اسمه john.أنشئ ملف LDIF وسَمِّه add_content.ldif: dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People dn: ou=Groups,dc=example,dc=com objectClass: organizationalUnit ou: Groups dn: cn=miners,ou=Groups,dc=example,dc=com objectClass: posixGroup cn: miners gidNumber: 5000 dn: uid=john,ou=People,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: john sn: Doe givenName: John cn: John Doe displayName: John Doe uidNumber: 10000 gidNumber: 5000 userPassword: johnldap gecos: John Doe loginShell: /bin/bash homeDirectory: /home/johnملاحظة: من المهم ألّا تتصادم قيم uid و gid في دليلك مع القيم المحلية؛ استخدم مجالات الأرقام الكبيرة؛ فابدأ مثلًا من 5000، وبتكبير قيم uid و gid في ldap، فإنك تسمح أيضًا بسهولة التحكم في ماذا يستطيع أن يفعله المستخدم المحلي، في مقابل ما يفعله مستخدم ldap؛ سنفصِّل هذا الموضوع لاحقًا. أضف المحتويات: ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_content.ldif Enter LDAP Password: ******** adding new entry "ou=People,dc=example,dc=com" adding new entry "ou=Groups,dc=example,dc=com" adding new entry "cn=miners,ou=Groups,dc=example,dc=com" adding new entry "uid=john,ou=People,dc=example,dc=com"سنتحقق من إضافة المعلومات إضافةً صحيحةً باستخدام الأداة ldapsearch: ldapsearch -x -LLL -b dc=example,dc=com 'uid=john' cn gidNumber dn: uid=john,ou=People,dc=example,dc=com cn: John Doe gidNumber: 5000شرح ماذا حصل: ‎-x: ربط بسيط؛ لن تُستخدَم طريقة SASL الافتراضية.‎-LLL: تعطيل طباعة معلوماتٍ إضافيةً.uid=john: «مُرَشِّح» (filter) للعثور على المستخدم john.cn gidNumber: طلب خاصيات معينة لإظهارها (القيمة الافتراضية هي إظهار جميع الخاصيات).تعديل قاعدة بيانات slapdيمكن أن تُطلَب أو تُعدَّل شجرة دليل المعلومات الخاصة بضبط slapd‏ (slapd-config)؛ سنذكر هنا بعض الأمثلة: استخدم الأمر idapmodify لإضافة «فهرس» (خاصية DbIndex) إلى قاعدة بيانات ‎‎‎{1}hdb,cn=config‎ (التي هي dc=example,dc=com)؛ أنشِئ ملفًا اسمه uid_index.ldif فيه المحتويات الآتية: dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: uid eq,pres,subثم نفِّذ الأمر: sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f uid_index.ldif modifying entry "olcDatabase={1}hdb,cn=config"تستطيع تأكيد التغيير بهذه الطريقة: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={1}hdb)' olcDbIndex dn: olcDatabase={1}hdb,cn=config olcDbIndex: objectClass eq olcDbIndex: uid eq,pres,subلنضف الآن مخططًا (schema)، يجب أولًا أن تحوَّل إلى صيغة LDIF؛ تستطيع إيجاد مخططات مُحوَّلة، وغير مُحوَّلة في مجلد ‎/etc/ldap/schema. ملاحظة: حذف المخططات من قاعدة بيانات slapd-config ليس أمرًا بسيطًا؛ تدرب على إضافة المخططات على نظام خاص بالتجارب. قبل إضافة أيّة مخططات، يجب أن تتحقق من أيّة مخططات قد ثبِّتَت مسبقًا (المخرجات الآتية هي المخرجات الافتراضية [out-of-the-box]): sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=schema,cn=config dn dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=configسنضيف مخطط CORBA في المثال الآتي: أنشِئ ملف ضبط التحويل المسمى schema_convert.conf يتضمن الأسطر الآتية: include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/ldapns.schema include /etc/ldap/schema/pmi.schemaأنشِئ مجلد المخرجات ldif_output. حدد فهرس المخطط: slapcat -f schema_convert.conf -F ldif_output -n 0 | grep corba,cn=schema cn={1}corba,cn=schema,cn=configملاحظة: عندما «يحقن» (injects) ‏slapd الكائنات‏ التي لها نفس الاسم الفريد للأب؛ فإنه سيُنشِئ فهرسًا لهذا الكائن؛ ويحتوى الفهرس ضمن قوسين معقوفين: {X}. استخدم slapcat للقيام بالتحويل: slapcat -f schema_convert.conf -F ldif_output -n0 -H \ ldap:///cn={1}corba,cn=schema,cn=config -l cn=corba.ldifالمخطط المحوّل موجودٌ الآن في cn=corba.ldif. عدِّل cn=corba.ldif حتى تصل إلى الخاصيات الآتية: dn: cn=corba,cn=schema,cn=config ... cn: corbaأزل الآن الأسطر الآتية من النهاية: structuralObjectClass: olcSchemaConfig entryUUID: 52109a02-66ab-1030-8be2-bbf166230478 creatorsName: cn=config createTimestamp: 20110829165435Z entryCSN: 20110829165435.935248Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20110829165435Zقد تختلف قيم الخاصيات عندك. في النهاية، استخدم ldapadd لإضافة مخطط جديد إلى شجرة معلومات دليل slapd-config: sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f cn\=corba.ldif adding new entry "cn=corba,cn=schema,cn=config"تأكد من المخططات المُحَمَّلة: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config dn: cn={4}corba,cn=schema,cn=configملاحظة: لكي يستوثق العملاء والتطبيقات الخارجية باستخدام LDAP، فإن عليك ضبط كل واحد منهم ليفعل ذلك؛ راجع توثيق تلك العملاء لمعلومات ملائمة عنهم. التسجيل (Logging)لا غنى عن تفعيل تسجيل slapd عند استخدام تطبيقات تعتمد على OpenLDAP، لكن عليك تفعيله يدويًا بعد تثبيت البرمجيات؛ وإذا لم تفعل ذلك، فستظهر رسائل بدائية غير مفيدة فقط في السجلات؛ ويُفعَّل التسجيل، كغيره من ضبط slapd، عبر قاعدة بيانات slapd-config. يأتي OpenLDAP مع عدّة أنظمة فرعية للتسجيل (مستويات)، تحتوي كلٌ منها على المستوى الأدنى منها؛ مستوى جيد للتجربة هو stats؛ هنالك المزيد من المعلومات حول الأنظمة الفرعية المختلفة في صفحة دليل man slapd-config. أنشِئ ملف logging.ldif بالمحتويات الآتية: dn: cn=config changetype: modify add: olcLogLevel olcLogLevel: statsطبِّق التعديل: sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f logging.ldifوهذا ما سيُنتِج كميّةً كبيرةً من السجلات؛ وربما تحتاج للعودة وتقليل درجة الإسهاب عندما يصبح نظامك نظامًا إنتاجيًا (in production)، لكن ربما يجعل ضبط الإسهاب هذا محرك syslog في نظامك يعاني من كثرة الرسائل، وقد يتجاوز بعضها دون تسجيله: rsyslogd-2177: imuxsock lost 228 messages from pid 2547 due to rate-limitingقد تفكر في تغيير ضبط rsyslog؛ ضع في ملف ‎/etc/rsyslog.conf: # Disable rate limiting # (default is 200 messages in 5 seconds; below we make the 5 become 0) $SystemLogRateLimitInterval 0ثم أعد تشغيل عفريت rsyslog: sudo service rsyslog restartترجمة -وبتصرف- للمقال Ubuntu Server Guide: OpenLDAP Server.