أعجوبة

البرمجيات الحُرة والمفتوحة المصدر

أدوات المستخدم

أدوات الموقع


docs:pam

اختلافات

عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.

رابط إلى هذه المقارنة

جانبي المراجعة السابقةالمراجعة السابقة
المراجعة التالية
المراجعة السابقة
docs:pam [2008/06/11 10:16] dabashdocs:pam [2015/04/23 03:20] (حالي) – تحرير خارجي 127.0.0.1
سطر 1: سطر 1:
 +{{tag>مقالات أمن شبكات دبش pam ssh}} 
 +~~ODT~~
 +====== مواثقة المستخدمين  ======
 +تشرح هذه المقالة كيف تخزن معلومات المستخدمين والمجموعات وكيف يتم مواثقة المستخدمين في نظام لينكس (عبر وحدات المواثقة  المدمجة Pluggable Authentication Modules وتختصر PAM) وكيف تعمل على تأمين المواثقة في النظام.
  
 +  * المؤلف: Peter Hernberg
 +  * الموقع: http://tldp.org/HOWTO/html_single/User-Authentication-HOWTO/
 +  * موقع اخر: http://www.linuxdocs.org/HOWTOs/User-Authentication-HOWTO/
 +  * ترجمة: زياد حسين دبش
 +
 +===== مقدمة =====
 +
 +===== كيف تخزن معلومات المستخدمين =====
 +==== ملف ‪/etc/passwd‬ ====
 +
 +
 +تقريبا على جميع توزيعات لنوكس ( والتجارية أيضا مثل يونكس) ، تخزن معلومات عن المستخدم فى /etc/passwd, ، وهو الملف النص الذي يحتوي على حساب المستخدم لتسجيل الدخول ، كلمة السر مشفره ، رقم كود المستخدم (يسمى رمز المستخدم) فريد من نوعه (لا يمكن استخدامه من قبل مستخدم اخر) ، عدديه رقم تعريف المجموعة (تسمى رمز المجموعة) ، حقل اختياري التعليق والملاحظات (وعادة ما تحتوي على بنود مثل الاسم الحقيقي ، رقم الهاتف ، الخ) ،   الصفحه الرئيسية مثل (home/john/)، واجهة الدخول التي يفضلونها(text mode).
 +
 +نموذج لما سبق فى /etc/passwd تبدو  كهذا : 
 +<code>
 +pete:K3xcO1Qnx8LFN:1000:1000:Peter Hernberg,,,1-800-FOOBAR:/home/pete:/bin/bash
 +</code>
 +وكما ترون ، انها ببساطة خطية ولا تحوي فراغ  . ويتضمن كل ادخال ستة خانات او حقول الوارد وصفها اعلاه ، مع فصل بينها بواسطة (**:**). واذا كان هذا يعتبر معقد كما التوثيق للمستخدم  ، لن تكون هناك حاجة لهذا الشرح. 
 +
 +==== كلمات سر الظل ====
 +
 +بالنظر في  /etc/passwd ، فانه من المحتمل ان تشاهد شيئا كهذا : 
 +<code>
 +pete:x:1000:1000:Peter Hernberg,,,1-800-FOOBAR:/home/pete:/bin/bash
 +</code>
 +اين ذهبت كلمة السر المشفره؟ قبل ان اقول لكم اين ذهبت ، اعتقد انه يتطلب قليلا من التوضيح. 
 +
 +الملف/etc/passwd ، الذي يتضمن معلومات عن جميع المستخدمين ، بما فيها كلمة السر مشفره ، يمكن قراءته من قبل جميع المستخدمين ، مما يجعل من الممكن لاي مستخدم الحصول على كلمة سر مشفره للجميع على النظام. ورغم ان كلمات السر هي مشفره بالاصل، الا ان برامج كسر كلمات السر متاحة على نطاق واسع. لتفادي  هذا التهديد الامني المتزايد ، طور ملف الظل ليحوي كلمات السر. 
 +
 +وعند تشغيل نظام  الظل  ،فأن كلمة السر فى ملف  /etc/passwd  يستعاض عنها بالحرف "X" و كلمة السر الحقيقية للمستخدم يتم تخزينها مشفره فىملف /etc/shadow.. لان /etc/shadow.  لا يمكن قراءته الا من قبل المستخدم الجذر (root،) اي مستخدم ماكر لا يستطيع كسر كلمات السر للمستخدمين الاخرين . في كل حقل (سطر) في /etc/shadow تتضمن اسم المستخدم ، كلمة السر مشفره ، وعدد من المجالات المتعلقة بانتهاء صلاحية كلمة السر. 
 +حقل نموذجي يشبه هذا : 
 +<code>
 +pete:/3GJllg1o4152:11009:0:99999:7:::
 +</code>
 +
 +==== ملفي ‪/etc/group‬ و ‪/etc/gshadow‬ ====
 +
 +مجموعة المعلومات التي يتم حفظها في /etc/group. الشكل مماثل لملف /etc/passwd, ، مع المدخلات التي تحتوي على حقول لاسم المجموعة ، كلمة السر ، رقم تعريف رقمية (رمز المجموعة) ،  قائمة المجموعات تفصلها فاصلة .
 + اي حقل (سطر) /etc/group سيبدو هكذا : 
 +
 +pasta:x:103:spagetti,fettucini,linguine,vermicelli
 +
 +
 +وكما ترون من "x" فى كلمة السر ،في حقل كلمة السر للمجموعة يمكن ان تكون كذلك. كما وان معظم المجموعات تقريبا ليس لها كلمات سر خاصة بها ، ومن الجدير بالذكر ان المعلومات الخاصة بكلمة السر  للمجموعات  تخزن فى /etc/gshadow.
 +
 +==== كلمات السر المشفرة MD5 ====
 +
 +تقليديا ، كانت كلمات السر في يونيكس مشفره مع crypt() function القياسية. (لمزيد من المعلومات عن crypt() function القياسية ، انظر crypt(3) manpage.) وكما تطورت الحواسيب واصبحت سريعة، كلما اصبح كسر كلمات السر المشفره بهذه الطريقة اسهل. وكما وفرت شبكة الانترنت ، الأدوات المهمة لكسر كلمات السر - عبر عدة مواقع استضافه. كثير من احدث التوزيعات توزع مع خيار تشفير كلمات السر مع خوارزميه  MD5 hash اقوى. (لمزيد من المعلومات حول الخوارزميه MD5 hash ، انظر RFC 1321). في حين كلمات السر بواسطة MD5  لن تزيل خطر كسر كلمة السر ، فانها سوف تجعل كسر كلمات السر اكثر صعوبة. 
 +
 +==== التخبط في الفوضى ====
 +
 +وكما ترون ، هناك عدد من الطرق المختلفة لتحقق من معلومات المستخدم التي يمكن تخزينها على جهازك (كلمات سر الظل دون تشفيرmd5ـ  ، /etc/passwd  مع تشفيرmd5 ، الخ). كيف يمكن لبرامج مثل login و su  معرفة كيفية التحقق من كلمة السر؟ والاسوأ من ذلك ، ما اذا كنت تريد تغيير الطريقة التي يتم تخزين كلمات السر على جهازك؟ كيف للبرامج التي بحاجة الى كلمة السر ان نعلم ان كلمات السر يتم تخزينها بشكل مختلف؟ PAM هو الحل. 
 +
 +===== وحدات المواثقة  المدمجة Pluggable Authentication Modules =====
 +تعتبر PAM لب نظام المواثقة في أي توزيعة لينكس حديثة
 +
 +==== لماذا ؟ ====
 +بالعودة الى بدايات لينكس ، اذا كان احد البرامج ، مثل su  ، passwd ، login، او xlock ، في حاجة الى توثيق المستخدم ، فانه ببساطة يقوم بقراءة المعلومات الضروريه من /etc/passwd  .اما اذا كان يحتاج الى تغيير كلمة المرور للمستخدمين ، فإنه ببساطة يقوم بتحرير /etc/passwd. هذه طريقة بسيطة ولكن ضعيفة من حيث الامان والسيطرة بحيث ادت الى  العديد من المشاكل لمديري النظام والتطبيقات. كما وان md5   و shadow passwords   أصبحت متزايدة الشعبية ، فكل برنامج يحتاج الى توثيق المستخدم قد يتطلب معرفة كيفية الحصول على المعلومات الصحيحه عند التعامل مع عدد مختلف من نظم التوثيق والتحقق للمستخدم . كما وان اذا كنت تريد ان تغير نظام توثيق المستخدم الخاص بك ، فأن كل هذه البرامج كان لا بد من اعادة تجميع (recompiled) . PAM  يزيل هذه الفوضى من خلال تمكين البرامج التحقق من  المستخدمين  بشفافيه ومرونة ، بغض النظر عن الكيفيه التي يتم تخزين معلومات عن المستخدم. 
 +
 +نقلا عن دليل نظام لينوكس-PAM   : "ان الغرض من مشروع لينكس-PAM هو الفصل بين منح امتياز تطوير البرمجيات من تطوير خطط التوثيق آمنة وملائمة. ويتم ذلك عن طريق توفير مكتبات وظائف في حال ان التطبيق يمكن ان يستخدمه   للتوثق من المستخدم  ".
 + مع PAM ، ولا يهم ما اذا كانت  كلمة السر الخاصة بك مخزنه فى /etc/passwd او على خادم في هونغ كونغ. عندما يحتاج برنامج لتوثيق  المستخدم ، PAM يوفر المكتبه التي تحتوي على مهام التوثيق السليم . لأن هذه المكتبه تحمل بشكل ديناميكي ، وتغيير خطط التوثيق ويمكن أن يتم ببساطة بتحرير ملف التهيءه. 
 +
 +كما اسلفنا فأن المرونة هي واحدة من اكبر نقاط القوة في PAM. اذ يمكن ان تهيء بعض  البرامج لحصر التحقق على مستخدمين معينيين، والا تسمح لمستخدمين اخرين  ،ايضا  لتحذير عند محاولة بعض البرامج لتوثيق ، او حتى الى حرمان جميع المستخدمين من امتيازات  الدخول.
 +ان تصميم PAM المعياري يعطيك سيطره كاملة على كيفية توثيق والتحقق من المستخدمين.
 +
 +==== ملفات اعدادات  PAM ====
 +يتم تخزين ملفات الاعدادات  فى المجلد /etc/pam.d/.. وبالقاء نظرة سريعة على المجلد قد نجد التالي بالزيادة او النقصان حسب التوزيعة المستخدمة
 +
 +<code>
 +~$ cd /etc/pam.d
 +/etc/pam.d/$ ls
 +  chfn chsh login other passwd su xlock    sshd 
 +/etc/pam.d/$
 +</code>
 +
 +لنلقي نظر على تركيبة اعدادات PAM ولناخذ الملف login على سبيل المثال
 +<code>
 +/etc/pam.d/$ cat login
 +  # PAM configuration for login
 +  auth       requisite  pam_securetty.so
 +  auth       required   pam_nologin.so
 +  auth       required   pam_env.so
 +  auth       required   pam_unix.so nulok
 +  account    required   pam_unix.so
 +  session    required   pam_unix.so
 +  session    optional   pam_lastlog.so
 +  password   required   pam_unix.so nullok obscure min=4 max=8
 +</code>
 +
 +==== صيغة الاعدادات ====
 +
 +اعدادات ملفات PAM تأخذ الشكل التالي
 +
 +  type  control  module-path  module-arguments
 +  
 +
 +بالعودة الى المثال السابق فتحنا ملف التوثيق التابع للامر login فان التركيبة للملف تكون على النحو التالي
 +  *** type**: يحدد ما هو نوع التوثيق لاستخدامها لهذه الوحدة. كما وان وحدات من نفس النوع يمكن وضعها في رزم  ، والتي تحتاج الى  توثيقات متعددة للمستخدم  .وهذه تقسم الى اربعة انواع :
 +    * account يقرر ما اذا كان يسمح للمستخدم الوصول الى الخدمة ، وفي ما اذا كانت كلمات السر قد انتهت صلاحيتها ، الخ.
 +    * auth تحديد ما اذا كان المستخدم هو نفسه الذي يدعي ان يكون ام لا ، عادة عن طريق كلمة سر ، ولكن ربما أكثر وذلك باستخدام وسائل  معقدة ، مثل biometrics .ا
 +    * Password  يوفر آلية للمستخدم كلمة السر. 
 +    * session  من الاشياء التي ينبغي القيام به قبل و / أو بعدالتحقق من المستخدم,  وهذا قد يتضمن اشياء مثل mounting/unmounting  المجلد الرئيسي للمستخدم ، تسجيل حالاات الدخول والخروج ،اتاحة أو تقييد الخدمات المتاحة للمستخدم. 
 +
 +في ملف إعداد الولوج login، نحن نرى نوع واحد على الاقل لكل نوع من انواع الدخول. وبما ان هذا البرنامج الذي يتيح للمستخدم تسجيل الدخول، فإنه من المفهوم انه بحاجة الى الحصول على جميع انواع التوثيق المختلفة انفة الذكر.
 +
 +  *** control (التحكم)**: يحدد ما ينبغي القيام به في التوثيق في حال  فشل هذا النموذج. تقسم الى اربعة انواع :
 +    * requisite **( أساسي, ضروري)**عدم التصديق على النتائج عن طريق هذا النموذج ينتهي بنفي فوري للتوثيق.
 +    * required **( مطلوب)** فشل في نتائج التوثيق يؤدي ايضا على رفض التوثيق ، ولكن PAM وعلى الرغم  من النتائج الاولية فانه سيكمل تفحص كل النماذج الأخرى المدرجه لهذه الخدمة قبل رفض التوثيق.
 +    * sufficient  **(كافي)**اذا كان التوثيق من خلال هذا النموذج هو النجاح ، يتم منح النجاح  التوثيق ، حتى وان  فشل نموذج (required ) في السابق .
 +    * optional **(اختياري)**ما اذا كان هذا النموذج قد نجح او فشل فهو الوحيد الذي يعتد به ، اذا كان هو النموذج الوحيد من نوعه لهذه الخدمة.
 +
 +في ملف الاعدادات  لتسجيل الدخول login ، نرى ما يقرب من جميع  مختلف أنواع الرقابة. معظم النماذج المطلوبة pam_unix.so (الوحدة الرئيسية التوثيق) ، والوحدة المطلوبة requisite الوحيدة هي pam_securetty.so  (التفحص للتأكد من ان المستخدم يستخدم او يعمل على console امنه (، والنموذج الاختياري الوحيد هو pam_lastlogin.so   (الوحدة التي تسترجع معلومات عن احدث دخول للمستخدم).
 +
 +  * **module-path:** يحدد اي وحدة تستخدام و (اختياريا) أين تجدها. معظم الاعدادات تحتوي فقط على اسم الوحدة ، كما هو الحال في ملف التسجيل login المذكور سابقا. عندما يكون هذا هو الحال ، PAM  يقوم بالبحث عن الوحدات في المجلد  الافتراضي ، عادة يكون /usr/lib/security. ومع ذلك ، لو كان لديك توزيعة لينكس مطابقة لنظام ملفات لينكس القياسيه ، فان وحدات PAM  يمكن العثور عليها فى /lib/security.
 +
 +  * **module-arguments**: هي الخيارات التي تمرر الى الوحدة لتدقيقها, فكل وحدة لها خياراتها الخاصة  . فمثلا في ملف الاعدادات login  يمكننا ان نمرر الخيار "nulok"  ( "null ok", يمرر هذا الخيار الى pam_unix.so للدلالة على ان كلمة السر الفارغة مقبولة 
 +
 +==== أمثلة على ملفات الإعدادات ====
 +
 +
 +امثلة على استخدام PAM
 +
 +مثال 1
 +
 +**حصر المستخدم بامكانية دخولة النظام باوقات معينة**
 +
 +سأطرح موضوع وهو كيفيه حصر المستخدم بامكانية دخولة النظام فقط بساعات وايام العمل الرسمية ومنعة من استخدامه في غير ذلك كايام العطل وبعد الدوام والعطلة الاسبوعية
 +لهذا سنتكلم عن ملفين للتحكم بهذه الخاصية
 +<code>
 +/etc/security/time.conf
 +/etc/pam.d/login
 +</code>
 +لذلك نحتاج ان نغير في الملف /etc/pam.d/login
 +وذلك باضافة pam_time.so
 +
 +كالتالي
 +
 +<code>
 +account          required             /lib/security/pam_time.so
 +</code>
 +وكذلك تغير الملف
 +/etc/security/time.conf
 +
 +على سبيل المثال
 +في هذا المثال هناك خدمتان وهما امكانة الدخول للنظام (login) والمحطة الطرفية التي ينطبق عليها هذا الشرط ليتمكن المستخدم من استعمالها للدخول الى النظام (ttyp*)وهي في المثال كل المحطات الطرفية.في المثال التالي كل المستخدمين باستثناء المستخدم user1 بامكانهم الدخول الى النظام من اي محطة طرفية في خلال كل الايام من الساعة 9 صباحا الى الساعة 6والنصف مساءا
 +<code>
 +login;tty*;!user1;Al0900-1830
 +</code>
 +مثال اخر
 +فقط المستخدم ستيف بامكانة الدخول خلال ايام العطل من الساعة 7 صباحا وحتى الساعة 5 مساءا
 +<code>
 +login;*;steve;Wk0700-1700
 +</code>
 +مثال اخر
 +المستخدم بيبلو والمستخدم فرودو بامكانهم الدخول للنظام مابين الساعة 8 صباحا والساعة 5 مساءا ماعدا يوم الاحد
 +<code>
 +login;*;bilbo|frodo;AlSu0800-1700
 +</code>
 +صيغة الجملة كالتالي
 +<code>
 +services;ttys;users;times
 +</code>
 +التعابير المنطقية &|!
 +تطبق على user و terminal و time
 +بحيث تاتي اشارة ! قبل المستخدم والمحطة الطرفية والوقت لدلالة على الا ستثناء
 +وتأتي اشارة & و | للدلالة على و , او
 +services
 +وهي قائمة الخدمات التي يمكن ان تطبق عليها القواعد والشروط
 +ttys
 +قائمة المحطات الطرفية التي تنطبق عليه الاحكام والشروط من قبل PAM
 +users
 +قائمة المستخدمين الذين تطبق عليهم الاحكام والشروط
 +times
 +الوقت : وهو قائمة الايام والفترة التي ينطبق بها احكام وشروط PAMبحيث ان اليوم يرمز له بحرفين مثلا MoTuSa يرمز ليوم الاثنين والثلاثاء والسبت
 +لاحظ ان تكرار اسم اليوم كالتالي MoMo تعني باستثناء يوم الاثنين
 +مثال اخر MoWk تعني كل ايام الاسبوع باستثناء الاثنين لانة تكرر بذكرة مباشرة وانة ضمن كل ايام الاسبوع فبهذا تم استثناءة
 +الحروف التي ترمز للايام هي
 +<code>
 +Mo:Monday
 +Tu: Thursday
 +We: Wednesday
 +Th: Thursday
 +Fr: Friday
 +Sa: Saturday
 +Su: Sunday
 +Wk: week days without week end
 +Wd: week end
 +Al: all 7 days
 +</code>
 +مدى الوقت ويقسم الى خانتين تفصلهنا اشارة (-) كل جزء يتكون من توقيت 24 ساعة بصورة HHMM
 +بحيث ان الجزء الاول يرمز للبداية والجزء الاخر يرمز للنهاية
 +ملاحظة
 +هذا المثال لا يغطي كل استخدامات PAM ولكنة فقط يتحدث عن تحديد الوقت لدخول المستخدم الى النظام بشكل مختصر
 +
 + مثال 2
 +
 +**كيف نستخد PAM للتحكم بالخدمات **
 +
 +خلال عملي واجهني تحدي كيف امنع المستخدم رووت من الدخول على النظام مباشرة من خلال خدمة SSH
 +
 +تحت /etc/pam.d هناك ملفات ترتبط باي خدمة (service ) او امر ما موجود على النظام مثل sudo, login, sshd كما في المشاركة السابقة تحدثنا عن login لذ في هذه الحالة سنفتح ملف /etc/pam.d/sshd
 +كل مافي الامر هو اضافة السطر التالي في بداية الملف
 +<code>
 +auth       required     pam_listfile.so item=user sense=allow file=/etc/sshd/sshd.allow onerr=fail
 +</code>
 +هذا السطر يقوم بالتدقيق على الاسم المستخدم من خلال الخدمة ssh (ﻻحظ ان الملف اسمه sshd لذا فهو يرتبط بالخدمة مباشرة) فاذا كان ضمن المستخدمين المصرح لهم بهذه الخدمة والمذكورين في ملف /etc/sshd/sshd.allow فانة يستجيب لطلبه ويفتح له الخدمة 
 +
 +ﻻحظ استخدمنا شرط التدقيق required اي ان تحقيق هذا الشرط ﻻ بد منه واﻻ فان التدقيق لن يكمل للتحقق من الشروط في السطور التالية في الملف.
 +
 +في الملف sshd.allow المذكور انفا علينا ان نفتحه وندرج في كل سطر اسم المستخدمين المصرح لهم باستخدام هذه الخدمة وبما اننا نريد ان نمنع المستخدم root من استخدام هذه الخدمة فانة يترتب علينا ان ندرج اسماء المستخدين المسموح لهم بذلك فقط
 +
 +onerr=fail اذا كان الملف غير موجود او هيئة الملف غير صحيحة فان العم PAM لا ولن يسمح بلاتصال
 +
 +التحدي الان هو كيف اعمل العكس 
 +فلا يعقل ان نقوم بسرد جميع المستخدمين في حين اننا نريد ان نمنع مستخدم واحد او اثنين
 +
 +قما قلنا سابقا لتفادي ادراج جميع اسماء المستخدمين في ملف المستخدمين المسموح لهم باستخدام خدمة معينه علينا ان ننظر الى الوضع العكسي وذلك بتشغيل PAM لمنع المستخدمين المدرجين في ملف ما 
 +لذا نقوم بعكس الية التحقق لتكون كالتالي 
 +
 +<code>
 +
 +auth  required   pam_listfile.so item=user sense=deny file=/etc/sshd/sshd.deny onerr=succeed
 +</code>
 +غيرنا نوع التدقيق من مسموح sense=allow الى غير مسموح sense=deny
 +انشاء ملف جديد يحوي اسماء المستخدمين الغير مسموح لهم باستخدام هذه الخدمة file=/etc/sshd/sshd.deny
 +
 +onerr=succeed اذا حصل خطا ما فان العم PAM وفي جيع الحالات لن يسمح بلاتصال ويرجع رساله PAM_SUCCESSلدلالة على ان حاسة التدقيق نجحت والتي هي sense=deny
 +
 +ملاحظة
 +امر PAM واسع ومتشعب وكبير يحتاج الى متابعة ومطالعة
 +
 +تم....
 +
 +
 + --- //[[zdabash@gmail.com|زياد حسين دبش]] 2008/06/03 14:11//

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki