4.9 إدارة النظام كتاب لينكس الشامل >>

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

الفهرس

4.9.1 مقدمة

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

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

tipتلميح

كلمات السر لتي يضعها المصنع قد تتخطى كلمة سر 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 أشهر ، وعدم كتابتها في ملفات غير مشفر أو على ورق في مكان قريب من الجهاز!!

tipتلميح

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

tipتلميح

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

tipتلميح

عند تشفير كلمة السر يتم توليد مفتاح التشفير عشوائياً واعتبار كلمة السر نفسها هي مفتاح الفك، بكلمات أخرى حتى يفك شيفرة كلمة السر يجب أن يعرف كلمة السر ، كأنك تضع المفتاح الوحيد لخزنة أتوماتيكية الاغلاق بداخل الخزنة نفسها. طبعاً هذا على فرض أن المخرب تجاوز جدار النار ووصل للملف المشفر، هذا ما أسميه حماية. ولكن حتى تكمل الحلقة يجب أن يكون عشوائياً ولكن لا يوجد عملية عشوائية حقاً لهذا تأكد من أن نصوص الإقلاع تقوم بعملية اعتلاجية 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. لإضافة مجموعة groupadd ، ولإضافة مستخدم في مجموعة gpasswd -a myuser mygroup ولمعرفة المجموعات التي ينتمي لها مستخدم groups myuser ، ولتحديد مدة صلاحية للمستخدم chage مثلاً طالب تنتهي صلاحية حسابه بنهاية السنة chage -M 365 student1. ولتصبح مستخدم آخر اكتب su واسم ذلك المستخدم إذا لم تحدد عنها سيكون الجذر (طبعا ستسأل عن كلمة سره) أما إذا أصدر أمر su الجذر فإنه لن يسأل عن كلمة سر. أمر su لن يغيّر الدليل الحالي أو ينفذ ملف ~/.bashrc وغيره الخاص بالمستخدم الجديد إلا إذا تبع بعلامة نافص كما su - فإنه يعطيك جلسة كاملة. ولتنفيذ أمر على أنك مستخدم آخر أو الجذر اكتب sudo متبوعة بالأمر المراد تنفيذه، وهنا لن تسأل عن كلمة سر الجذر وطبعا فقط من يضعهم الجذر في قائمة ال sudoers يمكنهم ذلك ويمكن تحديد أي الأوامر التي ينطبق عليها ذلك وإذا وضع الجذر مستخدمين في تلك القائمة وسمح لهم بكل شيء فإنه يفتح ثغرة في النظام وبشكل تقليدي يضع الجذر مستخدين في تلك القائمة ويسمح لهم فقط بإطفاء النظام، أو تغير الساعة.

tipتلميح

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

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

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

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

4.9.3 ملف كلمات السر

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

warningتحذير

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

لخانة الأخيرة هي مفسر الأوامر عادة يكون /bin/ksh أو /bin/ksh وإذا أردت أن تمنعه /bin/nologin . هذا الملف يجب أن يسمح للجميع بالقراءة منه (ليتمكن المستخدمون من معرفة رقمهم ومفسر أوامرهم ... إلخ) ولا أحد غير الجذر يمكنه الكتابة به chown root /etc/passwd و chmod 644 /etc/passwd تفي بالغرض أما الملف /etc/shadow فالجذر وحده من يقرأه chmod 600 /etc/passwd و chown root /etc/shadow وإذا كانت كلمة سر الظل مفعلة فهي لن تكون موجودة في /etc/passwd بل /etc/shadow

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

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

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

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

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

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

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

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

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

هناك طريقتين لإعداد PAM إما عبر ملف واحد في etc أو عبر ملف منفصل لكل برنامج /etc/pam.d/NAME حيث NAME هو اسم البرنامج (الأداة) التي تريد إعدادها مثل su و login و ftp و ssh وغيرها بأحرف صغيرة ملفات الإعداد هذه عبارة عن أسطر من المحددات أو التعليقات (تبدأ ب # ولا يجوز أن تدمج مع أسطر خرى) العمود الأول من كل سطر ليس تعليق هو واحد من auth أو account أو password أو session وهي التي تحدد الإجراءات في حالة الاسناد(السؤال عن اسم المستخدم وكلمة سره مثلاً) ، عمليات الحساب التي لا علاقة لها بالإسناد (مثل وجود ملف من عدمه أو وقت محدد أو فترة الصلاحية أو تجاوز الحد المسموج به بعدد الدخولات) ، تغيير كلمة السر ، إجراءات ما بعد الدخول على الترتيب ويجوز أن تظهر هذه في أكثر من سطر أو لا تظهر ولكنها يجب أن تظهر بهذا الترتيب. في العمود التالي نحدد ضرورة هذا الشرط مثلاً 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 نضيف عمود أول
# ...
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-auth 
password	required /lib/security/pam_stack.so service=system-auth
session		required /lib/security/pam_stack.so service=system-auth
إذا وضعت أكثر من شرط يسأل عن كلمة سر (ضمن نفس الصنف auth مثلاً) تأكد أن كل ما بعد الأول تأخذ try_first_pass أو use_first_pass أي جرب كلمة السر التي أخذها plugin السابق

4.9.6 كسر كلمة سر

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

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
فإن البرنامج السابق لن يعلق بل سيفشل في تنفيذ المزيد بعد تجاوزه الحد وبهذا يظل النظام آمناً.
tipتلميح

ربما هذا مصدر النكتة التي يرويها 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
لتشغيل الأمر بشكل اسبوعي


<< السابق كتاب لينكس الشامل التالي >>