ubuntu server guide الاستيثاق الشبكي – استخدام SSSD مع Active Directory على أوبنتو


عبد اللطيف ايمش

يشرح هذا الدرس استخدام SSSD للاستيثاق من تسجيلات دخول المستخدم باستخدام Active Directory بطريقة «ad»؛ أما في الإصدارات القديمة من sssd، كان من الممكن أن يتم الاستيثاق بطريقة «ldap»، لكن عندما يتم الاستيثاق باستخدام مايكروسوفت ويندوز Active Directory، فكان من الضروري تثبيت إضافات POSIX AD في المتحكم بالنطاق؛ لكن طريقة «ad» تبسِّط الضبط ولا تتطلب أيّة تغيرات في بنية المتحكم بالنطاق.

ubuntu-server-sssd-active-directory.thum

الشروط المسبقة والافتراضات والمتطلبات

  • نفترض أن لديك 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».

المصادر

ترجمة -وبتصرف- للمقال Ubuntu Server Guide: SSSD and Active Directory.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن