يشرح هذا الدرس استخدام SSSD للاستيثاق من تسجيلات دخول المستخدم باستخدام Active Directory بطريقة «ad»؛ أما في الإصدارات القديمة من sssd، كان من الممكن أن يتم الاستيثاق بطريقة «ldap»، لكن عندما يتم الاستيثاق باستخدام مايكروسوفت ويندوز Active Directory، فكان من الضروري تثبيت إضافات POSIX AD في المتحكم بالنطاق؛ لكن طريقة «ad» تبسِّط الضبط ولا تتطلب أيّة تغيرات في بنية المتحكم بالنطاق.
الشروط المسبقة والافتراضات والمتطلبات
- نفترض أن لديك Active Directory مضبوط وجاهز للعمل.
- نفترض أن المتحكم بالنطاق يعمل كخادوم DNS.
- نفترض أن المتحكم بالنطاق هو خادوم DNS الرئيسي المحدد في /etc/resolv.conf.
- نفترض أن قيود _kerberos، و _ldap، و _kpasswd ...إلخ. مضبوطة في منطقة DNS.
- نفترض أن الوقت مُزامَنٌ على المتحكم بالنطاق.
- النطاق المستخدم في هذا المثال هو myubuntu.example.com.
التثبيت
يجب تثبيت الحزم krb5-user ،samba ،sssd و ntp؛ نحتاج إلى تثبيت سامبا حتى لو لم يُقدِّم الخادوم أيّة مشاركات. هنالك حاجة لحقل Kerberos والاسم الكامل أو عنوان IP للمتحكمات بالنطاق. أدخِل الأمر الآتي لتثبيت تلك الحزم:
sudo apt-get install krb5-user samba sssd ntp
انظر إلى القسم التالي لطريقة الإجابة عن الأسئلة التي يسألها السكربت المشغَّل بعد تثبيت حزمة krb5-user.
ضبط Kerberos
ستُسأل عند تثبيت حزمة krb5-user عن اسم الحقل (realm name) بأحرفٍ كبيرة؛ وعن خادوم مركز توزيع المفاتيح (أي المتحكم بالنطاق) وعن الخادوم المدير (المتحكم بالنطاق أيضًا في هذا المثال)؛ وهذا ما سيكتب القسمين [realm] و [domain_realm] في ملف /etc/krb5.conf؛ هذه الأقسام ليست ضرورية إن كان الاكتشاف التلقائي للنطاق مفعّلًا، خلا ذلك فكلاهما ضروريٌ.
إذا كان اسم النطاق myubuntu.example.com، فأدخِل اسم الحقل كما يلي: MYUBUNTU.EXAMPLE.COM.
وبشكل اختياري، عدِّل الملف /etc/krb5.conf مضيفًا بعض الخيارات لتحديد مدة صلاحية بطاقة Kerberos (هذه القيم جيدة لتستخدم قيمًا افتراضيةً):
[libdefaults] default_realm = MYUBUNTU.EXAMPLE.COM ticket_lifetime = 24h # renew_lifetime = 7d
إذا لم تُحدَّد قيمة default_realm، فربما من الضروري تسجيل الدخول باستخدام «username@domain» بدلًا من «username».
يجب أن يكون وقت النظام في عضو نطاق Active Directory متوافقًا مع مثيله في المتحكم بالنطاق، وإلا فستفشل عملية الاستيثاق باستخدام Kerberos؛ فمثلًا، يمكن أن يُوفِّر خادوم المتحكم بالنطاق خدمة NTP؛ عدِّل الملف /etc/ntp.conf:
server dc.myubuntu.example.com
ضبط سامبا
يجب أن يُستخدَم سامبا لتوفير خدمات netbois/nmbd المتعلقة بالاستيثاق من Active Directory، حتى وإن لم تُشارَك أيّة ملفات. عدِّل الملف /etc/samba/smb.conf وأضف ما يلي إلى قسم [global]:
[global] workgroup = MYUBUNTU client signing = yes client use spnego = yes kerberos method = secrets and keytab realm = MYUBUNTU.EXAMPLE.COM security = ads
ملاحظة: بعض المراجع تقول أنه يجب تحديد «password server» وأن يشير إلى المتحكم بالنطاق؛ لكن هذا ضروريٌ فقط إن لم يُضبَط DNS للعثور على المتحكم بالنطاق؛ حيث يَعرِض سامبا افتراضيًا تحذيرًا إن ضُبِطَ الخيار «password server» مع «security = ads».
ضبط SSSD
لا يوجد ملف ضبط افتراضي أو مثال عن ملف الضبط لملف /etc/sssd/sssd.conf في حزمة sssd؛ فمن الضروري إنشاء واحد؛ ها هو ذا أصغر ملف ضبط يمكن أن يعمل:
[sssd] services = nss, pam config_file_version = 2 domains = MYUBUNTU.EXAMPLE.COM [domain/MYUBUNTU.EXAMPLE.COM] id_provider = ad access_provider = ad # Use this if users are being logged in at /. # This example specifies /home/DOMAIN-FQDN/user as $HOME. # Use with pam_mkhomedir.so override_homedir = /home/%d/%u # Uncomment if the client machine hostname doesn't match # the computer object on the DC. # ad_hostname = mymachine.myubuntu.example.com # Uncomment if DNS SRV resolution is not working # ad_server = dc.mydomain.example.com # Uncomment if the AD domain is named differently than the Samba domain # ad_domain = MYUBUNTU.EXAMPLE.COM # Enumeration is discouraged for performance reasons. # enumerate = true
بعد حفظ الملف، فانقل الملكية إلى الجذر، وغيِّر أذونات الملف إلى 600:
sudo chown root:root /etc/sssd/sssd.conf sudo chmod 600 /etc/sssd/sssd.conf
حيث سيرفض sssd أن يعمل إن لم تكن الملكية أو الأذونات صحيحةً.
التأكد من ضبط nsswitch.conf
السكربت الذي يعمل بعد تثبيت حزمة sssd يُجري بعض التعديلات على ملف /etc/nsswitch.conf تلقائيًا؛ حيث يجب أن يكون كما يلي:
passwd: compat sss group: compat sss ... netgroup: nis sss sudoers: files sss
تعديل ملف /etc/hosts
أضف اسمًا بديلًا الذي يحدد اسم النطاق الكامل للحاسوب المحلي في ملف /etc/hosts كما يلي:
192.168.1.10 myserver myserver.myubuntu.example.com
هذا مفيد لاستخدامه مع تحديثات DNS الديناميكية.
الانضمام إلى Active Directory
عليك الآن إعادة تشغيل ntp و samba، وتشغيل sssd:
sudo service ntp restart sudo restart smbd sudo restart nmbd sudo start sssd
ثم اختبر الضبط بمحاولة الحصول على بطاقة Kerberos:
sudo kinit Administrator
تحقق من البطاقة باستخدام:
sudo klist
إذا كانت هنالك بطاقة مع تاريخ انتهاء الصلاحية، فقد حان الوقت للانضمام إلى النطاق:
sudo net ads join -k
التحذير «No DNS domain configured. Unable to perform DNS Update.» يعني أنه ليس هنالك اسم بديل (أو اسم بديل صحيح) في ملف /etc/hosts، ولا يمكن للنظام توفير الاسم الكامل له؛ فعليك التحقق من الاسم البديل في /etc/hosts كما هو مشروح في قسم «تعديل ملف etc/hosts/» أعلاه.
الرسالة «NT_STATUS_UNSUCCESSFUL» تشير إلى أن الانضمام إلى النطاق قد فشل وأن هنالك شيء ما خاطئ، عليك مراجعة الخطوات السابقة وإصلاح المشكلة قبل الإكمال.
هنالك تحققان آخران اختياريان للتأكد من أن الانضمام إلى النطاق قد نجح؛ لاحظ أنه إذا نجح الانضمام إلى النطاق لكن إذا فشل أحد أو كلا التحققين، فربما عليك الانتظار لدقيقةٍ أو دقيقتين قبل المحاولة مرةً أخرى؛ حيث يبدو أن بعض التغيرات لا تحدث في الوقت الحقيقي.
1. التحقق الأول:
تحقق من «وحدة التنظيم» (Organizational Unit) لحسابات الحواسيب في Active Directory للتأكد من أن حساب الحاسوب قد أُنشِئ (وحدات التنظيم هي موضوع خارج عن نطاق هذا الدرس).
2. التحقق الثاني:
نفِّذ الأمر الآتي لمستخدم AD معيّن (المدير مثلًا):
getent passwd username
ملاحظة: إذا ضبطت الخاصية «enumerate = ture» في ملف sssd.conf، فإن الأمر getnet passwd دون تمرير اسم مستخدم كوسيط سيَعرض جميع مستخدمي النطاق؛ ربما يكون هذا السلوك مفيدًا للاختبار، لكنه بطيء وغير مستحسن للخواديم الإنتاجية.
اختبار الاستيثاق
يجب أن يكون الآن من الممكن الاستيثاق عبر Active Directory:
su - username
إذا عَمِلَ الأمر السابق بنجاح، فيجب أن تعمل بقية طرق الاستيثاق (getty، و SSH).
إذا أُنشِئ حساب الحاسوب، مما يشير إلى أن النظام قد انضم إلى النطاق، لكن فشل الاستيثاق؛ فربما من المفيد مراجعة الملف /etc/pam.d و sssdwitch.conf وأيضًا تغيرات الملفات المشروحة آنفًا في هذا الدرس.
مجلدات المنزل مع pam_mkhomedir
عند تسجيل الدخول باستخدام حساب مستخدم Active Directory، فمن المحتمل ألّا يكون للمستخدم مجلد منزل، ويمكن حل هذه المشكلة باستخدام pam_mkhomedir.so، حيث سيُنشَأ مجلد المنزل للمستخدم عند تسجيل الدخول؛ عدِّل ملف /etc/pam.d/common-session، وأضف هذا السطر مباشرةً بعد «session required pam_unix.so»:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
ملاحظة: قد تحتاج إلى «override_homedir» في ملف sssd.conf للعمل عملًا صحيحًا، تأكد من ضبط تلك الخاصية هناك.
الاستيثاق في سطح مكتب أوبنتو
من الممكن أيضًا الاستيثاق من المستخدمين في سطح مكتب أوبنتو باستخدام حسابات Active Directory؛ لكن لن تظهر أسماء حسابات مستخدمي AD في قائمة الاختيار مع المستخدمين المحليين، لذلك يجب تعديل lightdm؛ وذلك بتحرير الملف /etc/lightdm/lightdm.conf.d/50-unity-greeter.conf وإضافة السطرين الآتيين:
greeter-show-manual-login=true greeter-hide-users=true
أعد الإقلاع لإعادة تشغيل lightdm، حيث يمكن الآن تسجيل الدخول باستخدام حساب تابع للنطاق إما بالشكل «username» أو «username/username@domain».
المصادر
- صفحة مشروع SSSD.
- مقالة «DNS Server Configuration guidelines».
- صفحة «Active Directory DNS Zone Entries».
- صفحة «Kerberos config options».
ترجمة -وبتصرف- للمقال Ubuntu Server Guide: SSSD and Active Directory.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.