إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

سلسلة مراقبة الأنظمة: مراقبة العمليات Monitoring Processes

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • سلسلة مراقبة الأنظمة: مراقبة العمليات Monitoring Processes

    في هذه السلسلة المكونة من اربع مواضيع سنقوم بتغطية الأمور المتعلقة بمراقبة الأنظمة والشبكات،والتي تهم كل مدير للنظام لتأدية أعماله بشكل ممتاز دون حدوث مشاكل. وستقسم الدروس الى اربعة مواضيع رئيسية عامة هي على النحو التالي:

    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 days16:47,  2 users,  load average0.210.200.14
    Tasks
    119 total,   1 running118 sleeping,   0 stopped,   0 zombie
    Cpu
    (s):  2.7us,  0.7sy,  0.0ni96.5id,  0.0wa,  0.2hi,  0.0si
    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/
    في السطور الأولى من الناتج نجد أن الأمر 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 او ما يمكن ان اترجمه الى قنبلة الاستنساخ والتي يمكن لمستخدم عادي ان يقوم بعمله واستغلال موارد العمليات وبالتالي تعطيل النظام بالكامل.

    تحدد العمليات على أنظمة ريدهات و مثيلاتها باستخدام الملف :
    كود PHP:
    /etc/security/limits.conf 
    والذي يتحكم به أحد ملفات الPAM : pam_limits.so . طبعا الملف موثق بتعليقات كثيرة و سهلة توضح كيفية استخدام الملف وكتابة الاعدادات داخله :

    كود 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 
    السؤال هو التالي: ماذا لو كان احد المستخدمين عضو في كلا المجموعتين؟ سيتم تطبيق الاعدادات في الأسطر من الأعلى الى الأسفل و بالترتيب. اي في مثالنا السابق لو كان المستخدم greyhunter عضو في كلا المجموعتين فإن اعدادات السطر الخاص بالمجموعة hackers هي التي سيتم تطبيقها عليه و سيتم تجاهل اي اعدادات لاحقة.
    يجدر بنا الاشارة ان ال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 
    يمكننا معرفة ان الأمر ls قد تم تنفيذه 8 مرات على النظام(الحقل الأول)، بينا الأمر find كان الأعلى في استهلاك المعالج (الحقل الثاني و الثالث).

    كما يمكنك استخدام الخيار --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 
    من النتائج أعلاه يمكننا تحديد ان المستخدم samer قد استهلك اكبر قدر من المعالج(حسب الحقل الثاني و الثالث) .

    -الأمر 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 
    ويمكننا ايضا اضافة الخيار -p ليعطينا ملخصا لكل مستخدم على حده. ويمكن دمج الخيارين سويا (ac -dp) .

    - استعراض تاريخ الأوامر بالأمر lastcomm
    يأتي الأمر lastcomm ضمن نفس الحزمة المذكورة اعلاه ليعطي لمدير النظام اجمالي مفصل لجميع الأوامر التي تم تنفيذها على النظام. المثال التالي يستعرض أحد السطور الناتجة عند تنفيذ الأمر lastcomm :
    كود PHP:
    find              S   X root     pts/1      2.11 secs Tue May 15 11:34 
    المثال السابق يستعرض الامر 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 بعمل الأمر التالي على الخادم:
    كود PHP:
    [badman@server ~]$ x() { & } 
    [
    badman@server ~]$x 
    الذي حصل أنه قام بتعريف اقتران جديد اسمه 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
    سترى ان المستخدم badman قد سجل الدخول من عنوان ip هو 10.80.55.201 وانتهى دخوله للنظام بعملية تدمير crash .
    اذا كنت قد فعلت خدمة 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 
    قمنا بتحديد جميع المستخدمين باستخدامنا علامة * واخترنا نوع التحديد hard لضمان عدم تجاوز هذه النقاط الحمراء. اي انه يسمح فقط ب : 200 عملية ، 10 ميجا من الذاكرة الرام ، 100 ميجا كأكبر حجم لملف ، 250 ملف مفتوح بنفس اللحظة لنفس المستخدم ، ولا يزيد عن 6 عمليات تسجيل دخول في نفس الوقت للنظام.

    ارجو ان اكون قد وفقت بكتابة هذا الموضوع ليشكل نقطة انطلاق لمدراء الأنظمة لمعرفة اساليب مراقبة العمليات وعن قريب نلقاكم بموضوع آخر من سلسلة مراقبة الأنظمة.

    لا تنسونا من دعائكم فوالله لقد تكبدت مشقة كبيرة في تأليف هذا الدرس

    ملاحظة: هذا الموضوع يخضع للرخصة السفاحية التي تقضي بنقله و تعديله و حذفه لكن يرجى ذكر مصدر الموضوع على الأقل :thumpsup_green:
    V.I.P

    (وَاصْبِرْ فَإِنَّ اللَّهَ لَا يُضِيعُ أَجْرَ الْمُحْسِنِينَ)
    هود 115

    Linux is user-friendly, but it happens to be selective about its friends

    "احذر أن تكون مثل البقية تأخذ وﻻتعطي ، فلن يكون هناك مصادر تعليمية على الشبكة، ﻻأكثر الله من أمثالهم"


    مجتمع لينوكس العربي: وقف لله تعالى وصدقة جارية، فلا بارك الله في كل من يحاول الإساءة إليه في الظاهر أو في الخفاء...



  • #2
    يشرفني اني اكون اول واحد يرد على هالموضوع الرائع اخي سامر
    مشكور وجاري التطبيق
    سبحان الله وبحمده سبحان الله العظيم

    تعليق


    • #3
      مقال رائع

      استفدت منه كثيراً

      تعليق


      • #4
        بارك الله فيك يا سامر

        موضوع رائع رائع رائع جدا

        تحياتي
        التعديل الأخير تم بواسطة AmiZya; الساعة 16-05-2007, 12:01 AM.

        La vie est complexe car nous avons tous une partie réelle et une partie imaginaire....

        تعليق


        • #5
          الف شكر لك سامر على الموضوع الرائع
          Fork Bomb Attack
          هههههههههههههههههههههههه يامؤذى

          P : sAFA7
          مش ناوى تقوم بصياغة الرخصة وإعتمادها
          Programming-Fr34ks[dot]NET
          Ma Weblog
          ابدأ بتعلم Python | Ruby
          كتاب البايثون متوافر الآن
          لا اتواجد بهذا المنتدى ... للإتصال

          تعليق


          • #6
            موضوع جااااامد فعلاً و الناس اللي جربت تدي SHELL ACCESS لليوزر بتوعهم هما أكتر ناس هتحس بقيمة الموضوع..

            نيس يا سامر..

            StrikerX, عايزهم يقولو عني بحرضكم على الرذيلة ومش بدي الأمانات و الحقوق لأصحابها بالرخصة اللي أخترعتها دي :P أنا ناقص ياعم..
            My-LiFe My Blog
            أنتظروا ثلاثة مفاجئات قريباً..
            I'm GONE !...WITHOUT h3h3!

            تعليق


            • #7
              هذا الموضوع يخضع للرخصة السفاحية التي تقضي بنقله و تعديله و حذفه لكن يرجى ذكر مصدر الموضوع على الأقل
              ههههههههههههههههههههههههههههههههههه
              ابسط ياعم سفاح بقالك رخصه باسمك
              موضوع جامد ياجراي حقراه تاني لاني داخل علي دورس عمي الوان معتبر
              حتي انا شايفك مصفر يااخي
              will be back
              BOOOF , I AM GONE
              Still , you gotta wait for my PRESENT :D
              C programming arabic Tutorial|Programming-fr34ks

              تعليق


              • #8
                السلام عليكم
                ما شاء الله عليك اخي سامر
                موضوع جميل جدا و مفيد كثيرا
                بارك الله فيك.
                ^_^

                تعليق


                • #9
                  سلام عليكم
                  فعلا جزاك الله خيرا وجعل جهدك في ميزان حسناتك لذي سوال لو تكرمت

                  هل الأمر lsof من الشلة الأوامر المذكورة ؟ :clown:

                  Th1nk bad ... D0 g00d

                  تعليق


                  • #10
                    ايه الحلاوة دي كلها فعلا موضوع رائع بجميع المقايس
                    تحياتي :thumpsup_green:
                    قل وداعاً للشاشات الزرقاء مع جنو لينكس

                    تعليق


                    • #11
                      معلش ممكن اعرف ايه الفرق في امر top بين zombie و stopped و sleeping
                      وكذالك Cpu(s): us, sy, ni, id, wa, hi, si
                      قل وداعاً للشاشات الزرقاء مع جنو لينكس

                      تعليق


                      • #12
                        أشكر للجميع مروركم وتشجيعكم ودعائكم... وان شاء الله سأقوم بإكمال السلسلة الخاصة بالأمن ومراقبة الأنظمة قريبا...

                        للأخوان الذين لديهم استفسارات متعلقة بالموضوع لي عودة معكم قريبا ان شاء الله.

                        تقبلوا تحياتي
                        V.I.P

                        (وَاصْبِرْ فَإِنَّ اللَّهَ لَا يُضِيعُ أَجْرَ الْمُحْسِنِينَ)
                        هود 115

                        Linux is user-friendly, but it happens to be selective about its friends

                        "احذر أن تكون مثل البقية تأخذ وﻻتعطي ، فلن يكون هناك مصادر تعليمية على الشبكة، ﻻأكثر الله من أمثالهم"


                        مجتمع لينوكس العربي: وقف لله تعالى وصدقة جارية، فلا بارك الله في كل من يحاول الإساءة إليه في الظاهر أو في الخفاء...


                        تعليق


                        • #13
                          awesome...

                          تعليق


                          • #14
                            تسلم
                            لابد ان نسأل لماذا......
                            لابد ان نبحث عن أجوبة.....
                            لابد ان تكون متوافقة مع العقل و الواقع.....
                            الحمد لله الذي منحنا هذه النعم.

                            تعليق


                            • #15
                              شكـرا جزيلا لك Hunter علي السلسه وان شاء الله تكمل علي خير

                              تعليق

                              يعمل...
                              X