هل سبق لك أن أفسدت ملكية النظام و / أو أذوناته عن طريق الخطأ؟ أو ربما استخدمت تطبيقًا قام بذلك نيابةً عنك؟ أيًا كان الأمر ، إذا حدث لك ذلك ، فستكون على دراية كبيرة بما يعنيه النظام غير المستقر وغير القابل للاستخدام. بالإضافة إلى ذلك ، يمكن أن يسبب مشاكل أمنية خطيرة.

قصتي:

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

قبل ثلاثة أيام ، كنت أجرب مجموعة من أدوات وتطبيقات النسخ الاحتياطي. لسوء الحظ ، كان أحد هذه التطبيقات هو Back In Time (الويكي) فقد أفسد حياتي لمدة يومين كاملين. على أي حال ، عندما قمت بتثبيته ، وجدت أن هناك نسختين منه. (Back In Time) العودة في الوقت (Back In Time root) والعودة في الوقت (الجذر). وبما أنني أردت عمل نسخة احتياطية من / boot و / etc /homeو /lost+foundو /opt و /root و /srv و /usr و /var. كنت بحاجة إلى أن أكون جذرا لقراءة محتويات هذه المسارات لأنسخها احتياطياً. لهذا السبب استخدمت Back In Time (الجذر).

ثم أعدت المجلد على خادم النسخ الاحتياطي. وقررت ان أُمَّكن ميزة تشفير EncFS (الويكي) التي كانت متوفرة في تطبيق Back In Time مع SSH لأن الوجهة هي موقع بعيد. وكان كل شيء على ما يرام .. على الأقل هذا ما شعرت به في ذلك الوقت ، خاصةً عندما تم التقاط النسخه بنجاح…..

اليوم التالي:

تمكنت من رؤية محتويات /root. أعني أن المستخدِم العادي المستخدَم يوميًا كان قادرًا على القراءة والكتابة في /root و /boot و /usr … إلخ. عندما راجعت أذوناتهم ، وجدت أنها كانت في الواقع فوضى. بعضهم مملوك من قبل المستخدم بدلاً من المالك الصحيح.!

بدأت اللقطات القديمة التي التقطتها ، والتي التقطتها CrashPlan وقارنت الأذونات. أيمكنك التخمين؟ نعم أنت على حق أنهم كانوا مختلفين بالفعل. ثم أدركت أنه يجب أن يكون هناك خطأ حقيقي في Back In Time. لحسن الحظ ، كنت محظوظًا بما يكفي لاكتشاف هذه المشكلة قبل فوات الأوان.

محاولتي الأولى:

حاولت استعادة الأذونات والملكية عبر أداة msec وهي ميزة لطيفة في Mageia Control Center (المعروف أيضًا باسم Drakconf) في Mageia Linux. لكن ذلك لم يحل كل المشاكل. لقد جربت طريفة في سطر الأوامر: $ msecperms -e. لم ينجح ذلك أيضًا.

لماذا ا؟ حسنًا ، يهدف msec إلى مشاهدة بعض المجلدات و الملفات المحددة و المحددة مسبقًا وأذونات وملكية الملفات ، ثم استعادتها إذا لزم الأمر. ليست كل مجلدات و ملفات النظام.

محاولتي الثانية الناجحة:

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

كفى كلاماً ، دعنا نفعل لينكس:

هناك شيئان يجب استعادتهما. الأول هو مالك هذا الملف أو المجلد. وإلى أي مجموعة تنتمي. الثاني هو أذونات Octal.

استعادة الملكية:

أولاً ، انتقل إلى مجلد النسخ الاحتياطي الذي ترغب في استعادة ملكية المحتويات منه. لنفترض أنه /mnt/backup/etc.

$ cd /mnt/backups/etc

ثم استعمل find لسرد كل شئ داخله:

$ find . ! -type l -exec chown -v --reference='{}' /etc/'{}' \; | grep -v retained

ما فعلناه هناك ، هو سرد كل شيء ما عدا الروابط الرمزية ، ثم قمنا بنسخ ملكيته إلى نفس الملف الموجود في نظامنا المستخدم في المجلد /etc.

  • ال ! -type l هو سرد كل شيء ليس ارتباطًا رمزيًا.
  • ال -exec هو تنفيذ الآمر.
  • ال chown هو الأمر الذي نحتاج إلى الاتصال به. وهو الذي يسمح لنا بتغيير ملكية الملف أو المجلد.
  • ال -v لجعل chownيعرض مخرجات أكثر.
  • ال --reference= هو إخبار chown أننا بحاجة إلى استخدام نفس ملكية الملف الذي تم تمريره.
  • ال '{}' هي نتيجة أمر الــ find. نضعها بين علامتي اقتباس لحمايتها إذا كانت بها أية مسافات أو أحرف خاصة.
  • ال /etc/'{}' هو مسار الملف المراد تطبيق الملكيه عليه.
  • ال \; هو فصل كل نتيجة بسطر جديد. لذا ، بدلاً من استدعاء chown مرة واحدة لجميع النتائج ، فإننا نستدعيها لكل نتيجة. هذه ممارسة جيدة إذا تجاوزت الحد الأقصى المسموح به من الوسيطات التي تم تمريرها.
  • ال | هو إعادة توجيه المخرجات لأمر آخر.
  • ال grep -v retained هو سرد الملفات المتأثرة فقط ، بدلاً من طباعة كل شيء. باستبعاد أي ناتج ، تحتوي كلمة “retained”.

ثم كرر العملية لجميع المجلدات التي تحتاجها لاستعادة ملكية المحتوى الخاص بهم. مثل: /boot, /usr, /var … الخ.

استعادة أذونات Octal:

يمكننا استخدام البرنامج النصي السابق لاستعادة الأذونات عن طريق استبدال chown بـــ chmod. لكن هذا لن يكون كافيا. لأنه لن يستعيد الإذن الخاص. بدلاً من ذلك ، ستستعيد فقط أذونات المستخدم والمجموعة وغيرها. لذا نحن بحاجة لإيجاد طريقة أخرى.

مرة أخرى ، لنفترض أن مجلد النسخ الاحتياطي هو /mnt/backups/etc. لكن أولاً نحتاج إلى إعداد وإنشاء نص باش. لذا ، دعنا ننشئ البرنامج النصي في المجلد الذي نحتاجه لاستعادة أذونات الثماني إليه وليس منه. بما أننا في /mnt/backups/etc ، فهذا يعني أننا يجب أن ننشئ الملف داخل /etc:

$ echo -e '#!/bin/bash\n\n' > '/etc/restoreOctal.sh'

الآن ، بعد أن أنشأنا هذا الملف ، دعنا نذهب داخل /mnt/backups/etc

$ cd /mnt/backups/etc

الآن ، دعنا ننشئ بقية النص من خلال سرد جميع أذونات ثمانية للملفات و المجلدات وتخزينها في /etc/restoreOctal.sh:

$ find . ! -type l -exec stat -c "chmod %a -v \"%n\" | grep -v retained" "{}" \; >> '/etc/restoreOctal.sh'

ما فعلناه هناك هو: ابحث في جميع المحتويات داخل المجلد الحالي الذي نحن فيه. وأرسد كل شيء ليس رابطًا رمزيًا. ثم قم بتمرير كل نتيجة إلى امر stat ثم قم بتخزين مخرجات ذلك الأمر في /etc/restoreOctal.sh.

  • ال stat هو الأمر الذي نريد تطبيقه على كل نتيجة من نتائج الــ Find.
  • ال -c هي الوسيطة لتحديد FORMAT الذي نريد طباعته بدلاً من السلوك الافتراضي.
  • ال chmod هو الأمر الذي نريد استخدامه لاحقًا عندما نستدعي الــ restOctal.sh.
  • ال %a هو اختصار الترقيم الثماني (إذن ثماني) للملف الذي تمت معالجته حسب الــ stat.
  • ال %n هو اختصار الملف الذي تمت معالجته بواسطة stat.
  • ال >> هو إعادة توجيه المخرجات ووضعها في نهاية الملف.
  • ال /etc/restoreOctal.sh هو الملف الذي نريد تخزين المخرجات فيه.

ثم, اذهب الى /etc:

$ cd /etc

الآن, اجعلها قابلة للتنفيذ (executable):

$ chmod u+x restoreOctal.sh

قبل تنفيذها, دعونا نلقي نظرة سريعة على محتوياته فقط في حالة وجود خطأ فيه:

$ vim restoreOctal.sh

إذا كان كل شيء يبدو على ما يرام ، فقد حان الوقت لاستعادة أذونات Octal:

$ ./restoreOctal.sh

تهانينا! لقد نجحت في استعادة الملكية و الأذونات الثمانية لجميع محتويات /etc ! لا تنسى إزالة restOctal.sh.

$ rm -f restoreOctal.sh

ثم كرر هذه العملية إلى أي مجلد تريد استعادة محتوياته – أذونات ثمانية.

حاول ان تحل المشكلة قبل فوات الأوان والا سوف تكبر الى حجم مدام نفيخه 🙂

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.