Home Previous Up Next4.9 إدارة النظام
حول
المحتويات
مشاريع
ثواب
مقالات
تنزيل
English

4.9 إدارة النظام

اقتباسات هذا الفصل:

  • "الاختبارات تظهر وجود العثرات bugs وليس عدم وجودها."
        -- Dijkstra
  • "كلما قال أحدهم 'نظرياً' فإنه يعني 'ليس في الحقيقة'."
        -- Dave Parnas

محتويات هذا الفصل:

4.9.1 مقدمة

على الرغم من أن إدارة أي نظام تعتبر أمر صعبا ومسؤولية كبيرة حيث هناك الكثير من الأمور المعقدة التي على مدير النظام القيام بها من تأمين الشبكة والإنتباه إلى أذونات الملفات (من يسمح له بماذا) وحماية الملفات والتأكد من أن ملفات أخرى كما هي والبحث عن المخربين وكشفهم وأهم شيء إبقاء النظام قيد العمل Up and Running خصوصا أن هناك الكثير من المخربين و الكثير من من يريدون أن يثبتوا للعالم أنهم أذكى بتخريب أنظمة الغير، تصبح هذه المهمة سهلة جدا بوجود نظام مثل لينكس وأدوات مثل GNU. أحاول أن أبقي الحديث بسيطا وموجها لشخص عادي لذلك إذا كنت تريد أن تكون مدير نظام حقيقي لا تكتفي بهذه المعلومات. قد تكون هناك بعض المعلومات معقدة في البداية ولكنها ستتوضح لاحقا ربما لن تستعمل كل المعلومات هنا ولكن من الجيد قراءتها كاملة

لن نتحدث عن تأمين النظام مادياً (فيزيائياً) مثل حماية الجهاز من الفك، وضع كلمة سر على إعدادات BIOS

 تلميح

كلمات السر التي يضعها المصنع قد تتخطى كلمة سر BIOS ومنها j262 و AWARD_SW و AWARD_PW و lkwpeter و Biostar و AMI و Award و bios و BIOS و setup و cmos و AMI! و SW1 و AMI?SW1 و password و hewittrand و SHIFT + s y x z هذا إضافة لإمكانية نزع البطارية انظر http://astalavista.box.sk لهذا لا تعتمد على هذه الكلمات وحدها انظر بند تشفير القرص في فصل إدارة الأقراص.

وحماية الجهاز من ادخال أقراص والإقلاع عليها لأنها تحتاج من الشخص المخرب التواجد أمام الجهاز مادياً وبطريقة مكشوفة .يمكنك أن تضع أقفال على الأبواب وحرس لمنع الوصول للجهاز المركزي(الخادم) وهذا يكون أكثر من كافٍ للحماية المادية ، على أي حال عليك أن تجعل أولوية الإقلاع من القرص الصلب وتضع كلمة سر على خيار الأقراص القابلة للنزع في برنامج الإقلاع lilo/grub من أجل الاحتياط. حماية النظام من الفيروسات ليست هماً كبيراً في لينكس لا يوجد سوى أربع فيروسات وهي بحاجة لكلمة سر الجذر للتمكن من النظام وهي غير موجودة إلا في المختبرات لأغراض التجارب.

الموضوع الأكثر تعقيداً هو الحماية من الهجوم الخارجي عبر الشبكات ، الذي يتمثل في الوصول عن بعد للملفات أو العبث بمحتوياتها . أولا تأكد من أن كلمة الجذر كبيرة بما فيه الكفاية!! ومعقدة بما فيه الكفاية، وتجنب الكلمات الضعيفة مثل الأشياء المكررة أو المدرجة (123 أو abc أو ZYXW) اسمك أو أسم العائلة أو تارخ معين أو كلمة من القاموس أو أي شيء من ذلك معكوس أو موضوع بينه أرقام كل هذا يعتبر ضعف لأن هناك برامج تتحزر كلمة السر وذلك بأن تأخد بتجريب تلك الإحتمالات قبل غيرها مما يجعل نظامك سهل الإختراق. فالطريقة الوحيد(الأكثر جدوى) لفك شيفرة كلمة السر هي بالتخمين. أما الكلمات القوية تكون طويلة وتبدو عشوائية !! مثلا الأحرف الأولى من جملة طويلة مثلاً He is stupid, not like me. I'm using linux تصبح كلمة السر His,nlm.I'mul لاحظ عدم حذف علامات الترقيم وكذلك تفيدك خدعة lEEt-1337 بأن تضع واحد مكان ال l وتضع صفر مكان ال O و 3 مكان E و 7 مكان ال T وخمسة مكان S و 9 مكان g و @ مكان a و ! مكان i ؛ بحيث تصبح في مثالنا H!5,n1m.I'mu1 أيضا إجعل كلمة السر خليط بين الأحرف الكبيرة والصغيرة وذلك باختيار حرف ورد أكثر من مرة وجعله كبيراً H!5,n1M.I'Mu1.

يجب أن تكون كلمة سر المستخدمين الذين لهم الحق بالتحول إلى جذر (sudoers) معقدة أيضاً وصلاحياتهم مدروسة، وعدم وجود هكذا مستخدمين أفضل! لأن وجودهم يزيد الخليط تعقيداً. وأيضا المستخدمين الذين لهم الحق بالوصول إلى ملفات معينة أو الشبكة ... إلخ كذلك لأن المخرب قد يستعمل أدوات التحزير لمعرفة كلمة سرهم ثم يستعمل صلاحياتهم في مهاجمة النظام. ولأن نظام غنو/لينكس آمن جداً لدرجة أنه لا يوجد مخلوق يمكنه أن يفك شيفرة كلمات السر حتى لينوس نفسه ولا ريتشارد نفسه ولا يستطيع مستخدم (حتى لو كان الجذر) معرفة كلمة سر مستخدم آخر فكيف ستعرف أن هناك مستخدماً (مثلا في شبكة كبيرة بها أكثر من جهاز) وضع لنفسه كلمة سر سهلة ؟ الفكرة بسيطة بنفس طريقة المخرب ، نعم برنامج تحزير يقوم بتجربة كلمات، فإذا وجد هكذا كلمة يرسل تحذير أو يغيّر كلمة السر الضعيفة . وينصح بتغيير كلمة السر كل 6 أشهر ، وعدم كتابتها في ملفات غير مشفر أو على ورق في مكان قريب من الجهاز!!

 تلميح

أفضل طريقة للتأكد من أن النظام محمي بشكل جيد أن تقوم بإختراق نظامك بنفسك(يجب أن يكون مسموحا لك بذلك) وتستخدم أدوات مشابهة للمخربين ولكن بدل التخرب ترسل تحذير أو تغلق الثغرة

 تلميح

سبب عدم قدرة مخلوق على فك تشفير كلمة السر أن لينكس يستخدم تقنية للتشفير (مفتاح التشفير العام) تستعمل مفتاحين(سلسلتين من الأرقام و الأحر والرموز) واحد للتشفير وآخر للفك يتم توليد مفتاح التشفير من مفتاح الفك(الذي لن يعرفه أحد) بعمليات حسابية سهلة ومباشرة يقوم برنامج كتابة الشيفرة باستعمال مفتاح التشفير (لأنه لا يعرف المفتاح الآخر) ليقوم بالتشفير. حتى تفك التشفير يلزمك مفتاح الفك وهذا لا يعرفه أحد فتظل كلمة السر سراً. الآن إذا كان لينكس لا يستطيع معرفة كلمة السر فكيف يعرف أن الكلمة التي كتبتها صحيحة ويسمح لك بالدخول؟ الفكرة بسيطة إنه يشفر تلك الكلمة ويقارن الشيفرتين فإذا تطابقتا فإنه يسمح لك بالدخول دون أن يعرف ما هي كلمة السر!! وتبقى سراً.
إذا كنت تتسائل عن لماذا لا يقوم أحدهم بعكس العمليات الحسابية التي ولدت مفتاح التشفير للحصول على مفتاح الفك (الجمع تصبح طرح وهكذا) بهذه البساطة؟ السبب هو أن بعض العمليات الحسابية أبسط من الأخرى مثلا ضرب 13*17*23 أسهل من تحليل 5083 للعوامل الأولية والعمليات التي تلزم لحساب مفتاح التشفير إذا علم مفتاح الفك سهلة ولكن العكس بحاجة إلى عمليات تفوق ما تستطيعه الحواسيب وعلى الرغم من وجود برامج تقوم بالحسابات غير الممكنة بالطرق العادية بطرق أخرى إلا أنها أبطئ وقد تستغرق عدة سنين تكون حينها كلمة السر قد تغيرت!!!

 تلميح

عند تشفير كلمة السر يتم توليد مفتاح التشفير عشوائياً واعتبار كلمة السر نفسها هي مفتاح الفك، بكلمات أخرى حتى يفك شيفرة كلمة السر يجب أن يعرف كلمة السر ، كأنك تضع المفتاح الوحيد لخزنة أتوماتيكية الاغلاق بداخل الخزنة نفسها. طبعاً هذا على فرض أن المخرب تجاوز جدار النار ووصل للملف المشفر، هذا ما أسميه حماية. ولكن حتى تكمل الحلقة يجب أن يكون عشوائياً ولكن لا يوجد عملية عشوائية حقاً لهذا تأكد من أن نصوص الإقلاع تقوم بعملية اعتلاجية entropy كأن تأخذ الوقت الحالي و رقم عشوائي مخزن في ملف (يتم وضعه عن إغلاق الجهاز) وتجعلها بذور لمولد الأرقام العشوائية السريع ثم تأخذ رقم من مولد الأرقام العشوائية السريع ثم تجعلها بذور عشوائية لمولد الأرقام العشوائية. ولأن جزء الثانية الذي تم تنفيذ العملية فيه وحالة المولد العشوائي عند إغلاق الجهاز في مرات سابقة تعتبر عوامل صعبة التوقع من قبل المخترق فإن القيمة العشوائية عشوائية بشكل كاف.

إذا كانت المعلومات التي تحتفظ بها حساسة فإن عليك أيضاً حماية الكلمة المشفرة بوضعها في ملف منفصل لا يصل له أحد سوى الجذر (وليس وضعها في ملف يسمح للعالم كله بقراءته معتمداً على قوة التشفير فقط) هذه الطريقة تسمى كلمة سر الظل. لأن ما يمكن عمله في عدة سنين يمكن عمله ببضع سنين أو شهور إذا استعمل أكثر من جهاز حاسوب أو استعمل حواسيب خارقة super computer أو main frame مثلاً إذا كانت المعلومات تساوي مليارات فإن المخترق قد يشتري حواسيب بملايين ويفرغها لتخمين كلمة السر من الملف الذي سمحت له بقراءته وتظل العملية مربحة بالنسبة له.

كما قلنا تأكد من وجود كلمة سر على إعدادات ال BIOS وأن أولوية الإقلاع للقرص الصلب لأنه كما تعلم يوجد أنظمة لينكس على قرص مرن واحد (وأيضا مدمج ) يمكن لأي شخص أن يقلع بها ثم يستخدمها في عمل mount لقسم اللينكس ثم تغيير كلمة سر الجذر هناك!! وضع كلمة سر في grup و lilo تمنع من تمرير معلومات للنواة (مثلا linux 1 تدخل جذرا في طور المستخدم الوحيد دون كلمة سر) وكلمة أخرى للإقلاع من القرص المرن أو المدمج (ستبقى قادرا على تنفيذ الخيارات الأخرى بدون كلمة سر)

وضع أنظمة غير موثوقة (ويندوز مثلاً) في قائمة الإقلاع يعتبر ثغرة والأفضل محاكاتها باستخدام wine والأفضل من ذلك البحث عن بديل مفتوح. إذا كنت قد ركّبت wine قم بإعداده بحث يظهر رسالة في كل مرة يعمل . استخدام برامج جاهزة أيضا يبقى أمرا غير محبذا والأفضل عملها بنفسك من الملف المصدري. وتذكر أن المستخدم الجذر يجب أن لا يدخل إلى البيئة الرسومية لأن هذا أيضا أمر سيء جدا

 تلميح

حتى تكون في أمان يجب أن تستخدم تقنية كلمة سر الظل Shadow الأداة pwcon تحول لتقنية الظل ، واستعمال تقنية تشفير MD5 وليس تقنية تشفير DES الشائعة في أنظمة يونكس القديمة. ويكون ذلك بوجود هذا السطر MD5_CRYPT_ENAB yes في ملف /etc/login.defs عندها تكون كلمات السر الجديدة مشفرة بهذه التقنية. أيضاً تابع معنا إعداد برامج PAM إذا كنت في عجلة فإن سطراً password required pam_unix.so md5 shadow في ملف /etc/pam.d/login والملفات المشابهة يفي بالغرض

4.9.2 أوامر الإدارة

لقد تحدثنا سابقا عن chmod و chown و chgrp يفضل أن تراجعها. لتغيير كلمة السر الخاصة بك اكتب passwd ولمستخدم آخر اذكر هذا المستخدم (يجب أن تكون جذرا لتغيرها للآخرين) ولإضافة مستخدم جديد استعمل useradd ، ولحذف مستخدم استعمل userdel (الخيار --remove-home لحذف بيته أيضاً) ، أيضاً يسميا adduser و deluser.

 تلميح

عند إضافة مستخدم جديد يتم فتح دليل بيت له ليتم وضع الإعدادات التي تخصه. قالب هذه الإعدادات هو الدليل /etc/skel

لإضافة مجموعة groupadd ، ولإضافة مستخدم في مجموعة gpasswd -a myuser mygroup ولمعرفة المجموعات التي ينتمي لها مستخدم groups myuser ، ولتحديد مدة صلاحية للمستخدم chage مثلاً طالب تنتهي صلاحية حسابه بنهاية السنة chage -M 365 student1. ولتصبح مستخدم آخر اكتب su واسم ذلك المستخدم إذا لم تحدد عنها سيكون الجذر (طبعا ستسأل عن كلمة سره) أما إذا أصدر أمر su الجذر فإنه لن يسأل عن كلمة سر. من الممارسات الجيّدة أن لا تحدد الصلاحيات تبعاً للمستخدمين بل تبعاً للمجموعات، مثلاً إذا كنت تثق بالمستخدم علي وتريد أن تسمح له الوصول للقرص المرن، ليس من الجيد أن تقوم بذلك بتمليكه الملف '/dev/floppy' وإعطاؤه حصرياً الحق في الوصول إليه (أي 700 بالأذوات الثمانية) بل الأفضل أن تعمل مجموعة باسم floppy (أو أي اسم معبر) وتجعل الجهاز '/dev/floppy' ملكاً للمستخدم الجذر والمجموعة floppy واسمح لهم فقط بالوصول له (أي 770 بالأذوات الثمانية) ثم أضف علي إلى تلك المجموعة، فإذا قررت فيما بعد السماح لأحمد باستخدام القرص المرن أضفه هو الآخر إليها وإذا لم تعد ترغب أن يصل علي للقرص المرن أزله منها، هكذا ندرس أذونات الملفات مرة واحدة ونبقيها نفسها حتى عند تغيير رأينا.

أمر su لن يغيّر الدليل الحالي أو ينفذ ملف ~/.bashrc وغيره الخاص بالمستخدم الجديد إلا إذا تبع بعلامة نافص كما su - فإنه يعطيك جلسة كاملة.

 تلميح

جاء اسم SU من Super User أي المستخدم الخارق، حيث يفترض أن يعمل مدير النظام مثل أي مستخدم عادي ولا يستخدمم قواه الخارقة إلى عند الضرورة.

إذا كنت من بين المستخدم المسجلين في قائمة 'sudoer' يمكنك تنفيذ أمر على أنك مستخدم آخر أو الجذر بتقديم كلمة السر خاصتك وليس خاصتهم بالأمر sudo متبوعاً بالأمر المراد تنفيذه، وطبعاً فقط من يضعهم الجذر في قائمة ال sudoers يمكنهم ذلك ويمكن تحديد أي الأوامر التي ينطبق عليها ذلك، يتم تحرير هذه القائمة بالأمر visudo عبر محرر النصوص vi. وإذا وضع الجذر مستخدمين في تلك القائمة وأعطاهم صلاحيات أكثر من اللازم فإنه يفتح ثغرة في النظام. كانت التوزيعات القديمة تضيف المستخدمين في قائمة sudoers وتسمح لهم بإغلاق الجهاز أي تنفيذ shutdown أو reboot وتغيير الوقت، ولكن التوزيعات الحديثة تستخدم PAM و consolehelper.

4.9.3 قاعدة بيانات المستخدمين وكلمات السر

الملف /etc/passwd هو الملف الذي يحتوي قاعدة بيانات المستخدمين وكلمات سرهم ، تبدو أسطر الملف مثل myname:x:1000:100:mygroup:/home/myname:/bin/bash الحقل الأول هو أسماء الدخول للمستخدمين بعض هؤلاء المستخدمين ليسوا بشراً ولكن برامج(سنشرح سبب وجودها) قم بتغيير كلمات سرهم أيضاً وضع /bin/nologin ليكون مفسر أوامرهم لمنعهم من الدخول (باستعمال chsh). الحقل الثاني كلمة السر المشفرة وهي عبارة عن نص مكون من الأحرف الإنجليزية (كبيرة وصغيرة) والأرقام و نقطة "." وسلاش "/" إذا كانت مشفرة باستعمال MD5 تبدأ ب "$1$" متبوعاً بمفتاح التشفير (قد يصل إلى ثمانية منازل) ثم "$" (تسمي GNU هذا النص إلى هنا salt) ، ثم تأتي الشيفرة وقد تصل إلى 22 رمزاً . أما طريقة DES فتبدأ برمزين مباشرة من بين ./0-9A-Za-z أي لا تبدأ ب$ ثم الشيفرة من 11 منزلة ، يكون دورك هنا بالبحث عن كلمات سر بطريقة DES وتغيرها حتى تحرص على أن تكون كل الكلمات مشفرة وفق MD5 أي تبدأ ب $1$ لأنها وكما لاحظنا ذات مفتاح من 8 منازل و شيفرة من 22 منزلة

 تحذير

تأكد من تغيير زمن آخر تعديل في الملف /etc/passwd لأن معادلات حساب الأرقام العشوائية تعتمد على الزمن فحتى لا يحزر المخرب تلك الأرقام من معرفته للوقت ، وذلك باعادة تخزينه أو بكتابة touch /etc/passwd

الحقول الثالث والرابع والخامس والسادس هي رقم المستخدم UID و رقم المجموعة GID والمجموعة الأساسية والدليل البيت وأخيراً مفسر الأوامر الذي عادةً ما يكون /bin/bash أو /bin/ksh وإذا أردت أن تمنعه /bin/nologin. هذا الملف يجب أن يسمح للجميع بالقراءة منه (ليتمكن المستخدمون من معرفة رقمهم ومفسر أوامرهم ... إلخ) ولا أحد غير الجذر يمكنه الكتابة به انظر مخرجات 'ls -l /etc/passwd' إذا كان عليك عمل ذلك اكتب 'chown root.root /etc/passwd' و 'chmod 644 /etc/passwd'. لحماية كلمات السر من أن تكسر لوجودها في الملف الذي يراه الجميع /etc/passwd فنضعها x ونخزن كلمة السر الحقيقية في ملف الظل /etc/shadow فالجذر وحده من يقرأه، تم ذلك بواسطة chmod 600 /etc/passwd و chown root /etc/shadow.
 تحذير

لا تعدل ملفي passwd و shadow مباشرة بل استخدم الأدوات المناسبة لذلك.

احرص أن لا يكون هناك مستخدمين لهم uid تساوي الصفر غير الجذر وأن لا يكون لأحدهم (إلا ربما أنت) العضوية في مجموعة الجذر ولا أن تكون مجموعته ذات gid تساوي الصفر وأن تكون المجموعات الإضافية التي ينتمون لها مدروسة (كأن لا تكون root أو admin أو wheel ...إلخ)

في القدم كان هناك فلسفة تقوم على اعطاء عدد من المستخدمين uid متساوية، ينتج عن هذا أن يكون لهم نفس الحقوق ولكن هذا في نظري ليس جيداً لأنه ييزيد التعقيد؛ إذا أردت اعطاء عدد من المستخدمين حقوق متساوية ضعهم في مجموعة.

هناك معلومات إضافية عن أي مستخدم يمكن تحديدها (بواسطة المستخدم أو الجذر) بواسطة الأداة 'chfn'، الاسم الكامل بالخيار f وهاتف العمل w وهاتف المنزل h ورقم الغرفة r وجميع هذه الحقول تقبل نصوص طويلة تحتوي أي محارف قابلة للطباعة باستثاء ',:='، انظر هذا المثال

bash# chfn -f 'Muayyad al-Sadi' -r 'R2,101' alsadi
يمكن أن تعمل هذه الأداة بشكل تفاعلي إذا لم تمرر لها معاملات.

4.9.4 صلاحيات البرامج

البرامج يكون لها صلاحيات (أذونات) تتحدد (عادةً) بالشخص الذي ينفذها ، مثلاً البرنامج الذي يستعرض الملفات يستطيع استعراض محتويات دليل بيت لأحمد إذا كان من شغله أحمد ولكن إذا نفذه علي فإنه لن يدخل إلى الدليل البيت لأحمد. كما أن البرنامج الذي يستدعي برنامج آخر يكون الجديد بصلاحيات الذي استدعاه.

هذه ليست قاعدة فبرنامج su ينفذه مستخدم عادي يمكنه تنفيذ ما لا ينفذه إلا الجذر(بعد تقديم كلمة سره)! كذلك الأمر مع برنامج login ، وبرنامج sudo أيضاً . على أي أساس تعمل هذه البرامح ؟ إذا حدد مدير النظام علامة suid في أذونات ملف برنامج معين وشغله أي شخص من يسمح لهم بذلك فإنه يتم تشغيل هذا البرنامج بصلاحيات مالك البرنامج وليس مشغل البرنامج أي برنامج يملكه الجذر يحمل علامة suid فإنه يحصل على صلاحيات الجذر بغض النظر من الذي نفذه ودون طلب كلمة سر، كذلك الأمر مع sgid التي تعطي البرنامج صلاحيات المجموعة المالكة للملف وليس منفذ الملف يمكن وضع هذه العلامة باستعمال chmod بالرموز، SUID بالأمر 'chmod u+s file' و GUID بالأمر 'chmod g+s file' أو بالأرقام الثمانية حيث تأخذ suid الرقم 4 ، sgid الرقم 2 (الرقم 1 مخصص لعلامة sticky) ، من المنزلة الرابعة من اليمين (الأولى في أقصى اليسار). وطبعاً فقط مالك الملف أو الجذر هو من يضع هذه العلامة. وجود برامج تحمل هذه العلامة هنا وهناك دون ضوابط يعتبر ثغرة أمنية ، مثل هذه البرامج يجب أن يكون مدروساً بعناية . عند تشغيل برنامج يحمل العلامة suid فإنه يملك صلاحيات مالكه ولكن بامكانه (إذا أراد) التحول إلى صلاحيات الشخص الذي نفذه.

فائدة هذه العملية إضافة لبرنامج su و login هي إذا كان لدينا برنامج لعبة يمكن لأي شخص أن يلعبها ولكن اللعبة فقط هي من يمكنها الكتابة في ملف النقاط أو موقع على الشبكة يمكن الزوار من الدخول على ملفات معينة (شعارات للأجهزة الخلوية) بعد تقديم رمز (بطاقات رصيد) يوضح أنهم دفعوا ثمن الملفات. الطريقة الوحيدة للحصول على هذه الملفات هي من خلال البرنامج فقط. في الحالاتين نعمل مجموعة جديدة ونجعل البرنامج ينتمي لها ب chgrp وكذلك مع الملفات المطلوب حمايتها ونجعل ملكية البرنامج والملفات تعود على الجذر ب chown ثم نجعل الدخول على الملفات فقط لهذه المجموعة ومالك الملف الجذر chmod 770 secritfile ونعطي البرنامج علامة sgid بهذا يستطيع البرنامج الدخول إلى الملفات المعنية بغض النظر عن الشخص الذي نفذه ولكن لا يستطيع أحد الدخول إليها من خارج هذا البرنامج. يمكن القيام بهذه العملية بعمل مستخدم جديد واعطاء البرنامج صفة suid ولكن طريقة المجموعات أفضل

تكون هنا مهمة البرنامج تحديد من يسمح له ومن لا يسمح له، وتكون مهمة مدير النظام في التأكد من أن البرنامج يقوم بها بشكل جيد. الشروط الأساسية التي يجب توافرها في هكذا برنامج

  • أن يكون مفتوح المصدر
  • أن لا يكون نص تنفيذي script
  • أن تراجع مصدره (الكود) وتفهمه
  • أن يلغي البرنامج فعالية صلاحيات sgid منذ البداية ويعود لاستعمال صلاحيات منفذه وعند الحاجة فقط يستخدم الصلاحيات الخاصة أي بعد أخذ كلمة السر أو بعد انتهاء اللعبة (في مثال اللعبة) أو بعد مطابقة رقم البطاقة (في مثال الخلويات)
  • أن لاينفذ وهو في حالة الصلاحيات الخاصة أي شيء عن طريق shell بل بشكل مباشر
  • أن لا ينفذ البرنامج وهو في حالة الصلاحيات الخاصة أي برنامج باستعمال اسم غير مطلق مثلاً ls بل الصواب /bin/ls لأن المخرب قد يتمكن من تغيير أولويات التنفيذ PATH بحيث يجعل من ~/ls هو الذي ينفذ ولأن هذا البرنامج في الدليل البيت فإنه يحق له كتابته على مزاجه وعند استدعاء ls من قبل البرنامج في وضع الصلاحيات تنتقل الصلاحيات لبرنامج ~/ls
  • أن لا ينفذ برنامج لغيره الحق في تعديله لأن المخترق يمكنه أن يعدل البرنامج الآخر بحيث ينفذ ما يريد ولأن البرنامج الأول استدعاه وهو يملك الصلاحيات فإن الآخر سيملك الصلاحيات.
  • أن يقوم بتصفير الموارد (الذاكرة مثلاً) قبل أن يحرره ويعيدها للنظام

4.9.5 البرامج الواعية ل PAM

لإكساب طريقة التعامل مع اعتماد/توثيق الحسابات (بكلمات السر مثلاً) المزيد من القوة والمرونة. كان تشفير DES هو المستخدم لتشفير كلمات السر وعند اعتماد طريقة md5 في أنظمة غنو تم إعادة كتابة برامج su و login وغيرها لتستوعب التشفير الجديد. هنا جاء السؤال هل نظل نعدل برامج حساسة مثل هذه ألا يوجد طريقة موحدة لا تستوجب كتابة البرامج من جديد وإعادة تصنيفها إذا أراد مدير النظام تغيير طريقة الاعتماد/التوثيق من هنا جاءت فكرة PAM أي Pluggable Authenyication Module طريقة الإسناد عبر الأجزاء القابلة للإضافة. ما هو الإسناد Authentication على أية حال؟ هو التأكد من أن الشخص هو من يدعي أنه هو(بمطابقة كلمة سره مثلاً). أو بكلمات أخرى هو التأكد من هوية الشخص ومن أنه يسمح له بالعمل الفلاني. أما كونه قابل للإضافة فهذا يعني أن مدير النظام يستطيع التحكم في كيفية تصرف البرنامج الواع ل PAM (يسمى PAM aware) دون إعادة كتابته بل فقط بتعديل ملف إعداداته. مثلاً يمكنك منع ابنك من الدخول إلا في أيام العطل (حتى يدرس) أو منع دخول من ليس له كلمة سر. أو منع المستخدمين من وضع كلمات سر ضعيفة أو الانتقال من طريقة تشفير لأخرى أو أي شيء يخطر ببالك مثل قراءة بصمة الإصبع. انظر www.kernel.org/pub/linux/libs/pam/modules.html

هناك طريقتين لإعداد PAM إما عبر ملف واحد /etc/pam.conf أو عبر ملف منفصل لكل برنامج /etc/pam.d/NAME حيث NAME هو اسم البرنامج (الأداة) التي تريد إعدادها مثل su و login و ftp و ssh وغيرها بأحرف صغيرة ملفات الإعداد هذه عبارة عن أسطر من المحددات أو التعليقات (تبدأ ب # ولا يجوز أن تدمج مع أسطر خرى) العمود الأول من كل سطر ليس تعليق هو واحد من auth أو account أو password أو session، وهذه الإجراءات هي auth الاسناد(السؤال عن اسم المستخدم وكلمة سره مثلاً) ، account عمليات الحساب التي لا علاقة لها بالإسناد (مثل وجود ملف من عدمه أو وقت محدد أو فترة الصلاحية أو تجاوز الحد المسموج به بعدد الدخولات) ، password تغيير كلمة السر ، session إجراءات ما بعد الدخول مثل عرض حكمة اليوم Message of the Day (أي MOD أو MOTD) فحص البريد وكتابة لديك رسالة جديدة. وهي على الترتيب ويجوز أن تظهر هذه في أكثر من سطر أو لا تظهر ولكنها يجب أن تظهر بهذا الترتيب. في العمود التالي نحدد ضرورة هذا الشرط من بين
required شرط ضروري نجاحه فإذا فشل يتابع فحص باقي الشروط (من أجل التقرير ربما) ولكنه يخرج بإشارة فشل.
requisite شرط ضروري أيضاً ولكن إذا فشل خرج مهملاً باقي الشروط
sufficient شرط كافي فإذا نجح لا داع لتحقق باقي الشروط
optional شرط اختياري فشله لا يعني شيئاً إذا نجح غيره
العمود الثالث وما بعده هما الإضافة plugin ومعاملاتها وهي ملفات so موجودة في /lib/security/ كل منها له وظيفة خاصة ويستقبل معاملات من بطريقة خاصة به هذه بعضها(الأكثر استخداماً):

/lib/security/pam_warn.so
كتابة تحذير في ملف log ودائماً ناجحة.
/lib/security/pam_deny.so
منع! دون سؤال ودون التأكد "لست هو لا تحلف ولا تعطيني كلمة سر"
/lib/security/pam_premit.so
السماح! هذه تستعمل بحذر "إنك هو حتى لو قال العالم كله عكس ذلك"
/lib/security/pam_securetty.so
السماح إذا كان الطلب عبر طرفية موثوقة تلك الموجودة في الملف /etc/securetty
/lib/security/pam_cracklib.so retry=K difok=L minlen=M Xcredite=N
تستخدم لفحص قوة كلمة السر. السماح إذا كانت كلمة السر قوية وإعطاؤه K مرة للمحاولة وإلا فشل، يجب أن تكون بطول M على الأقل وبها L حرف مختلف عن الكلمة السابقة dcredite و lcredite و ucredite و ocredite لتحدد عدد الأرقام و الأحرف الصغيرة والكبيرة وغير الحرف-رقمية زيادة على الحد الأدنى minlen (كل المعاملات اختيارية)
/lib/security/pam_unix.so nullok md5 shadow
طريقة يونكس العادية في كلمات السر nullok تسمح بكلمات خالية و shadow و md5 تحددان طريقة حفظ (تفعيل الظل) وتشفير كلمة السر.
/lib/security/pam_nologin.so
إذا كان الملف /etc/nologin موجود فقط الجذر من يسمح له بالدخول
/lib/security/pam_stack.so service=FOO
محتويات الملف /etc/pam.d/FOO تستعمله توزيعة ريدهات وذلك لتوحيد إعدادات أكثر من برنامج مثلاً service=system-auth تجدها في كل ما يحتاج لعملية auth إسناد لهذا يكفي تعديل /etc/pam.d/system-auth ليحصل التعديل لهم جميعاً
لمزيد منها راجع وثائق pam (انظر حزمة pam-doc). إذا كنت في ملف الإعداد الواحد الجامع فإن عمود أول إضافي هو اسم الأداة التي تعدها! حسنا تريد أمثلة بعد هذه الطلاسم. قبل أول مثال هناك اسم خاص هو OTHER وهو لإعداد ما ليس له ملفات إعداد لنأخذ هذا المثال لنقل أنك تتبع سياسة متحفظة أي برنامج PAM غير معد لا يعمل ويضع ملاحظة تحذيرية في ملف log لهذا سيكون ملف /etc/pam.d/other كما يلي
# this is /etc/pam.d/other
# deny every thing but log them 1st
auth		required /lib/security/pam_warn.so
auth		required /lib/security/pam_deny.so
account		required /lib/security/pam_warn.so
account		required /lib/security/pam_deny.so
password	required /lib/security/pam_warn.so
password	required /lib/security/pam_deny.so
session		required /lib/security/pam_warn.so
session		required /lib/security/pam_deny.so
إذا كنت كسولاً ولا مبالي هكذا إعدادات تكفل تشغيل برامج PAM غير المعدة دون حتى السؤال عن كلمة سر وتكفل خرق نظامك! "أ) أريد أن أكون جذراً ب) مرحباً بك"
# this is /etc/pam.d/other
# allow every thing
auth		required /lib/security/pam_premit.so
account		required /lib/security/pam_premit.so
session		required /lib/security/pam_premit.so
السياسة التقليدية ليونكس
# this is /etc/pam.d/other
# do normal unix
auth		required /lib/security/pam_unix.so md5 shadow
account		required /lib/security/pam_unix.so
password	required /lib/security/pam_unix.so md5 shadow
session		required /lib/security/pam_unix.so
في ملف الإعداد العام /etc/pam.conf نضيف عمود أول
#/etc/pam.conf
# ...
OTHER auth	required /lib/security/pam_unix.so md5 shadow
OTHER account	required /lib/security/pam_unix.so
OTHER password	required /lib/security/pam_unix.so md5 shadow
OTHER session	required /lib/security/pam_unix.so
# ...
لنقم بعمل حقيقي مثلاً لا تسمح ب telnet إلا من خلال الطرفيات الموثوقة /etc/securetty سيكون أول سطر في /etc/pam.d/telnet
auth	required /lib/security/pam_securetty.so
هل تريد إجبار المستخدمين على وضع كلمات سر قوية فإن سطرا password في ملفات إعداد كل البرامج التي تغير كلمة السر login و passwd سيكونا
password required /lib/security/pam_cracklib.so minlen=6
password required /lib/security/pam_unix.so shadow md5 use_first_pass
لاحظ أن البرامج المتشابهة يمكن تكون ملفات إعداداتها وصلات استعمل ls -l لتراها. ولكن في ريدهات وفيدورا يفضلون أن يستعملوا pam_stack.so التي تقرأ ملفات /etc/pam.d/system-* مثل system-auth و system-account ... إلخ لتقابل الإعدادات العامة للنظام يكفي تعديل تلك الملفات ليشمل التعديل كل النظام.
# this is /etc/pam.d/something
# include system-* files here
auth		required /lib/security/pam_stack.so service=system-auth
account		required /lib/security/pam_stack.so service=system-account 
password	required /lib/security/pam_stack.so service=system-password
session		required /lib/security/pam_stack.so service=system-session
إذا وضعت أكثر من شرط يسأل عن كلمة سر (ضمن نفس الصنف auth مثلاً) تأكد أن كل ما بعد الأول تأخذ try_first_pass أو use_first_pass أي جرب كلمة السر التي أخذها plugin السابق

4.9.6 التقارير وكشف الدخيل المحلي

يمكن أن تعرف أي المستخدمين أنت بالأمر whoami أو بطريقة بشرية who am i أو بطريقة طفولية "مين حبيب الماما؟" (عذراً للعامية) who mom likes الأمران الأخيران حالة خاصة من أمر who الذي يمكنك من عرض المستخدمين الداخلين إلى النظام (عند تنفيذه دون معاملات يعرض الاسم والخط والمدة). يمكن تحديد التفاصيل الذي يعرضها عبر عدة معاملات منها a التي تعرض أغلب التفصيلات أما الخيار H فإنه يضيف سطر في أعلى الجدول ليحدد معنى كل عمود أما الخيار u يكتفي بعرض الأسماء فقط. الخيار q يعد كم دخول لكل مستخدم. وغيرها الكثير من الخيارات. أمر آخر مشابه هو users فهو يعرض المستخدمين الذين دخول على الجهاز الحالي.

 تلميح

الملف الذي يتم قراءة التقرير الخام (الذين دخلوا وخرجوا) منه هو /var/run/utmp أو /var/log/wtmp، لا يجب تحريره بشكل مباشر.

قلنا أن المخرب cracker يمكن أن يعرف كلمة السر بتخميها من الكلمة المشفرة وذلك باستعمال برامج سنذكر أهمها ،وبنفس الطريقة يستطيع مدير النظام البحث عن ثغرات في نظامه من هذه البرامج البرنامج الأشهر crack من موقع http://users.dircon.co.uk/~crypto/index.html وبرنامج johen the ripper www.openwall.com/john وبرنامج slurpie (انظر www.ussrback.com/distributed.htm) الذي يتفوق على سابقيه بأنه يستطيع توزيع المهمة على أكثر من جهاز. هناك حزمة تسمى tiger (تأتي مع ديبيان) تقوم بعدد من الفحوصات وتعطي تقريراً عن الطرق الممكنة لاختراق النظام وتسريب كلمة سر الجذر، يكون تحذيراً من احتمال وجود دخيل محلي. هذه الأدوات لا تأتي في التوزيعات الشائعة (باستثناء ديبيان).

إذا كنت مديراً لنظام وقام مستخدم مجهول(من داخل النظام) بعملية تخريبية فإن أداة last تفيدك في التحقيق في الموضوع فهي تخبرك من دخل للنظام ومتى خرج (كما تخبرك المحاولات الفاشلة للدخول) ، مثلاً last -n 100 تعرض تقرير من 100 سطر لآخر (دخول/خروج/محاولة) ، last -t 20031231103000 كل ما بعد 2003-12-31 تحديداً الساعة 10:30:00 ويمكنك استعمال الخيار -da لعرض اسماء الأجهزة hostname بدلاً من رقم IP. استعمل -x لعرض إطفاء الجهاز. يمكنك استعمال lastb لعرض المحاولات الفاشلة للدخول تفيد في كشف من يحاول معرفة كلمة السر بالتجريب.

4.9.7 الحدود limits

المثال والبرنامج التالي مأخوذ من كتاب Advanced Bash-Scripting Guide

#!/bin/bash
# this is a hang script
 while 1	#  Endless loop.
 do
   $0 &	#  This script invokes itself . . .
		#+ forks an infinite number of times . . .
		#+ until the system freezes up because all resources exhausted.
 done		#  This is the notorious "sorcerer's appentice" scenario.      
 exit 0		#  Will not exit here, because this script will neve
# end of hang script
هذا البرنامج يقوم بتنفيذ نفسه عدد لا نهائي من المرات وكل برنامج جديد يفعل نفس الشيء حتى يستهلك كل ذاكرة النظام والذاكرة الافتراضية ووقت المعالج. إذا قام برنامج بمثل هذا العمل فهذا للأحد سببين الأول خطأ في البرمجة وهفوة من المبرمج والثانية أنه برنامج معاد أي هجوم. لهذا تسمح لك النواة بوضع حد لقدراتها اللامحدودة. مثلاً لحل المشلكة السابقة ضع حد لعدد البرامج التي تنفذ باسم مستخدم واحد مثلاً
bash# ulimit -Hu 100
فإن البرنامج السابق لن يعلق بل سيفشل في تنفيذ المزيد بعد تجاوزه الحد وبهذا يظل النظام آمناً.
 تلميح

ربما هذا مصدر النكتة التي يرويها fortune-mod التي تقول أن لينكس ينهي حلقة لا نهائية في 5 ثواني.

يمكنك أن تضع حداً أعلى لحجم الملف وحداً أعلى لحجم ملف تقرير الخطأ core-dump أو عدم إنشاؤه أبداً بوضعه صفرulimit -Hc 0 وهكذا. والحدود نوعان الأول hard-limit وهذه لا يستطيع تجاوزها سوى الجذر وبطلب صريح والثانية soft-limit فهي حد مقترح يمكن تجاوزه بطلب صريح طالما أنه ضمن ال hard-limit. الخيار -H يعني hard-limit و -S يعني soft-limit وهو التلقائي.
نوع الحدالوحدةالخيار
حجم ملف coreblock*c
حجم مقطع البياناتكيلو-بايتd
أكبر حجم ملفblock*f
أكبر حجم ذاكرة مقفلةكيلو-بايتl
أكبر حجم للذاكرةكيلو-بايتm
عدد الملفات المفتوحةملفn
حجم ذاكرة الأنبوب512 بايتp
حجم المكدس stackكيلو-بايتs
وقت المعالجثانيةt
عدد البرامج للمستخدمعمليةu
الذاكرة الافتراضيةكيلو-بايتv
* وحدة block تعتمد على نظام الملفات وكيفية تهيئته.

4.9.8 أتمتة وجدولة الأعمال

يحتاج مدير النظام للقيام بالكثير من الأعمال الرتيبة يتم تنفيذها بشكل متكرر في فترات زمنية محددة. مثل القيام بالتخزين الاحتياطي والأرشفة backup أو الفحوصات أو عمل التقارير (مثل webalizer) أو لف التقارير log rotation. هناك أسلوبين لتنفيذ مهمة في وقت معين الأول أن تنفذ مرة واحدة عند قدوم زمن معين (إذا كان الجهاز يعمل حينها) والطريقة الثانية تنفيذ مهمة بشكل متكرر في فترت زمنية ثابتة (مثلاً مرة من كل شهر)

إذا كانت المهمة تتطلب سلسلة من الأوامر والفحوص ضعها في ملف واحد؛ انظر برمجة بلغة bash. يمكنك عمل ذلك بطريقة غريبة بواسطة أمر sleep مثلاً لتنفيذ COMMAND بعد ساعة

bash# sleep 3600 ; COMMAND &
أو في كل ساعة اعمل ملف به ثم نفذه
#!/bin/bash
function doit() {
	sleep 3600
	COMMAND
	doit
}
doit
ولكن هذا إعادة اختراع العجلة. والسلوك الصحيح هو استعمال at أو cron أو anacron

لتنفيذ مهمة في وقت معين مرة واحدة نستعمل مراقب at daemon الذي يجب أن يفعّل أولاً بواسطة أداة الخدمات services في توزيعتك أو

bash# chkconfig --levels 345 atd on
bash# service atd start
ونسعمل الأداة at أو batch لإضافة مهمة و atq لعرض وقت ورقم المهمة و atrm لحذفها بناءً على رقمها. الفرق بين at و batch أن الأخيرة تنفذ المهمة عندما يقل متوسط حمل الجهاز loadavg عن 0.80 أما الصيغة لكليهما فهي واحدة
bash# at -f FILE TIME
حيث TIME يمكن أن يعطى بطريقة مرنة جداً مثل نسبة للوقت الحالي +3minutes أي بعد 3 دقائق. أو في وقت معين مثل 22:30 أو 10:30PM للعاشرة والنصف مساءً (إذا كان الوقت الحالي تجاوزه فهي من اليوم التالي). أو مزيج مثل 10:30PM +3weeks أي العاشرة والنصف مساءً بعد ثلاث أيام. دقة هذه الأداة هي بالدقيقة.

لتنفيذ برنامج معين بشكل متكرر في فترات ثابتة يكون بالخدمتين cron و anacron الأولى درجة الدقة فيها بالدقيقة والأخرى باليوم. ولكن الأولى تنفذ في لحظة معينة من اليوم (أي تفترض تشغيل مستمر للجهاز في اللحظة المطلوبة) ويمكن خداعه بالتوقيت الصيفي/الشتوي فينفذه مرتين في يوم أو يتجاوز عنه. أما الأخرى فلأن الدقة باليوم فلا يوثر عليها تغيير التوقيت ساعة أو إغلاق الحاسوب للحظة.

تعد التوزيعات هتاين الخدمتين بحيث تنفذ كل النصوص التنفيذية shell scripts الموجودة في أدلة مثل /etc/cron.daily و /etc/cron.weekly و /etc/cron.monthly لتنفذ بما توحي به أسماؤها (يومي وأسبوعي وشهري .. وفي حالة cron ساعي) لتفعيل أي من هاتين الخدمتين (واحدة فقط) استعمال chkconfig ثم شغل الخدمة. لإعداد شيء أكثر خصوصية تحتاج لأكثر من ذلك.

يسمح cron لمستخدمين غير الجذر بعمل جدول مهام خاص بهم بشرط أن يسمح لهم الجذر بوض أسماؤهم في ملف cron.allow أو أن لا يكونوا في cron.deny. لعرض جدول المهام
crontab -l [-u USER]
ولحذف جدول مهام
crontab -r [-u USER]
ولتحرير هذا الجدول
crontab -e [-u USER]
ويمكنك أن تحدد بأي محرر نصوص بواسطة تغيير قيمة متغيّر البيئة VISUAL أو EDITOR صيغة هذا الملف تكون بتحديد بعض المتغيرات بشكل إختياري على هيئة VARIABLE=VALUE مثلاً SHELL=/bin/bash ثم جدول بالصيغة

MIN HOUR DAY_OF_MONTH MONTH DAY_OF_WEEK		COMMAND
حيث MIN من 0-59 و HOUR من 0-23 و DAY_OF_MONTH من 1-31 و MONTH من 1-12 و DAY_OF_WEEK من 0-6 (صفر هو السبت) ، ويكمن أن تكون القيم * بمعنى كل القيم الممكنة و يمكن وضع A-B/C بمعنى من A إلى B بقفز C (بما في ذلك A وربما B إذا لم تقفز عنها C) مثلاً 1-8/2 تعني الأرقام 1,3,5,7 كما يجوز وضع قيم بين فواصل. مثلاً
30 15 * * 6		COMMAND
تعني تنفيذ COMMAND مرة كل أسبوع (يوم الجمعة الساعة 15:30 أي 3:30PM تحديداً) حيث ربما هو وقت أضمن أن يكون الجهاز يعمل وأن يكون هناك ضغط عمل قليل حتى لا يؤثر على عمل الخادم.

أما anacron فيحتفظ بإعداداته في ملف /etc/anacrontab وهو على صيغة

DAYS MINUTS_DELAY ID_STRING	COMMAND
حيث DAYS هو الفاصل الزمني بالأيام بين كل تنفيذين للمهمة، أما MINUTS_DELAY هو التأخير بالدقائق. و ID_STRING هي مجرد اسم للتمييز و COMMAND هو الأمر المطلوب تنفيذه. مثلاً:
7 15 mycommnd	COMMAND
لتشغيل الأمر بشكل اسبوعي

المحتويات
حقوق النسخ والملكية الفكرة
ما هو لينكس؟
كيف تركب نظام لينكس؟
حقوق النسخ المرفوعة
وثائق التخويف

عرب-آيز
مجتمع لينكس العربي
موسوعة ثواب
موسوعة ويكيبيديا
تعريف البرمجيات الحرة
تعريف مفتوحة المصدر
LinuxToday
Linux.org
Linux.com
SlashDot
FreshMeat
LWN.net
توزيعات لينكس
النسخة الإسلامية لأوبنتو
عَرَبيان
جواثا (أول مسجد في أوروبا)
المزيد من التوزيعات هنا

إسلاميات
    برامج:
بريمج أوقات الصلاة
بريمج التقويم الهجري
    صوتيات:
محاضرات: قصص الأنبياء (نبيل العوضي)
أناشيد
اطلب نسختك مجاناً
لكي تصلك أقراص لينكس أوبونتو Ubuntu أصلية مجاناً والتوصيل مجاناً لن تدفع فلساً واحداً ولن تجبر على رؤية دعايات. كل ما عليك هو أن تنقر هنا.
مقالات
    تقنية:
تسجيل وتحويل الصوتيات
تعريف الماسح الضوئي في لينكس
    ساخرة:
من أجل ذلك لا تقرأ
الفيلة والصراع العربي الإسرائيلي
بلاغات
التبليغ عن إعلانات غير مرغوبة
عثرات وأخطاء إملائية
وصلات لا تعمل:

 

ننصح باستخدام متصفحات الوب الحرة، جرب ثعلب النار الآن

يمكنك الحصول على الكثير من البرامج الحرة عالية الجودة من هنا مجاناً
proud to be 100% Microsoft FREE GNU FDL
التدخين حرام

كن كحامل المسك ولا تكن كنافخ الكير

Generously Hosted by www.JadMadi.net

Previous Up 4.9 إدارة النظام Next
Copyright © 2007, Muayyad Saleh AlSadi