4.9 إدارة النظام | كتاب لينكس الشامل | >> |
على الرغم من أن أدارة أي نظام تعتبر أمر صعبا ومسؤولية كبيرة حيث هناك الكثير من الأمور المعقدة التي على مدير النظام القيام بها من تأمين الشبكة والإنتباه إلى أذونات الملفات (من يسمح له بماذا) وحماية الملفات والتأكد من أن ملفات أخرى كما هي والبحث عن المخربين وكشفهم وأهم شيء إبقاء النظام قيد العمل 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
لهذا لا تعتمد على هذه الكلمات وحدها انظر بند تشفير القرص في فصل إدارة الأقراص.
الموضوع الأكثر تعقيداً هو الحماية من الهجوم
الخارجي عبر الشبكات ، الذي يتمثل في الوصول عن بعد
للملفات أو العبث بمحتوياتها .
أولا تأكد من أن كلمة الجذر كبيرة بما فيه الكفاية!!
ومعقدة بما فيه الكفاية، وتجنب الكلمات الضعيفة مثل
الأشياء المكررة أو المدرجة
(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
والملفات المشابهة يفي بالغرض
لقد تحدثنا سابقا عن
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
يمكنهم ذلك ويمكن تحديد أي الأوامر التي ينطبق عليها ذلك
وإذا وضع الجذر مستخدمين في تلك القائمة
وسمح لهم بكل شيء فإنه يفتح ثغرة في النظام
وبشكل تقليدي يضع الجذر مستخدين في تلك القائمة ويسمح لهم فقط بإطفاء النظام،
أو تغير الساعة.
عند إضافة مستخدم جديد يتم فتح دليل بيت له ليتم
وضع الإعدادات التي تخصه. قالب هذه الإعدادات هو الدليل /etc/skel
who am i
أو بطريقة طفولية "مين حبيب الماما؟"
(عذراً للعامية)
who mom likes
الأمران الأخيران حالة خاصة من أمر who الذي
يمكنك من عرض المستخدمين الداخلين إلى النظام
(عند تنفيذه دون معاملات يعرض الاسم والخط والمدة).
يمكن تحديد التفاصيل الذي يعرضها عبر عدة معاملات منها
a التي تعرض أغلب التفصيلات أما الخيار H فإنه يضيف سطر
في أعلى الجدول ليحدد معنى كل عمود أما الخيار u يكتفي بعرض الأسماء فقط.
الخيار q يعد كم دخول لكل مستخدم.
who - show who is loged on
وغيرها الكثير من الخيارات. أمر آخر مشابه هو users فهو يعرض المستخدمين
الذين دخول على الجهاز الحالي.
الملف الذي يتم قراءة التقرير (من دخل ومن خرج) منه هو /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
لعرض المحاولات الفاشلة
للدخول تفيد في كشف من يحاول معرفة كلمة السر بالتجريب.
الملف /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 منزلة
تأكد من تغيير زمن آخر تعديل في الملف /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 متساوية، ينتج عن هذا أن يكون لهم نفس الحقوق ولكن هذا في نظري ليس جيداً لأنه ييزيد التعقيد؛ إذا أردت اعطاء عدد من المستخدمين حقوق متساوية ضعهم في مجموعة.
البرامج يكون لها صلاحيات (أذونات) تتحدد (عادةً) بالشخص الذي ينفذها ، مثلاً البرنامج الذي يستعرض الملفات يستطيع استعراض محتويات دليل بيت لأحمد إذا كان من شغله أحمد ولكن إذا نفذه علي فإنه لن يدخل إلى الدليل البيت لأحمد. كما أن البرنامج الذي يستدعي برنامج آخر يكون الجديد بصلاحيات الذي استدعاه.
هذه ليست قاعدة فبرنامج su ينفذه مستخدم عادي يمكنه تنفيذ ما لا ينفذه إلا الجذر(بعد تقديم كلمة سره)! كذلك الأمر مع برنامج login ، وبرنامج sudo أيضاً . على أي أساس تعمل هذه البرامح ؟ إذا حدد مدير النظام علامة suid في أذونات ملف برنامج معين يتم تشغيل هذا البرنامج بصلاحيات مالك البرنامج وليس مشغل البرنامج أي برنامج يملكه الجذر يحمل علامة suid فإنه يحصل على صلاحيات الجذر بغض النظر من الذي نفذه ، كذلك الأمر مع sgid التي تعطي البرنامج صلاحيات مجموعة مالك الملف وليس منفذ الملف يمكن وضع هذه العلامة باستعمال chmod حيث تأخذ suid الرقم 4 ، sgid الرقم 2 ، من المنزلة الرابعة من اليمين. وطبعاً فقط مالك الملف أو الجذر هو من يضع هذه العلامة. وجود برامج تحمل هذه العلامة هنا وهناك دون ضوابط يعتبر ثغرة أمنية ، مثل هذه البرامج يجب أن يكون مدروساً بعناية . عند تشغيل برنامج يحمل العلامة gsuid فإنه يملك صلاحيات مالكه ولكن بامكانه (إذا أراد) التحول إلى صلاحيات الشخص الذي نفذه.
فائدة هذه العملية إضافة لبرنامج su و login هي
إذا كان لدينا برنامج لعبة يمكن لأي شخص أن يلعبها
ولكن اللعبة فقط هي من يمكنها الكتابة في ملف النقاط
أو موقع على الشبكة يمكن الزوار من الدخول على
ملفات معينة (شعارات للأجهزة الخلوية) بعد تقديم رمز (بطاقات رصيد) يوضح أنهم دفعوا ثمن الملفات.
الطريقة الوحيدة للحصول على هذه الملفات هي من خلال البرنامج فقط.
في الحالاتين نعمل مجموعة جديدة ونجعل البرنامج
ينتمي لها ب chgrp وكذلك مع الملفات المطلوب حمايتها
ونجعل ملكية البرنامج والملفات تعود على الجذر ب chown
ثم نجعل الدخول على الملفات فقط لهذه المجموعة ومالك الملف الجذر
chmod 770 scretfile
ونعطي البرنامج علامة sgid
بهذا يستطيع البرنامج الدخول إلى الملفات المعنية بغض النظر عن الشخص
الذي نفذه ولكن لا يستطيع أحد الدخول إليها من خارج هذا البرنامج.
يمكن القيام بهذه العملية بعمل
مستخدم جديد واعطاء البرنامج صفة suid ولكن طريقة المجموعات أفضل
تكون هنا مهمة البرنامج تحديد من يسمح له ومن لا يسمح له، وتكون مهمة مدير النظام في التأكد من أن البرنامج يقوم بها بشكل جيد. الشروط الأساسية التي يجب توافرها في هكذا برنامج
ls
بل الصواب /bin/ls
لأن المخرب قد يتمكن من تغيير أولويات التنفيذ PATH
بحيث يجعل من ~/ls
هو الذي ينفذ ولأن هذا البرنامج في الدليل البيت فإنه
يحق له كتابته عيى مزاجه وعند استدعاء ls
من قبل البرنامج في وضع الصلاحيات تنتقل الصلاحيات لبرنامج
~/ls
لإكساب طريقة التعامل مع اعتماد/توثيق الحسابات (بكلمات السر مثلاً) المزيد من القوة والمرونة. كان تشفير 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 هو اسم البرنامج (الأداة) التي تريد إعدادها
مثل su و login و ftp و ssh وغيرها بأحرف صغيرة
ملفات الإعداد هذه عبارة عن أسطر من المحددات
أو التعليقات (تبدأ ب # ولا يجوز أن تدمج مع أسطر خرى)
العمود الأول من كل سطر ليس تعليق هو
واحد من auth أو account أو password أو session
وهي التي تحدد الإجراءات في حالة
الاسناد(السؤال عن اسم المستخدم وكلمة سره مثلاً) ، عمليات الحساب التي لا
علاقة لها بالإسناد (مثل وجود ملف من عدمه أو وقت محدد
أو فترة الصلاحية أو تجاوز الحد المسموج به بعدد الدخولات) ،
تغيير كلمة السر ، إجراءات ما بعد الدخول
على الترتيب ويجوز أن تظهر هذه في أكثر من سطر أو لا تظهر
ولكنها يجب أن تظهر بهذا الترتيب.
في العمود التالي نحدد ضرورة هذا الشرط مثلاً
required شرط ضروري نجاحه فإذا فشل يتابع فحص باقي الشروط
ولكنه يخرج بإشارة فشل،
requisite شرط ضروري فإذا فشل خرج مهملاً باقي الشروط،
sufficient شرط كافي فإذا نجح لا داع لتحقق باقي الشروط،
optional شرط اختياري فشله لا يعني خروج،
العمود الثالث وما بعده هما الإضافة plugin ومعاملاتها
وهي ملفات so موجودة في /lib/security/
كل منها له وظيفة خاصة ويستقبل معاملات من بطريقة خاصة به
هذه بعضها(الأكثر استخداماً):
/lib/security/pam_warn.so
/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
/lib/security/pam_unix.so nullok md5 shadow
/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
ليحصل التعديل لهم جميعاً
/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
# 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 # ...
/etc/securetty
سيكون أول سطر في /etc/pam.d/telnet
auth required /lib/security/pam_securetty.so
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
قلنا أن المخرب cracker يمكن أن يعرف كلمة السر بتخميها من الكلمة المشفرة وذلك باستعمال برامج سذكر أهمها ،وبنفس الطريقة يستطيع مدير النظام البحث عن ثغرات في نظامه من هذه البرامج البرنامج الأشهر crack من موقع http://users.dircon.co.uk/~crypto/index.html وبرنامج johen the ripper www.openwall.com/john وبرنامج slurpie الذي يتفوق على سابقيه بأنه يستطيع توزيع المهمة على أكثر من جهاز www.ussrback.com/distributed.htm
المثال والبرنامج التالي مأخوذ من كتاب 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 ثواني.
ulimit -Hc 0
وهكذا. والحدود
نوعان الأول hard-limit وهذه لا يستطيع تجاوزها سوى الجذر وبطلب صريح
والثانية soft-limit فهي حد مقترح يمكن تجاوزه بطلب صريح
طالما أنه ضمن ال hard-limit.
الخيار -H
يعني hard-limit
و -S
يعني soft-limit وهو التلقائي.
نوع الحد | الوحدة | الخيار |
---|---|---|
حجم ملف core | block* | c |
حجم مقطع البيانات | كيلو-بايت | d |
أكبر حجم ملف | block* | f |
أكبر حجم ذاكرة مقفلة | كيلو-بايت | l |
أكبر حجم للذاكرة | كيلو-بايت | m |
عدد الملفات المفتوحة | ملف | n |
حجم ذاكرة الأنبوب | 512 بايت | p |
حجم المكدس stack | كيلو-بايت | s |
وقت المعالج | ثانية | t |
عدد البرامج للمستخدم | عملية | u |
الذاكرة الافتراضية | كيلو-بايت | v |
يحتاج مدير النظام للقيام بالكثير من الأعمال الرتيبة يتم تنفيذها بشكل متكرر في فترات زمنية محددة. مثل القيام بالتخزين الاحتياطي والأرشفة backup أو الفحوصات أو عمل التقارير (مثل webalizer) أو لف التقارير log rotation. هناك أسلوبين لتنفيذ مهمة في وقت معين الأول أن تنفذ مرة واحدة عند قدوم زمن معين (إذا كان الجهاز يعمل حينها) والطريقة الثانية تنفيذ مهمة بشكل متكرر في فترت زمنية ثابتة (مثلاً مرة من كل شهر)
إذا كانت المهمة تتطلب سلسلة من الأوامر والفحوص ضعها في ملف واحد؛ انظر برمجة بلغة bash. يمكنك عمل ذلك بطريقة غريبة بواسطة أمر sleep مثلاً لتنفيذ COMMAND بعد ساعة
bash# sleep 3600 ; COMMAND &
#!/bin/bash function doit() { sleep 3600 COMMAND doit } doit
لتنفيذ مهمة في وقت معين مرة واحدة نستعمل مراقب at daemon الذي يجب أن يفعّل أولاً بواسطة أداة الخدمات services في توزيعتك أو
bash# chkconfig --levels 345 atd on bash# service atd start
bash# at -f FILE 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
<< السابق | كتاب لينكس الشامل | التالي >> |