في هذه السلسلة المكونة من اربع مواضيع سنقوم بتغطية الأمور المتعلقة بمراقبة الأنظمة والشبكات،والتي تهم كل مدير للنظام لتأدية أعماله بشكل ممتاز دون حدوث مشاكل. وستقسم الدروس الى اربعة مواضيع رئيسية عامة هي على النحو التالي:
1- مراقبة العمليات Monitoring Processes
2-مراقبة نظام الملفات Monitoring the Filesystem
3-مراقبة الشبكة Monitoring the Network
4- مراقبة ملفات السجلات Monitoring System Logs
كما هو معلوم للجميع فإن الأمر ps يعد من اهم الأوامر وأكثرها استخداما لرؤية ملخص سريع عن العمليات التي نفذت على النظام لحظة اطلاق الأمر ، و مراجعة سريعة للأمر ps سنجد أنه مع الخيارات aux سيعطينا معلومات حسب التالي:
- الخيار a : يعطي جميع العمليات المنفذة عن طريق التيرمنال Terminal
-الخيار x : يعطي جميع العمليات المنفذة عن طريق الواجهة الرسومية أو X Server
- الخيار u : يستخدم لعرض معلومات عن المستخدم الذي ينفذ العملية.
ويمكن استخدام الخيار f ايضا لعرض معلومات عن العملية الأصلية أو الParent Process والعملية المستنسخة أو Child Process .
-المراقبة الديناميكية للعمليات Dynamic Process Monitoring
في كثير من الحالات يعجز الأمر ps عن اعطائك المعلومات المطلوبة عن العمليات الحالية لأنه يقوم بأخذ صورة Snapshot عن العمليات فقط لحظة تنفيذ الأمر.
هناك عدة أوامر قد تساعد مدير النظام في اعطائه معلومات متجددة updated كل لحظة بلحظة، ومثل هذه الأدوات سنجد الأمر top والأمر gnome-system-monitor الذي يأتي مع حزمة سطح المكتب gnome وهو أداة رسومية graphical.
لنلقي نظرة سريعة لناتج الأمر top عند اطلاقه أول مرة:
في السطور الأولى من الناتج نجد أن الأمر top قد قام باعطاءنا معلومات عامة عن النظام مثل مدة تشغيل النظام system's uptime ، معدل استخدام المعالج cpu usage ، حجم استخدام الذاكرة العشوائية والاضافية او السواب memory usage وغيرها من المعلومات. اما في باقي الأسطر نجد مفصل كامل للعمليات بحيث يعطينا معلومات عن استخدام المعالج و الذاكرة (%MEM) (%CPU) والمستخدم (USER) ورقم العملية (PID) واسم العملية أو الأمر (COMMAND) وغيرها من المعلومات ولكل عملية على حده.
كما لاحظتم ايضا أن الأمر top يقوم بعمل تحديث update للمعلومات كل 3 ثواني بشكل افتراضي. يمكنك تغيير المدة الزمنية هذه بالضغط على حرف s أو d لتغيير الزمن بالثواني بين كل تحديث و آخر. كما يمكنك ايضا الضغط على حرف h مثل helpلاعطاءك جميع الاختصارات التي يمكن استخدامها مع الأمر top . (لاحظ وجود أحرف كبيرةCAPITAL LETTERS وأخرى صغيرة small letters كاختصارات مع الأمر top ) . وفي بعض الحالات يمكن تمرير الخيار لحظة اطلاق الأمر top من سطر الأوامر كالمثال التالي:
top -d 1 ليقوم بعمل تحديث كل ثانية واحدة.
من استخدامات الأمر top الشائعة هو الحرف k لارسال اشارة SIGN الى العملية ( مثلا signal 15, aka SIGTERM وهي الافتراضية تستخدم لايقاف العملية. تذكر اي عملية لا تستجيب لهذه الاشارة يمكنك تمرير الاشارة signal 9 (SIGKILL) لكي تقوم بايقافها بالقوة ) . فبعد الضغط على الحرف k يطلب منك ادخال رقم العملية PID ثم رقم الاشارة التي تريد ارسالها والتي تكون بالعادة اما 15 أو 9 .
- تحديد العمليات Process Limits
نأتي الآن للجزء الأهم في موضوعنا هذا وهو كيفية التحكم بالعمليات ومنع استخدامها بشكل مقصود او غير مقصود لتعطيل او ايقاف النظام عن العمل. وسنتحدث عن مثال بسيط يسمى ال Fork Bomb او ما يمكن ان اترجمه الى قنبلة الاستنساخ والتي يمكن لمستخدم عادي ان يقوم بعمله واستغلال موارد العمليات وبالتالي تعطيل النظام بالكامل.
تحدد العمليات على أنظمة ريدهات و مثيلاتها باستخدام الملف :
والذي يتحكم به أحد ملفات الPAM : pam_limits.so . طبعا الملف موثق بتعليقات كثيرة و سهلة توضح كيفية استخدام الملف وكتابة الاعدادات داخله :
كما يبدو لنا من المثال الموجود في نفس الملف ان طريقة كتابة الاعدادات على نمط:
(who to limit) (type of limit) (what to limit) (limit value)
قيمة التحديد ، ماذا سيمنع؟، نوع التحديد ؟، من الذي سيحدد؟
-who to limit من الذي سيحدد؟ : هذه القيمة يمكن ان تكون اسم مستخدم ، او اسم مجموعة مسبوقة ب@ ، أو يمكن استخدام النجمة * للدلالة على جميع المستخدمين.
-type of limit نوع التحديد : يمكن ان يأخذ إما القيمة soft أو القيمة hard ، الأولى يمكن للمستخدم تجاوزها اذا قام باستخدام الأمر ulimit لذلك يمكن اعتبارها فقط كدليل للمستخدم. اما القيمة hard فلا يمكن للمستخدم ان يتجاوزها مهما كانت الظروف.
-what to limit ماذا سيمنع؟ : هذا الحقل سيحدد نوع المصدر الذي سيتم حمايته، ويأخذ قيم مثل nproc الذي يدل على أقصى رقم للعمليات التي يمكن للمستخدم تنفيذها على النظام ، fsize وهي أكبر حجم لملف يمكن للمستخدم ان يقوم بانشاءه ، rss أكبر حجم لتطبيق في الذاكرة ، cpu عدد الدقائق المستهلكة في المعالج لمعالجة تطبيق ما ، maxlogins عدد مرات الدخول للجهاز وغيرها...
-limit value قيمة التحديد : وهي القيمة العددية التي سنقوم بتحديدها لكل حقل.
مثلا اذا اردنا تحديد عدد العمليات للمجموعة hackers ب200 عملية ، والمجموعة admins ب 300 عملية لا يمكن تجاوزها :
السؤال هو التالي: ماذا لو كان احد المستخدمين عضو في كلا المجموعتين؟ سيتم تطبيق الاعدادات في الأسطر من الأعلى الى الأسفل و بالترتيب. اي في مثالنا السابق لو كان المستخدم greyhunter عضو في كلا المجموعتين فإن اعدادات السطر الخاص بالمجموعة hackers هي التي سيتم تطبيقها عليه و سيتم تجاهل اي اعدادات لاحقة.
يجدر بنا الاشارة ان الPAM ستبدأ بالعمل على المستخدمين لحظة تسجيل دخولهم وليس على المستخدمين الحاليين او المسجلين.
- حساب و تدقيق العمليات Process Accounting
تقدم انظمة ريدهات ضمن الحزمة المسماه psacct امكانية حفظ سجلات تدقيق لجميع العمليات التي قام بها المستخدمون بالاضافة للاوامر التي قاموا بتنفيذها، ويتم تخزين النتائج في ملف مرمز ثنائيا Binary File هو /var/account/pacct ،ويمكننا استخدام الخدمة psacct كأي خدمة أخرى ، لتفعيلها نقوم بعمل:
طبعا يلزمك تشغيل الخدمة لفترة كافية لتبدأ بتخزين المعلومات في الملف الخاص بها.
- الأمر sa
ضمن حزمة psacct نجد الأمر sa والذي يقوم باعطائنا ملخصا لجميع العمليات التي تم تنفيذها على النظام بالاضافة للمعلومات التالية:
- عدد مرات التنفيذ number of times run
- الزمن الفعلي للتنفيذ "real-time" spent running
- زمن استخدام المعالج "cpu-time" used
- معدل استخدام الذاكرة average core memory usage
- اسم الأمر command name
مثلا لنرى هذا المثال بعد تنفيذ الأمر sa لدينا:
يمكننا معرفة ان الأمر ls قد تم تنفيذه 8 مرات على النظام(الحقل الأول)، بينا الأمر find كان الأعلى في استهلاك المعالج (الحقل الثاني و الثالث).
كما يمكنك استخدام الخيار --user-summary ليعطي تفصيلا حسب اسم المستخدم:
من النتائج أعلاه يمكننا تحديد ان المستخدم samer قد استهلك اكبر قدر من المعالج(حسب الحقل الثاني و الثالث) .
-الأمر ac
ضمن نفس الحزمة نجد الأمر ac والذي يعطي معلومات عن الفترة الزمنية التي قضاها المستخدم مسجلا في حسابه على النظام Logged-in Time . عند تنفيذه دون خيارات سيعطينا ملخصا لاجمالي عدد الساعات لجميع المستخدمين ككل. ولكن مع الخيار -d سيعطينا اجمالي عدد الساعات يوما بيوم مثال:
ويمكننا ايضا اضافة الخيار -p ليعطينا ملخصا لكل مستخدم على حده. ويمكن دمج الخيارين سويا (ac -dp) .
- استعراض تاريخ الأوامر بالأمر lastcomm
يأتي الأمر lastcomm ضمن نفس الحزمة المذكورة اعلاه ليعطي لمدير النظام اجمالي مفصل لجميع الأوامر التي تم تنفيذها على النظام. المثال التالي يستعرض أحد السطور الناتجة عند تنفيذ الأمر lastcomm :
المثال السابق يستعرض الامر find والذي تم انهائه بالأمر Ctrl+c (سبب ظهور علامة X ) الذي نفذه المستخدم root من تيرمنال رسومية (pts/1) واستغرق قرابة 2 ثانية والتاريخ والوقت لتنفيذ هذا الأمر.
كما يمكن اشتخدام بعضاً الخيارات التالية مع الأمر lastcomm :
--user user_name : لعرض الأوامر الخاصة بالمستخدم user_name
--tty : لتحديد رقم الVirtual Console التي نريد عرض الأوامر التي استخدمت فيها
- هجوم القنبلة الاستنساخية Fork Bomb Attack
المستخدمين الموجودين على نظام ما أو خادم معين لديهم القدرة على استنزاف الموارد الخاصة بذاك النظام بكل بساطة بتنفيذ برامج تقوم بعمل دورانات لا نهائية أو استنساخ لعمليات أخرى. ولاحظ اننا نعني بالمستخدم سواء سجل دخوله عن طريق الشبكة بخدمة مثل الssh او telnet ، او حتى لو كان جالسا مباشرة على الجهاز!!
المثال التالي سيقوم بشرح هذه الآلية وكيفية الحد منها:
تحذير: لا تقم بتجربة هذا المثال بالمنزل
Warning: Don't try it at home
قام المستخدم badman بعمل الأمر التالي على الخادم:
الذي حصل أنه قام بتعريف اقتران جديد اسمه x() ، وجعل الاقتران يقوم باستدعاء نفسه مرة أخرى و تحويل ناتجه الى نفسه مرة ثانية!! وجعله يعمل بالخلفية باستخدام & .
خلال ثواني قليلة سيقوم الاقتران او العملية x() باستنساخ Forking نفسها وبالتالي حجز رقم عملية PID خاص بها مما سيؤدي الى نفاذ أرقام العمليات او الPID's من النظام!! وبالتالي لو جاء الroot نفسه و قام بمحاولة لتشغيل سطر الاوامر او bash مثلا فلن يستجيب له النظام، ولن يجد مفرا من اعادة تشغيل الخادم يدويا Hard Reset .
طبعا الحل بكل بساطة كالتالي:
يمكنك تنفيذ الأمر last لتجد ناتجا شبيه بالتالي:
سترى ان المستخدم badman قد سجل الدخول من عنوان ip هو 10.80.55.201 وانتهى دخوله للنظام بعملية تدمير crash .
اذا كنت قد فعلت خدمة psacct التي تكلمنا عنها سابقا يمكنك تنفيذ الامر lastcomm --user badman وسترى جميع الأوامر التي قام بتنفيذها.
طبعا لتلافي مثل هذه الأمور يمكنك تعديل الملف /etc/security/limits.conf ليصبح مثلا على النحو التالي:
قمنا بتحديد جميع المستخدمين باستخدامنا علامة * واخترنا نوع التحديد hard لضمان عدم تجاوز هذه النقاط الحمراء. اي انه يسمح فقط ب : 200 عملية ، 10 ميجا من الذاكرة الرام ، 100 ميجا كأكبر حجم لملف ، 250 ملف مفتوح بنفس اللحظة لنفس المستخدم ، ولا يزيد عن 6 عمليات تسجيل دخول في نفس الوقت للنظام.
ارجو ان اكون قد وفقت بكتابة هذا الموضوع ليشكل نقطة انطلاق لمدراء الأنظمة لمعرفة اساليب مراقبة العمليات وعن قريب نلقاكم بموضوع آخر من سلسلة مراقبة الأنظمة.
لا تنسونا من دعائكم فوالله لقد تكبدت مشقة كبيرة في تأليف هذا الدرس
ملاحظة: هذا الموضوع يخضع للرخصة السفاحية التي تقضي بنقله و تعديله و حذفه
لكن يرجى ذكر مصدر الموضوع على الأقل :thumpsup_green:
1- مراقبة العمليات Monitoring Processes
2-مراقبة نظام الملفات Monitoring the Filesystem
3-مراقبة الشبكة Monitoring the Network
4- مراقبة ملفات السجلات Monitoring System Logs
الموضوع الأول : مراقبة العمليات Monitoring Processes
كما هو معلوم للجميع فإن الأمر ps يعد من اهم الأوامر وأكثرها استخداما لرؤية ملخص سريع عن العمليات التي نفذت على النظام لحظة اطلاق الأمر ، و مراجعة سريعة للأمر ps سنجد أنه مع الخيارات aux سيعطينا معلومات حسب التالي:
- الخيار a : يعطي جميع العمليات المنفذة عن طريق التيرمنال Terminal
-الخيار x : يعطي جميع العمليات المنفذة عن طريق الواجهة الرسومية أو X Server
- الخيار u : يستخدم لعرض معلومات عن المستخدم الذي ينفذ العملية.
ويمكن استخدام الخيار f ايضا لعرض معلومات عن العملية الأصلية أو الParent Process والعملية المستنسخة أو Child Process .
-المراقبة الديناميكية للعمليات Dynamic Process Monitoring
في كثير من الحالات يعجز الأمر ps عن اعطائك المعلومات المطلوبة عن العمليات الحالية لأنه يقوم بأخذ صورة Snapshot عن العمليات فقط لحظة تنفيذ الأمر.
هناك عدة أوامر قد تساعد مدير النظام في اعطائه معلومات متجددة updated كل لحظة بلحظة، ومثل هذه الأدوات سنجد الأمر top والأمر gnome-system-monitor الذي يأتي مع حزمة سطح المكتب gnome وهو أداة رسومية graphical.
لنلقي نظرة سريعة لناتج الأمر top عند اطلاقه أول مرة:
كود PHP:
top - 08:54:08 up 2 days, 16:47, 2 users, load average: 0.21, 0.20, 0.14
Tasks: 119 total, 1 running, 118 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.7% us, 0.7% sy, 0.0% ni, 96.5% id, 0.0% wa, 0.2% hi, 0.0% si
Mem: 505292k total, 489720k used, 15572k free, 18304k buffers
Swap: 819272k total, 160k used, 819112k free, 167516k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2871 root 15 0 35876 11m 8156 S 4 2.4 0:00.33 gnome-terminal
4823 root 15 0 307m 45m 6424 S 2 9.2 14:20.75 X
1 root 16 0 3468 552 472 S 0 0.1 0:00.75 init
2 root RT 0 0 0 0 S 0 0.0 0:00.10 migration/0
3 root 34 19 0 0 0 S 0 0.0 0:00.01 ksoftirqd/0
4 root RT 0 0 0 0 S 0 0.0 0:00.09 migration/1
5 root 34 19 0 0 0 S 0 0.0 0:00.11 ksoftirqd/1
6 root 5 -10 0 0 0 S 0 0.0 0:00.26 events/0
7 root 5 -10 0 0 0 S 0 0.0 0:00.25 events/1
8 root 5 -10 0 0 0 S 0 0.0 0:00.00 khelper
9 root 14 -10 0 0 0 S 0 0.0 0:00.00 kacpid
34 root 5 -10 0 0 0 S 0 0.0 0:00.03 kblockd/0
كما لاحظتم ايضا أن الأمر top يقوم بعمل تحديث update للمعلومات كل 3 ثواني بشكل افتراضي. يمكنك تغيير المدة الزمنية هذه بالضغط على حرف s أو d لتغيير الزمن بالثواني بين كل تحديث و آخر. كما يمكنك ايضا الضغط على حرف h مثل helpلاعطاءك جميع الاختصارات التي يمكن استخدامها مع الأمر top . (لاحظ وجود أحرف كبيرةCAPITAL LETTERS وأخرى صغيرة small letters كاختصارات مع الأمر top ) . وفي بعض الحالات يمكن تمرير الخيار لحظة اطلاق الأمر top من سطر الأوامر كالمثال التالي:
top -d 1 ليقوم بعمل تحديث كل ثانية واحدة.
من استخدامات الأمر top الشائعة هو الحرف k لارسال اشارة SIGN الى العملية ( مثلا signal 15, aka SIGTERM وهي الافتراضية تستخدم لايقاف العملية. تذكر اي عملية لا تستجيب لهذه الاشارة يمكنك تمرير الاشارة signal 9 (SIGKILL) لكي تقوم بايقافها بالقوة ) . فبعد الضغط على الحرف k يطلب منك ادخال رقم العملية PID ثم رقم الاشارة التي تريد ارسالها والتي تكون بالعادة اما 15 أو 9 .
- تحديد العمليات Process Limits
نأتي الآن للجزء الأهم في موضوعنا هذا وهو كيفية التحكم بالعمليات ومنع استخدامها بشكل مقصود او غير مقصود لتعطيل او ايقاف النظام عن العمل. وسنتحدث عن مثال بسيط يسمى ال Fork Bomb او ما يمكن ان اترجمه الى قنبلة الاستنساخ والتي يمكن لمستخدم عادي ان يقوم بعمله واستغلال موارد العمليات وبالتالي تعطيل النظام بالكامل.
تحدد العمليات على أنظمة ريدهات و مثيلاتها باستخدام الملف :
كود PHP:
/etc/security/limits.conf
كود PHP:
[root@Gr3yHun73r ~]# tail -12 /etc/security/limits.conf
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
# End of file
(who to limit) (type of limit) (what to limit) (limit value)
قيمة التحديد ، ماذا سيمنع؟، نوع التحديد ؟، من الذي سيحدد؟
-who to limit من الذي سيحدد؟ : هذه القيمة يمكن ان تكون اسم مستخدم ، او اسم مجموعة مسبوقة ب@ ، أو يمكن استخدام النجمة * للدلالة على جميع المستخدمين.
-type of limit نوع التحديد : يمكن ان يأخذ إما القيمة soft أو القيمة hard ، الأولى يمكن للمستخدم تجاوزها اذا قام باستخدام الأمر ulimit لذلك يمكن اعتبارها فقط كدليل للمستخدم. اما القيمة hard فلا يمكن للمستخدم ان يتجاوزها مهما كانت الظروف.
-what to limit ماذا سيمنع؟ : هذا الحقل سيحدد نوع المصدر الذي سيتم حمايته، ويأخذ قيم مثل nproc الذي يدل على أقصى رقم للعمليات التي يمكن للمستخدم تنفيذها على النظام ، fsize وهي أكبر حجم لملف يمكن للمستخدم ان يقوم بانشاءه ، rss أكبر حجم لتطبيق في الذاكرة ، cpu عدد الدقائق المستهلكة في المعالج لمعالجة تطبيق ما ، maxlogins عدد مرات الدخول للجهاز وغيرها...
-limit value قيمة التحديد : وهي القيمة العددية التي سنقوم بتحديدها لكل حقل.
مثلا اذا اردنا تحديد عدد العمليات للمجموعة hackers ب200 عملية ، والمجموعة admins ب 300 عملية لا يمكن تجاوزها :
كود PHP:
@hackers soft nproc 200
@admins hard nproc 300
يجدر بنا الاشارة ان الPAM ستبدأ بالعمل على المستخدمين لحظة تسجيل دخولهم وليس على المستخدمين الحاليين او المسجلين.
- حساب و تدقيق العمليات Process Accounting
تقدم انظمة ريدهات ضمن الحزمة المسماه psacct امكانية حفظ سجلات تدقيق لجميع العمليات التي قام بها المستخدمون بالاضافة للاوامر التي قاموا بتنفيذها، ويتم تخزين النتائج في ملف مرمز ثنائيا Binary File هو /var/account/pacct ،ويمكننا استخدام الخدمة psacct كأي خدمة أخرى ، لتفعيلها نقوم بعمل:
كود PHP:
[root@Gr3yHun73r ~]# service psacct start
Starting process accounting: [ OK ]
[root@Gr3yHun73r ~]# chkconfig psacct on
- الأمر sa
ضمن حزمة psacct نجد الأمر sa والذي يقوم باعطائنا ملخصا لجميع العمليات التي تم تنفيذها على النظام بالاضافة للمعلومات التالية:
- عدد مرات التنفيذ number of times run
- الزمن الفعلي للتنفيذ "real-time" spent running
- زمن استخدام المعالج "cpu-time" used
- معدل استخدام الذاكرة average core memory usage
- اسم الأمر command name
مثلا لنرى هذا المثال بعد تنفيذ الأمر sa لدينا:
كود PHP:
[root@Gr3yHun73r~]# sa
45 1.10re 0.16cp 1162k
5 0.11re 0.11cp 935k ***other*
2 0.95re 0.04cp 1203k find
3 0.02re 0.01cp 3113k mrtg
8 0.00re 0.00cp 1188k ls
6 0.00re 0.00cp 595k sa
4 0.02re 0.00cp 1365k crond*
4 0.00re 0.00cp 1101k initlog
3 0.00re 0.00cp 393k accton
2 0.00re 0.00cp 1295k service
2 0.00re 0.00cp 1249k psacct
2 0.00re 0.00cp 1080k chkconfig
2 0.00re 0.00cp 1273k touch
2 0.00re 0.00cp 974k basename
كما يمكنك استخدام الخيار --user-summary ليعطي تفصيلا حسب اسم المستخدم:
كود PHP:
[root@Gr3yHun73r~]# sa --user-summary
4215299 13330758.50re 25375.83cp 1154k
samer 276515 8820873.39re 14547.95cp 2776k
root 3912372 3636040.07re 10808.12cp 1039k
apache 4946 362022.59re 12.41cp 2088k
gdm 129 2974.67re 2.18cp 5738k
mysql 2 6897.32re 0.89cp 22184k
pcap 18 48.86re 0.73cp 769k
-الأمر ac
ضمن نفس الحزمة نجد الأمر ac والذي يعطي معلومات عن الفترة الزمنية التي قضاها المستخدم مسجلا في حسابه على النظام Logged-in Time . عند تنفيذه دون خيارات سيعطينا ملخصا لاجمالي عدد الساعات لجميع المستخدمين ككل. ولكن مع الخيار -d سيعطينا اجمالي عدد الساعات يوما بيوم مثال:
كود PHP:
[root@Gr3yHun73r ~]# ac -d
May 1 total 0.48
May 2 total 5.01
May 5 total 64.63
May 6 total 1.46
May 7 total 0.78
May 8 total 0.41
May 9 total 2.52
May 12 total 7.41
May 13 total 24.03
May 14 total 24.01
Today total 2.93
- استعراض تاريخ الأوامر بالأمر lastcomm
يأتي الأمر lastcomm ضمن نفس الحزمة المذكورة اعلاه ليعطي لمدير النظام اجمالي مفصل لجميع الأوامر التي تم تنفيذها على النظام. المثال التالي يستعرض أحد السطور الناتجة عند تنفيذ الأمر lastcomm :
كود PHP:
find S X root pts/1 2.11 secs Tue May 15 11:34
كما يمكن اشتخدام بعضاً الخيارات التالية مع الأمر lastcomm :
--user user_name : لعرض الأوامر الخاصة بالمستخدم user_name
--tty : لتحديد رقم الVirtual Console التي نريد عرض الأوامر التي استخدمت فيها
- هجوم القنبلة الاستنساخية Fork Bomb Attack
المستخدمين الموجودين على نظام ما أو خادم معين لديهم القدرة على استنزاف الموارد الخاصة بذاك النظام بكل بساطة بتنفيذ برامج تقوم بعمل دورانات لا نهائية أو استنساخ لعمليات أخرى. ولاحظ اننا نعني بالمستخدم سواء سجل دخوله عن طريق الشبكة بخدمة مثل الssh او telnet ، او حتى لو كان جالسا مباشرة على الجهاز!!
المثال التالي سيقوم بشرح هذه الآلية وكيفية الحد منها:
تحذير: لا تقم بتجربة هذا المثال بالمنزل

Warning: Don't try it at home

قام المستخدم badman بعمل الأمر التالي على الخادم:
كود PHP:
[badman@server ~]$ x() { x | x & }
[badman@server ~]$x
خلال ثواني قليلة سيقوم الاقتران او العملية x() باستنساخ Forking نفسها وبالتالي حجز رقم عملية PID خاص بها مما سيؤدي الى نفاذ أرقام العمليات او الPID's من النظام!! وبالتالي لو جاء الroot نفسه و قام بمحاولة لتشغيل سطر الاوامر او bash مثلا فلن يستجيب له النظام، ولن يجد مفرا من اعادة تشغيل الخادم يدويا Hard Reset .
طبعا الحل بكل بساطة كالتالي:
يمكنك تنفيذ الأمر last لتجد ناتجا شبيه بالتالي:
كود PHP:
[root@server ~]# last
root :0 Sat Jun 17 10:37 still logged in
root pts/1 :0.0 Sat Jun 17 10:17 - crash (00:19)
badman pts/3 10.80.50.201 Sat Jun 17 10:05 - crash (00:31)
اذا كنت قد فعلت خدمة psacct التي تكلمنا عنها سابقا يمكنك تنفيذ الامر lastcomm --user badman وسترى جميع الأوامر التي قام بتنفيذها.
طبعا لتلافي مثل هذه الأمور يمكنك تعديل الملف /etc/security/limits.conf ليصبح مثلا على النحو التالي:
كود PHP:
* hard nproc 200
* hard rss 10000
* hard fsize 100000
* hard nofiles 250
* hard maxlogins 6
* hard core 0
ارجو ان اكون قد وفقت بكتابة هذا الموضوع ليشكل نقطة انطلاق لمدراء الأنظمة لمعرفة اساليب مراقبة العمليات وعن قريب نلقاكم بموضوع آخر من سلسلة مراقبة الأنظمة.
لا تنسونا من دعائكم فوالله لقد تكبدت مشقة كبيرة في تأليف هذا الدرس

ملاحظة: هذا الموضوع يخضع للرخصة السفاحية التي تقضي بنقله و تعديله و حذفه

تعليق