متابعة للسلسة التي بدأت باعدادها منذ فترة المكونة من اربع مواضيع وسنقوم بتغطية الأمور المتعلقة بمراقبة الأنظمة والشبكات فيها.
الموضوع الثاني : مراقبة نظام الملفات Monitoring the Filesystem
المراقبة الفعالة لنظامك تتضمن مراقبة وتحديد النشاطات التي تجري في نظام الملفات الخاص بك و ما يحتويه من ملفات و مجلدات. في هذا الدرس سنتعرف على بعض الطرق و الادوات التي يمكننا استخدامها لمراقبة ما يحدث على ملفاتنا في نظام الملفات لدينا.
- SetUID و SetGID :
كما هو معروف لدينا عندما يقوم مستخدم بتنفيذ اي ملف فإن ذلك الملف سينفذ ضمن جميع الصلاحيات المملوكة للمستخدم، بعيارة أخرى إن قام المستخدم azooz بتنفيذ أمر معين، فإن ذلك الأمر أو العملية process الناتجة عنه لن تستطيع استخدام اي ملف لا يخضع لصلاحيات المستخدم azooz . أو ان الملف ليس مملوكا للمستخدم azooz لذلك فإنه لا يملك الصلاحية لاستخدام ذلك الملف سواء بقراءة او بكتابة او بتنفيذ (rwx).
هناك حالة خاصة نستطيع فيها تجاوز هذا الأمر باستخدام SUID للمستخدم المالك و SGID للمجموعة المالكة بحيث نستطيع باستخدام هذه الخاصية ان نعطي اي مستخدم الصلاحية لتنفيذ الأمر او الملف التنفيذي بصلاحية المالك الأصلي Owner للملف حتى و إن كان الملف التنفيذي قد تم انشاءه من قبل مستخدم آخر، او بصلاحية المجموعة المالكة له عند استخدام SGID .
اكثر التطبيقات المستخدمة بهذه الخاصية تتضمن اعطاء امر معين صلاحية root لتنفيذه من قبل أي مستخدم آخر، اي انه بتطبيق خاصية SUID على الملف نقوم باعطاء جميع المستخدمين صلاحية استخدام هذا الملف وكأنهم المستخدم root .
طبعا كمدير للنظام فلا بد أن هذا الأمر قد يسبب لك القلق خوفا من ان يتم استغلال ثغرة معينة في برنامج لديه صلاحية العمل كمستخدم root ...لكن بعض الأوامر قد تتطلب منا ان يكون لها خاصية الSUID لتتنفذ بصلاحية الرووت مثل الأمر ping والأمر traceroute لأن كلا الأمرين يحتاجان الى انشاء باكيتات لارسالها عبر الشبكة وهذا ما لا يستطيع تنفيذه سوى المستخدم root. ولو لم يكن لدى كلا الأمرين هذه الخاصية لما استطاع سوى المستخدم rootان يستخدم كلا الأمرين.
الأمرين ping و traceroute يعتبران من الأمثلة الآمنة لتطبيق خاصية SUID عليهما بسبب نضوج البرنامجين وسهولة تصميمهما. لذا من المستبعد ان يتم اكتشاف اي ثغرة بهما ليتم استغلالها للسيطرة على النظام. لكن بعض مدراء الانظمة غير الخبراء قد يستخدمون هذه الخاصية على بعض البرامج ( غالبا ما تكون الألعاب) لاعطائها صلاحية العمل كمستخدم root لكي يتجنبوا بعض مشاكل الصلاحيات التي قد تظهر عند محاولة تنفيذ هذه البرامج، وهذا بالتأكيد سيزيد من خطورة تعرض النظام للاختراق لأنه من المحتمل ان يتم اكتشاف ثغرة في هذه البرامج بشكل كبير.
- كيفية تحديد الملفات التي لها خاصية SUID و SGID :
باستخدامنا للأمر ls -l نستطيع تحديد الملفات التي لها هذه الخاصية ، حيث يتم استبدال اشارة x الخاصة بالمستخدم المالك أو الخاصة بالمجموعة بحرف s :
وبهذه الطريقة نقوم بالبحث عن الملفات التي بها هذه الخاصية و تعطيلها ان لزم الأمر. وخاصة SUID اذا كان الملف مملوكا للمستخدم root. (كما ذكرنا فإن هذا الملف سيكون له صلاحية العمل كمستخدم رووت حتى لو قام بتنفيذه اي مستخدم عادي).
- الأمر find :
الأمر find يقوم بالبحث عن ملفات بخاصية معينة على نظام معقد وضخم مثل خادم ريدهات لينوكس. طريقة استخدام الأمر find سهلة الى حد ما وسنقوم بعد قليل بتوضيح أهم الخيارات التي يمكننا استخدامها مع هذا الأمر:
طبعا نختر المجلد dir الذي نريد البحث داخله ، والشرط condition الذي نريد البحث عنه. فيما يلي بعض اشهر الشروط التي يمكننا البحث عنها :
*
يستخدم للبحث عن الملفات التي تم تعديل modify محتوياتها خلال x يوم. ويمكننا استخدام الشرط -mmin للبحث عن الملفات التي تم تعديلها خلال دقائق. باستخدام الأمر touch على ملف موجود يمكننا تحديث زمن الmtime للملف يدويا.
*
يستخدم للبحث عن الملفات التي تم تعديل خصائصها (الملكية ، الصلاحية ، الحجم ، الخ..) خلال فترة x يوم . وايضا يمكن استخدام -cmin للبحث بالدقائق بدلا عن الايام.
*
يستخدم للبحث عن الملفات التي تم تطبيق خاصية SUID و SGID عليها، اي ان هذه الملفات تستطيع العمل وكأنها منفذه من قبل المالك الاصلي وليس مستخدم عادي. ولديها صلاحية العمل ضمن اي مجموعة. خاصية SUID تساوي 4 وخاصية SGID تساوي 2 ، واستخدامنا للاشارة + يضمن لنا اظهار النتائج للملفات التي تتضمن خاصية SUID أو خاصية SGID . اذا قمنا باستخدام الاشارة - فستظهر لنا فقط الملفات التي بها كلتا الخاصيتين مطبقة عليها (SUID و SGID )
مثلا للبحث عن الملفات التي يملكها المستخدم root ولكن يمكن لأي مستخدم ان ينفذها بنفس صلاحية الroot (بعبارة اخرى ان خاصية SUID مطبقة عليها وهي اصلا مملوكة للمستخدم root ) يمكن تنفيذ التالي:
*
تستخدم هذه الطريقة مع الأمر find للبحث عن الملفات التي يمكن الكتابة write عليها من قبل الothers ، اي كل من ليس مالكا للملف او من ضمن المجموعة المالكة للملف. ويطلق عليها world-writable files ،
*
يستخدم كلا الشرطين اعلاه للبحث عن الملفات التي لا تتبع اي مستخدم او مجموعة موجودة ضمن النظام، بحيث ان ملف معين قد تم انشاؤه من قبل مستخدم او مجموعة وتم حذف هذا المستخدم او المجموعة وبقي الملف ليس مملوكا لأحد. سنوضح هذا الأمر في المثال التالي:
لنفترض وجود الملف التالي:
لدينا هنا ملف اسمه /sahre/file1 مملوك من قبل المستخدم azooz . لو قمنا بحذف المستخدم azooz من النظام فسيصبح الملف بالشكل التالي:
اي ان الملف بقي يتبع الUID الخاص بالمستخدم azooz . (حتى لو قمنا باستخدام الخيار -r مع الأمر userdel عند حذف المستخدم فإن هذا الأمر لن يقوم بحذف الملفات التي تقع خارج المجلد /home/azooz )
الآن لو قمنا باضافة مستخدم جديد و حددنا الخيار -u 500 مع الأمر useradd فأن كل الملفات التي كانت للمستخدم azooz ستصبح ملكا للمستخدم الجديد الذي أخذ نفس الUID السابق للمستخدم azooz ، وهذا أمر لا نريده أن يحدث طبعا.
ملاحظة: عند عملية حذف مستخدم يجب اتباع سلسلة من الاجراءات لضمان عدم حدوث اي من هذه المشاكل، منها ارشفة المجلد /home/azooz التابع للمستخدم المراد حذفه واستخدام الأمر
للبحث عن باقي ملفاته التي تقع خارج الhome dorectory للمستخدم قبل ان نستخدم الأمر userdel .
- طريقة فحص البصمات fingerprinting files
تتلخص هذه الطريقة بتمرير بعض الملفات عبر خوارزمية algorithm ينتج عنها مجموعة من الرموز الثابتة نطلق عليها اسم hashes وتكون بطول ثابت لا تتغير إلا بتغير محتويات او خصائص الملف. وبمقارنة الناتج الاصلي مع الناتج الجديد نستطيع تحديد اذا كانت هذه الملفات قد تعرضت لأي تعديل او تغيير. لنشاهد المثال التالي الذي يستخدم خوارزمية sha1 ضمن الأمر sha1sum :
لنفترض وجود مجلد اسمه secret ولدينا به بعض الملفات السرية المتعلقة بالعمل، ونريد عمل fingerprinting عليها للتأكد منها ومن سلامتها من التعديلات بشكل متواصل.
ويمكننا تخزين ناتج هذه العملية في ملف معين لنقوم بالتأكد لاحقا من سلامة هذه الملفات:
سنقوم بتغيير محتوى احد هذه الملفات الثلاثة و نلاحظ كيف نستطيع الكشف عن هذا التغيير:
طبعا من المستحسن دائما تخزين الملفات التي تحوي القيم الاصلية لناتج الأمر sha1sum لهذه الملفات على نظام ملفات منفصل و للقراءة فقط مثل CD-ROM لحماية هذه الملفات من العبث من قبل المتسللين على النظام. وكلما قمنا بتعديل اي من الملفات المهمة نقوم بحفظ الناتج من جديد وهكذا.
-مراقبة المساحة المستخدمة من القرص الصلب
سواء ان المستخدم قد تعمد استغلال المساحة المتوفره على الخادم أو لم يتعمد ذلك بسبب عدم اكتراثه بالمساحة الموجوده على النظام فإن ذلك قد يؤدي الى العديد من المشاكل التي تتراوح من ان الخدمات لن تستطيع تخزين logs جديدة وصولا الى ان الجهاز لن يستطيع الاقلاع بسبب امتلاء الدليل الجذري / تماما. مرورا بالمجلدين tmp و home الذان قد يسبب امتلاؤهما عدم قدرة الxserver من العمل و بالتالي عدم الدخول الى الواجهة الرسومية.
الأمرين df و du يمكن استخدامهما للتعرف على المساحة المتوفرة أو المستهلكة من الاقراص الصلبة في نظامنا. وباستخدام الخيار -T للتعرف على نوع نظام الملفات و الخيار -h لعرض الحجم بطريقة سهلة القراءة باستخدام ميجا او جيجا بدلا عن البايت:
طبعا الخدمة logwatch تقوم يوميا بارسال ناتج هذا الأمر ليلا الى المستخدم root على بريده المحلي على النظام.
الأمر du يتميز بقدرته على اعطاء مدير النظام ما هي المجلدات او الملفات التي تشغل اكبر حجم على النظام:
من خلال هذا الامر وجدنا ان المستخدم azooz كعادته يستهلك المساحة على النظام، لذا قررنا التحقق من الملفات التي لديه في مجلده الخاص وتنبيهه لهذا الأمر!!
لا تنسونا من دعائكم ولا نريد غيره منكم
وكما تعرفون فإن هذا الموضوع يخضع للرخصة السفاحية التي تقضي بنقله و تعديله و حذفه لكن يرجى ذكر مصدر الموضوع على الأقل
الموضوع الثاني : مراقبة نظام الملفات Monitoring the Filesystem
المراقبة الفعالة لنظامك تتضمن مراقبة وتحديد النشاطات التي تجري في نظام الملفات الخاص بك و ما يحتويه من ملفات و مجلدات. في هذا الدرس سنتعرف على بعض الطرق و الادوات التي يمكننا استخدامها لمراقبة ما يحدث على ملفاتنا في نظام الملفات لدينا.
- SetUID و SetGID :
كما هو معروف لدينا عندما يقوم مستخدم بتنفيذ اي ملف فإن ذلك الملف سينفذ ضمن جميع الصلاحيات المملوكة للمستخدم، بعيارة أخرى إن قام المستخدم azooz بتنفيذ أمر معين، فإن ذلك الأمر أو العملية process الناتجة عنه لن تستطيع استخدام اي ملف لا يخضع لصلاحيات المستخدم azooz . أو ان الملف ليس مملوكا للمستخدم azooz لذلك فإنه لا يملك الصلاحية لاستخدام ذلك الملف سواء بقراءة او بكتابة او بتنفيذ (rwx).
هناك حالة خاصة نستطيع فيها تجاوز هذا الأمر باستخدام SUID للمستخدم المالك و SGID للمجموعة المالكة بحيث نستطيع باستخدام هذه الخاصية ان نعطي اي مستخدم الصلاحية لتنفيذ الأمر او الملف التنفيذي بصلاحية المالك الأصلي Owner للملف حتى و إن كان الملف التنفيذي قد تم انشاءه من قبل مستخدم آخر، او بصلاحية المجموعة المالكة له عند استخدام SGID .
اكثر التطبيقات المستخدمة بهذه الخاصية تتضمن اعطاء امر معين صلاحية root لتنفيذه من قبل أي مستخدم آخر، اي انه بتطبيق خاصية SUID على الملف نقوم باعطاء جميع المستخدمين صلاحية استخدام هذا الملف وكأنهم المستخدم root .
طبعا كمدير للنظام فلا بد أن هذا الأمر قد يسبب لك القلق خوفا من ان يتم استغلال ثغرة معينة في برنامج لديه صلاحية العمل كمستخدم root ...لكن بعض الأوامر قد تتطلب منا ان يكون لها خاصية الSUID لتتنفذ بصلاحية الرووت مثل الأمر ping والأمر traceroute لأن كلا الأمرين يحتاجان الى انشاء باكيتات لارسالها عبر الشبكة وهذا ما لا يستطيع تنفيذه سوى المستخدم root. ولو لم يكن لدى كلا الأمرين هذه الخاصية لما استطاع سوى المستخدم rootان يستخدم كلا الأمرين.
الأمرين ping و traceroute يعتبران من الأمثلة الآمنة لتطبيق خاصية SUID عليهما بسبب نضوج البرنامجين وسهولة تصميمهما. لذا من المستبعد ان يتم اكتشاف اي ثغرة بهما ليتم استغلالها للسيطرة على النظام. لكن بعض مدراء الانظمة غير الخبراء قد يستخدمون هذه الخاصية على بعض البرامج ( غالبا ما تكون الألعاب) لاعطائها صلاحية العمل كمستخدم root لكي يتجنبوا بعض مشاكل الصلاحيات التي قد تظهر عند محاولة تنفيذ هذه البرامج، وهذا بالتأكيد سيزيد من خطورة تعرض النظام للاختراق لأنه من المحتمل ان يتم اكتشاف ثغرة في هذه البرامج بشكل كبير.
- كيفية تحديد الملفات التي لها خاصية SUID و SGID :
باستخدامنا للأمر ls -l نستطيع تحديد الملفات التي لها هذه الخاصية ، حيث يتم استبدال اشارة x الخاصة بالمستخدم المالك أو الخاصة بالمجموعة بحرف s :
كود:
-rwsrwxr-x 1 root root 0 Mar 12 15:55 file1 -rwxrwsr-x 1 root root 0 Mar 12 15:55 file2
- الأمر find :
الأمر find يقوم بالبحث عن ملفات بخاصية معينة على نظام معقد وضخم مثل خادم ريدهات لينوكس. طريقة استخدام الأمر find سهلة الى حد ما وسنقوم بعد قليل بتوضيح أهم الخيارات التي يمكننا استخدامها مع هذا الأمر:
كود:
find [dir] [condition]
*
كود:
-mtime x
*
كود:
-ctime x
*
كود:
-perm +6000
مثلا للبحث عن الملفات التي يملكها المستخدم root ولكن يمكن لأي مستخدم ان ينفذها بنفس صلاحية الroot (بعبارة اخرى ان خاصية SUID مطبقة عليها وهي اصلا مملوكة للمستخدم root ) يمكن تنفيذ التالي:
كود:
find / -perm +4000 -user root
كود:
-perm +002
*
كود:
-nouser -nogroup
لنفترض وجود الملف التالي:
كود:
-rw-rw---- 1 azooz webadmins 8250 Mar 28 15:43 /share/file1
كود:
-rw-rw---- 1 500 webadmins 8250 Mar 28 15:43 /share/file1
الآن لو قمنا باضافة مستخدم جديد و حددنا الخيار -u 500 مع الأمر useradd فأن كل الملفات التي كانت للمستخدم azooz ستصبح ملكا للمستخدم الجديد الذي أخذ نفس الUID السابق للمستخدم azooz ، وهذا أمر لا نريده أن يحدث طبعا.
ملاحظة: عند عملية حذف مستخدم يجب اتباع سلسلة من الاجراءات لضمان عدم حدوث اي من هذه المشاكل، منها ارشفة المجلد /home/azooz التابع للمستخدم المراد حذفه واستخدام الأمر
كود:
find / -user azooz
- طريقة فحص البصمات fingerprinting files
تتلخص هذه الطريقة بتمرير بعض الملفات عبر خوارزمية algorithm ينتج عنها مجموعة من الرموز الثابتة نطلق عليها اسم hashes وتكون بطول ثابت لا تتغير إلا بتغير محتويات او خصائص الملف. وبمقارنة الناتج الاصلي مع الناتج الجديد نستطيع تحديد اذا كانت هذه الملفات قد تعرضت لأي تعديل او تغيير. لنشاهد المثال التالي الذي يستخدم خوارزمية sha1 ضمن الأمر sha1sum :
لنفترض وجود مجلد اسمه secret ولدينا به بعض الملفات السرية المتعلقة بالعمل، ونريد عمل fingerprinting عليها للتأكد منها ومن سلامتها من التعديلات بشكل متواصل.
كود:
[[email protected] ~]$ sha1sum /secret/* e242ed3bffccdf271b7fbaf34ed72d089537b42f /secret/bad f1d2d2f924e986ac86fdf7b36c94bcdf32beec15 /secret/good 6eadeac2dade6347e87c0d24fd455feffa7069f0 /secret/plan
كود:
[[email protected] ~]$ sha1sum /secret/* > out.sha1
كود:
[[email protected] ~]$echo "Grey r0x" >> /secret/good [[email protected] ~]sha1sum --check out.sha1 /secret/bad: OK /secret/good: FAILED /secret/plan: OK sha1sum: WARNING: 1 of 3 computed checksums did NOT match
-مراقبة المساحة المستخدمة من القرص الصلب
سواء ان المستخدم قد تعمد استغلال المساحة المتوفره على الخادم أو لم يتعمد ذلك بسبب عدم اكتراثه بالمساحة الموجوده على النظام فإن ذلك قد يؤدي الى العديد من المشاكل التي تتراوح من ان الخدمات لن تستطيع تخزين logs جديدة وصولا الى ان الجهاز لن يستطيع الاقلاع بسبب امتلاء الدليل الجذري / تماما. مرورا بالمجلدين tmp و home الذان قد يسبب امتلاؤهما عدم قدرة الxserver من العمل و بالتالي عدم الدخول الى الواجهة الرسومية.
الأمرين df و du يمكن استخدامهما للتعرف على المساحة المتوفرة أو المستهلكة من الاقراص الصلبة في نظامنا. وباستخدام الخيار -T للتعرف على نوع نظام الملفات و الخيار -h لعرض الحجم بطريقة سهلة القراءة باستخدام ميجا او جيجا بدلا عن البايت:
كود:
[[email protected] ~]$ df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/hda2 ext3 29G 22G 5.8G 79% / /dev/hda1 ext3 99M 53M 41M 56% /boot /dev/shm tmpf 252M 0 252M 0% /dev/shm /dev/hda3 ext3 5.9G 2.4G 3.2G 43% /var
الأمر du يتميز بقدرته على اعطاء مدير النظام ما هي المجلدات او الملفات التي تشغل اكبر حجم على النظام:
كود:
[[email protected] ~]# du -s /home | sort -rn 171292 /home/azooz 50404 /home/samer 49890 /home/ali 38904 /home/fakir
لا تنسونا من دعائكم ولا نريد غيره منكم

وكما تعرفون فإن هذا الموضوع يخضع للرخصة السفاحية التي تقضي بنقله و تعديله و حذفه لكن يرجى ذكر مصدر الموضوع على الأقل

تعليق