لينكس كويست. مبروك للفائزين وأخبرنا عن حلول المهام

لينكس كويست. مبروك للفائزين وأخبرنا عن حلول المهام

في 25 مارس فتحنا باب التسجيل لينكس كويستهذه لعبة لمحبي وخبراء نظام التشغيل Linux. بعض الإحصائيات: تم تسجيل 1117 شخصًا في اللعبة، وجد 317 منهم مفتاحًا واحدًا على الأقل، وأكمل 241 مهمة المرحلة الأولى بنجاح، وأكمل 123 المرحلة الثانية واجتاز 70 المرحلة الثالثة. اليوم انتهت لعبتنا ونهنئ الفائزين!

  • احتل ألكسندر تيلديكوف المركز الأول.
    قال ألكساندر لنفسه إنه مسؤول النظام الأكثر نموذجية. يعيش في فولجوجراد، ويدير العديد من الأنظمة المشابهة لنظام Unix منذ عشرين عامًا. تمكنت من العمل في مزودي خدمة الإنترنت، وبنك، ومتكامل الأنظمة. وهو الآن يعمل عن بعد في شركة صغيرة، حيث يعمل على البنية التحتية السحابية لعميل أجنبي كبير. يحب القراءة والاستماع إلى الموسيقى. حول اللعبة، قال ألكساندر إنه أحب اللعبة ككل، فهو يحب مثل هذه المهام. خلال مقابلة في إحدى الشركات، قمت بشيء مشابه لـ Hackerrank، كان الأمر مثيرًا للاهتمام.
  • المركز الثاني - رومان سوسلوف.
    رواية من موسكو. عمره 37 سنة. يعمل كمهندس Linux/Unix في Jet Infosystems. في العمل، يجب علي إدارة أنظمة Linux/Unix + SAN واستكشاف الأخطاء وإصلاحها. الاهتمامات متنوعة: أنظمة Linux، البرمجة، الهندسة العكسية، أمن المعلومات، Arduino. حول اللعبة أشار رومان إلى أنه أحب اللعبة بشكل عام. "لقد مددت عقلي قليلاً وأخذت استراحة من الحياة اليومية الرمادية للعمل اليومي. 🙂 أرغب في الحصول على المزيد من المهام، وإلا قبل أن أتمكن من تذوقها، تكون اللعبة قد انتهت بالفعل.
  • الثالث - Alex3d.
    يعيش أليكس في موسكو ويعمل في تطوير البرمجيات. "شكرًا لك على المسابقة، لقد كان من الممتع اختبار مهاراتي في Google-Fu."

وفي ترتيب أفضل 10 لاعبين أيضًا:

  • يفغيني سالدييف
  • ماركيل موخناتشيفسكي
  • كونستانتين كونوسوف
  • بافل سيرجيف
  • فلاديمير بوفايف
  • إيفان بوبنوف
  • بافلو كليتس

نحن نفهم أن هناك العديد من الخيارات لحل جميع مشاكلنا؛ بعض الحلول الممكنة موضحة أدناه.

1. المرحلة الأولى

أطلقنا عليها اسم "هل أنت مسؤول حقًا؟"، نظرًا لأن المهمة كانت بسيطة جدًا - إصلاح خدمة المصباح الدافئ.

1.1. حقائق مثيرة للاهتمام:

عثر لاعبان على المفتاح الأول في أول 15 دقيقة من المباراة، وفي الساعة الأولى كان لدينا ثلاثة قادة أكملوا المهمة.

1.2. يمارس

لقد ذهبت للعمل في شركة لم يكن بها متخصص مختص في تكنولوجيا المعلومات لفترة طويلة. قبل البدء في ترتيب الأمور، عليك حل المشكلة الملحة التي تعيق عمل المكتب.

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

منذ بضعة أيام تم تغيير كلمة المرور ولكن الجميع نسي كلمة المرور الجديدة ولا يستطيع المخرج العمل. هناك شائعات بأن هناك المزيد من المفاتيح على هذا الجهاز والتي يمكن أن تساعدنا في فك النسخة الاحتياطية من المستندات المحاسبية.

الجميع يتوقع حلا سريعا لهذه القضية!

1.3. الحل

1. أولاً، تحتاج إلى تغيير كلمة مرور الجذر على الجهاز الظاهري لتتمكن من الوصول إليها. عند البدء، نلاحظ أن هذا هو خادم Ubuntu 16.04.

لإعادة تعيين كلمة مرور الجذر، نقوم بإعادة تشغيل الجهاز، عند التحميل، في اللحظة التي يتم فيها عرض قائمة اليرقة، انتقل إلى تحرير عنصر Ubuntu باستخدام الزر "e". قم بتحرير سطر Linux وأضفه إلى النهاية init=/bin/bash. نقوم بالتحميل عبر Ctrl+x، ونحصل على bash. أعد تحميل الجذر باستخدام rw، وقم بتغيير كلمة المرور:

$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwd

لا تنس المزامنة وإعادة التشغيل.

2. الشرط يقول أن خادم الويب الخاص بنا لا يعمل، انظر:

$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18 

وهذا يعني، في الواقع، أن Apache يعمل، ولكنه يستجيب بالرمز 404. فلنلقِ نظرة على التكوين:

$ vim /etc/apache2/sites-enabled/000-default.conf

يوجد أيضًا مفتاح هنا - ستيفن بول ستيف جوبز.

التحقق من المسار /usr/share/WordPress - لا يوجد شيء من هذا القبيل، ولكن هناك /usr/share/wordpress. قم بتحرير التكوين وأعد تشغيل Apache.

$ systemctl restart apache2

3. حاول مرة أخرى، نحصل على الخطأ:

Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488

قاعدة البيانات لا تعمل؟

$ systemctl status mysql
Active: active (running)

ماذا جرى؟ نحن بحاجة لمعرفة ذلك. للقيام بذلك، تحتاج إلى الوصول إلى MySQL، كما هو موضح في توثيق. توصي إحدى نقاط التوثيق بتسجيل الخيار skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. يوجد أيضًا مفتاح هنا - AugustaAdaKingByron.

تصحيح حقوق المستخدم 'wp'@'localhost'. نطلق MySQL، ونجعلها قابلة للوصول عبر الشبكة، مع التعليق على الخيار في ملف config skip-networking.

4. بعد هذه الخطوات، يبدأ تشغيل خادم الويب، لكن الموقع لا يزال لا يعمل بسبب

Warning: require_once(/usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): failed to open stream: Permission denied in /usr/share/wordpress/wp-includes/template.php on line 562

نقوم بتحرير حقوق الملف.

$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php

نقوم بتحديث الصفحة، ونذهب إلى الموقع ونجد المفتاح - BjarneStroustrup! لقد وجدنا المفاتيح الثلاثة جميعها، ويمكن لمديرنا العمل، وقمنا بفك تشفير ملفات المحاسبة. الجميع سعداء، وأمامك الكثير من العمل لإعداد البنية التحتية والنسخ الاحتياطي والأمن في الشركة.

2. المرحلة الثانية

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

2.1. حقائق مثيرة للاهتمام

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

2.2. يمارس

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

2.3. الحل

1. لا يتم تشغيل الخادم بسبب عدم وجود قسم مبادلة في fstab؛ عند التحميل، يحاول النظام تثبيته ويتعطل. كيفية التمهيد؟

قم بتنزيل الصورة، وقمنا بتنزيل CentOS 7، والتمهيد من Live CD/DVD (استكشاف الأخطاء وإصلاحها -> الإنقاذ)، وتثبيت النظام، وتحريره /etc/fstab. نجد على الفور المفتاح الأول - GottfriedWilhelm11646Leibniz!

إنشاء مبادلة:

$ lvcreate -n swap centos -L 256M
$ sync && reboot

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

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

مطلوب في /etc/crontab حذف أو التعليق خارج الخط echo b > /proc/sysrq-trigger.

3. وبعد ذلك يتم تحميل الخادم، ويمكنك إكمال مهمة المديرين: “ما هي العناوين في أفريقيا؟” هذه المعلومات متاحة للجمهور بشكل عام. يمكنك العثور على هذه المعلومات على الإنترنت باستخدام العبارات "عنوان IP لأفريقيا" و"قاعدة بيانات Geoip". لحل المشكلة، يمكنك استخدام قواعد بيانات توزيع العناوين المتاحة مجانًا (geoip). استخدمنا قاعدة البيانات كمعيار ماكس مايند جيوليت2، متاح بموجب ترخيص Creative Commons Attribution-ShareAlike 4.0.

دعونا نحاول حل مشكلتنا باستخدام الأدوات المساعدة لنظام Linux فقط، ولكن بشكل عام يمكن حلها بعدد كبير من الطرق: استخدام الأدوات المساعدة لتصفية النص واستخدام البرامج النصية بلغات البرمجة المختلفة.

في البداية، سنحصل ببساطة على أزواج "IP المرسل والمستلم" من سجل البريد /var/log/maillog (دعونا ننشئ جدولاً لمستلمي البريد الإلكتروني - عنوان IP للمرسل). يمكن القيام بذلك باستخدام الأمر التالي:

$ cat /var/log/maillog | fgrep -e ' connect from' -e 'status=sent' | sed 's/[]<>[]/ /g' | awk '/connect from/ {ip=$11} /status=sent/ {print $10" "ip}' > log1.txt

وقبل أن نواصل تجميع قاعدة بيانات للعناوين الأفريقية، دعونا نلقي نظرة على أهم عناوين IP للمرسلين.

$ cat log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n 40
5206 [email protected]
4165 [email protected]
3739 [email protected]
3405 [email protected]
3346 [email protected]

من بين كل هؤلاء، يبرز المستلمون الثلاثة الأوائل من الأعلى بوضوح من حيث عدد الحروف. إذا قمت بجمع عناوين IP الخاصة بالمرسلين الذين أرسلوا إلى العناوين من أعلى 3، فستلاحظ هيمنة واضحة لشبكات معينة:

$ cat log1.txt | fgrep '[email protected]' | cut -d' ' -f2 | sort | cut -d'.' -f1 | uniq -c | sort -r | head
831 105
806 41
782 197
664 196
542 154
503 102
266 156
165 45
150 160
108 165

معظم الشبكات 105/8، 41/8، 196/8,197،8/41 مخصصة لـ AFRINIC - أحد مسجلي الإنترنت الإقليميين الخمسة الذين يقومون بتوزيع موارد الإنترنت. تقوم AFRINIC بتوزيع مساحة العناوين في جميع أنحاء أفريقيا. ويشير 8/XNUMX إلى AFRINIC بالكامل.

https://www.nic.ru/whois/?searchWord=105.0.0.0 
https://www.nic.ru/whois/?searchWord=41.0.0.0

وبالتالي، فإن الإجابة على المشكلة موجودة في السجل نفسه.

$ cat log1.txt | fgrep -e '105.' -e '41.' -e '196.' -e '197.' -e '154.' -e '102.' | awk '{print $1}' | sort | uniq -c | sort -r | head -n 21
4209 [email protected]
3313 [email protected]
2704 [email protected]
2215 [email protected]
1774 [email protected]
1448 [email protected]
1233 [email protected]
958 [email protected]
862 [email protected]
762 [email protected]
632 [email protected]
539 [email protected]
531 [email protected]
431 [email protected]
380 [email protected]
357 [email protected]
348 [email protected]
312 [email protected]
289 [email protected]
282 [email protected]
274 [email protected]

في هذه المرحلة نحصل على السلسلة "LinuxBenedictTorvadst".

المفتاح الصحيح: "LinusBenedictTorvalds".

تحتوي السلسلة الناتجة على خطأ مطبعي فيما يتعلق بالمفتاح الصحيح في آخر 3 أحرف. ويرجع ذلك إلى حقيقة أن الشبكات التي اخترناها ليست مخصصة بالكامل للبلدان الأفريقية وإلى الطريقة التي يتم بها توزيع رسائل البريد الإلكتروني بين عناوين IP في سجلنا.

ومع المواصفات الكافية لأكبر الشبكات المخصصة للدول الإفريقية يمكن الحصول على إجابة دقيقة:

$ cat log1.txt | fgrep -e' '105.{30..255}. -e' '41. -e' '196.{64..47}. -e' '196.{248..132}. -e' '197.{160..31}. -e' '154.{127..255}. -e' '102.{70..255}. -e' '156.{155..255}. | awk '{print $1}' | sort | uniq -c | sort -r | head -n 21
3350 [email protected]
2662 [email protected]
2105 [email protected]
1724 [email protected]
1376 [email protected]
1092 [email protected]
849 [email protected]
712 [email protected]
584 [email protected]
463 [email protected]
365 [email protected]
269 [email protected]
225 [email protected]
168 [email protected]
142 [email protected]
111 [email protected]
 96 [email protected]
 78 [email protected]
 56 [email protected]
 56 [email protected]
 40 [email protected]

يمكن أيضًا حل المشكلة بطريقة أخرى.
قم بتنزيل MaxMind، وقم بفك ضغطه، وستقوم الأوامر الثلاثة التالية أيضًا بحل مشكلتنا.

$ cat GeoLite2-Country-Locations-ru.csv | grep "Африка" | cut -d',' -f1 > africaIds.txt
$ grep -Ff africaIds.txt GeoLite2-Country-Blocks-IPv4.csv | cut -d',' -f1 > africaNetworks.txt
$ grepcidr -f africaNetworks.txt log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n21

بطريقة أو بأخرى، قمنا في النهاية بحساب الإحصائيات، وتلقى المديرون البيانات التي يحتاجونها للعمل!

3. المرحلة الثالثة

المرحلة الثالثة تشبه إلى حد ما المرحلة الأولى - تحتاج أيضًا إلى إصلاح خدمة المصباح الدافئ، ولكن كل شيء أكثر تعقيدًا مما كانت عليه في المهمة الأولى.

3.1. حقائق مثيرة للاهتمام

في أول 15 دقيقة، وجد ثلاثة لاعبين المفتاح الأول، وبعد ساعتين و2 دقيقة من بداية المرحلة، أكمل الفائز المهمة.

3.2. يمارس

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

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

نحن بحاجة إلى استعادة وظائف ويكي، أولا وقبل كل شيء، نحن مهتمون بمحتوى صفحات ويكي. جزء معين من النص الموجود على إحدى صفحات هذا الويكي هو كلمة المرور لخادم 1C وهناك حاجة ماسة لإلغاء قفله.

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

3.3. الحل

1. نحاول التمهيد واحدًا تلو الآخر من الأقراص الموجودة لدينا وفي كل مكان نتلقى نفس الرسالة:

No bootable medium found! System halted 

تحتاج إلى التمهيد من شيء ما. يساعد التشغيل من قرص مضغوط/قرص DVD مباشر (استكشاف الأخطاء وإصلاحها -> الإنقاذ) مرة أخرى. عند التحميل، نحاول العثور على قسم التمهيد، ولا يمكننا العثور عليه، وينتهي بنا الأمر في الصدفة. نحن نحاول دراسة ماذا وكيف نفعل بالأقراص. ومن المعروف أن هناك ثلاثة منهم. هناك المزيد من الأدوات لهذا في الإصدار السابع من CentOS، حيث توجد أوامر blkid أو lsblkوالتي تبين لنا كافة المعلومات حول الأقراص.

كيف وماذا نفعل:

$ ls /dev/sd*

من الواضح أن ذلك على الفور

/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий момент

نقوم بتثبيت sdb1، ومن الواضح أن هذا هو قسم التمهيد الخاص بـ CentOS 6.

$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1

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

2. نحن ندرس pvs وlvs، لأننا نعمل مع LVM. نرى أنه يجب أن يكون هناك مجلدين ماديين، أحدهما غير موجود ويشكو من فقدان السائل. نرى أنه يجب أن يكون هناك مجلدين منطقيين: الجذر والمبادلة، بينما يتم فقدان الجذر جزئيًا (خاصية الحجم P). ليس من الممكن التركيب، وهو أمر مؤسف! نحن حقا بحاجة إليه.

هناك قرصان آخران ننظر إليهما ونجمعهما ونثبتهما:

$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127  /mnt/md127 

ننظر، يمكننا أن نرى أن هذا هو قسم التمهيد الخاص بـ CentOS 6 ونسخة مكررة مما هو موجود بالفعل /dev/sdb1وهنا مرة أخرى نفس المفتاح - DennisBMacAliستيرCRitchie!
دعونا نرى كيف يتم تجميعها /dev/md127.

$ mdadm --detail /dev/md127

ونرى أنه كان ينبغي تجميعه من 4 أقراص، لكنه تم تجميعه من قرصين /dev/sda1 и /dev/sdc1، كان يجب أن يكونا رقمين 2 و 4 في النظام. نفترض ذلك من /dev/sda2 и /dev/sdc2 يمكنك أيضًا جمع مصفوفة. ليس من الواضح سبب عدم وجود بيانات وصفية عنها، ولكن هذا يقع على عاتق ضمير المشرف الموجود في مكان ما في جوا. نحن نفترض أنه يجب أن يكون هناك RAID10، على الرغم من وجود خيارات. نجمعها:

$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2

نحن ننظر إلى blkid، pvs، lvs. نكتشف أننا جمعنا حجمًا ماديًا كنا نفتقر إليه سابقًا.

تم إصلاح lvroot على الفور، وقمنا بتثبيته، ولكن قمنا أولاً بتنشيط VG:

$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot 

وكل شيء موجود، بما في ذلك المفتاح الموجود في الدليل الرئيسي الجذر - /root/sweet.

3. ما زلنا نحاول إحياء الخادم الخاص بنا حتى يبدأ بشكل طبيعي. جميع المجلدات المنطقية من موقعنا /dev/md0 (حيث وجدنا كل شيء) اسحبه إليه /dev/sdb2، حيث كان الخادم بأكمله يعمل في البداية.

$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0

نقوم بإيقاف تشغيل الخادم، وإزالة القرصين 1 و3، وترك القرص الثاني، والتمهيد من القرص المضغوط/قرص DVD المباشر إلى برنامج Rescue. ابحث عن قسم التمهيد وقم باستعادة أداة تحميل التشغيل في grub:

root (hd0,0)
setup (hd0)

نقوم بتمزيق قرص التمهيد والتحميل بنجاح، لكن الموقع لا يعمل.

4. هناك خياران لبدء تشغيل موقع ويب: قم بتكوين Apache من البداية أو استخدم nginx مع تكوين php-fpm مسبقًا:

$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start

وأخيرًا، عليك أن تبدأ MySQL:

$ /etc/init.d/mysqld start

لن يبدأ، والإجابة تكمن في ذلك /var/log/mysql. بمجرد حل المشكلة مع MySQL، سيعمل الموقع، على الصفحة الرئيسية سيكون هناك مفتاح - RichardGCCMatthewGNUStallman! الآن لدينا إمكانية الوصول إلى 1C، وسيتمكن الموظفون من تلقي رواتبهم. وكما هو الحال دائمًا، أمامك الكثير من العمل لإنشاء البنية التحتية والأمن في الشركة.

يمكننا أيضًا مشاركة قائمة الكتب التي ساعدتنا والمشاركين لدينا في الاستعداد للعبة مرة أخرى: linux.mail.ru/books.

شكرا لك على وجودك معنا! ترقبوا إعلانات الألعاب القادمة!

المصدر: www.habr.com

إضافة تعليق