Linux-Quest. Herzlichen Glückwunsch an die Gewinner und erzählen Sie uns von den Lösungen der Aufgaben

Linux-Quest. Herzlichen Glückwunsch an die Gewinner und erzählen Sie uns von den Lösungen der Aufgaben

Am 25. März haben wir die Registrierung für eröffnet Linux-Quest, dies ist ein Spiel für Liebhaber und Experten des Linux-Betriebssystems. Einige Statistiken: 1117 Personen haben sich für das Spiel registriert, 317 von ihnen haben mindestens einen Schlüssel gefunden, 241 haben die Aufgabe der ersten Stufe erfolgreich abgeschlossen, 123 die zweite und 70 haben die dritte Stufe bestanden. Heute ist unser Spiel zu Ende und wir gratulieren unseren Gewinnern!

  • Alexander Teldekov belegte den ersten Platz.
    Alexander sagte sich, dass er der typische Systemadministrator sei. Lebt in Wolgograd und verwaltet seit etwa zwanzig Jahren verschiedene Unix-ähnliche Systeme. Es gelang mir, bei Internetprovidern, einer Bank und einem Systemintegrator zu arbeiten. Jetzt arbeitet er remote in einem kleinen Unternehmen und arbeitet an der Cloud-Infrastruktur für einen großen ausländischen Kunden. Liebt es, zu lesen und Musik zu hören. Über das Spiel sagte Alexander, dass ihm das Spiel als Ganzes gefallen habe, er liebe solche Aufgaben. Während eines Interviews bei einem der Unternehmen habe ich etwas Ähnliches wie Hackerrank gemacht, es war interessant.
  • Zweiter Platz - Roman Suslov.
    Ein Roman aus Moskau. Er ist 37 Jahre alt. Arbeitet als Linux/Unix-Ingenieur bei Jet Infosystems. Bei der Arbeit muss ich Linux/Unix-Systeme + SAN verwalten und Fehler beheben. Die Interessen sind vielfältig: Linux-Systeme, Programmierung, Reverse Engineering, Informationssicherheit, Arduino. Über das Spiel Roman bemerkte, dass ihm das Spiel insgesamt gefiel. „Ich habe mein Gehirn ein wenig beansprucht und mir eine Auszeit vom grauen Alltag des Arbeitsalltags gegönnt. 🙂 Ich hätte gerne mehr Aufgaben, sonst war das Spiel schon vorbei, bevor ich reinschnuppern konnte.“
  • Drittens - alex3d.
    Alex lebt in Moskau und arbeitet in der Softwareentwicklung. „Vielen Dank für den Wettbewerb. Es war interessant, meine Google-Fu-Fähigkeiten zu testen.“

Außerdem im Ranking der 10 besten Spieler:

  • Jewgeni Saldajew
  • Markel Mokhnachevsky
  • Konstantin Konossow
  • Pavel Sergeev
  • Wladimir Bovaev
  • Iwan Bubnow
  • Pavlo Klets

Wir sind uns darüber im Klaren, dass es viele Möglichkeiten gibt, alle unsere Probleme zu lösen; einige der möglichen Lösungen werden im Folgenden beschrieben.

1. Erste Stufe

Wir nannten es „Sind Sie wirklich ein Administrator?“, da die Aufgabe recht einfach war – einen Warmlampenservice zu reparieren.

1.1. Interessante Fakten:

Zwei Spieler fanden in den ersten 15 Minuten des Spiels den ersten Schlüssel und in der ersten Stunde hatten wir drei Anführer, die die Aufgabe erledigten.

1.2. Übung

Sie haben in einem Unternehmen gearbeitet, in dem es lange Zeit keinen kompetenten Informatiker gab. Bevor Sie mit der Ordnung beginnen, müssen Sie das brennende Problem lösen, das die Arbeit im Büro blockiert.

Die Putzfrau hat das Stromkabel des Serverschranks mit einem Wischmopp erfasst. Die Stromversorgung wurde wiederhergestellt, aber eine sehr wichtige Website funktioniert immer noch nicht. Die Website ist wichtig, da sich das Unternehmen keine großen Gedanken über die Informationssicherheit macht. Auf der Hauptseite dieser Website finden Sie im Klartext das Administratorkennwort für den Computer des CEO.

Neulich wurde das Passwort geändert, aber alle haben das neue vergessen, der Direktor kann nicht arbeiten. Es gibt Gerüchte, dass sich auf dieser Maschine weitere Schlüssel befanden, die uns helfen könnten, die Sicherungskopie der Buchhaltungsunterlagen zu entschlüsseln.

Jeder erwartet eine schnelle Lösung des Problems!

1.3. Lösung

1. Zunächst müssen Sie das Root-Passwort auf der virtuellen Maschine ändern, um Zugriff darauf zu erhalten. Beim Start stellen wir fest, dass es sich um Ubuntu 16.04 Server handelt.

Um das Root-Passwort zurückzusetzen, starten wir die Maschine neu. Beim Laden gehen wir in dem Moment, in dem das Grub-Menü angezeigt wird, zum Bearbeiten des Ubuntu-Elements mit der Schaltfläche „e“. Bearbeiten Sie die Zeile Linux und fügen Sie sie am Ende hinzu init=/bin/bash. Wir laden über Strg+x, wir bekommen einen Bash. Mounten Sie den Root erneut mit RW und ändern Sie das Passwort:

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

Vergessen Sie nicht die Synchronisierung und den Neustart.

2. Die Bedingung besagt, dass unser Webserver nicht funktioniert. Sehen Sie sich Folgendes an:

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

Das heißt, Apache läuft tatsächlich, antwortet aber mit Code 404. Schauen wir uns die Konfiguration an:

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

Auch hier gibt es einen Schlüssel – StevenPaulSteveJobs.

Überprüfung des Pfades /usr/share/WordPress - So etwas gibt es nicht, aber es gibt es /usr/share/wordpress. Bearbeiten Sie die Konfiguration und starten Sie Apache neu.

$ systemctl restart apache2

3. Versuchen Sie es erneut, wir erhalten die Fehlermeldung:

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

Die Datenbank läuft nicht?

$ systemctl status mysql
Active: active (running)

Was ist los? Wir müssen es herausfinden. Dazu benötigen Sie Zugriff auf MySQL, wie in beschrieben Dokumentation. Einer der Dokumentationspunkte empfiehlt, dass wir die Option registrieren skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Auch hier gibt es einen Schlüssel – AugustaAdaKingByron.

Benutzerrechte korrigieren 'wp'@'localhost'. Wir starten MySQL, machen es über das Netzwerk zugänglich und kommentieren die Option in der Konfiguration skip-networking.

4. Nach diesen Schritten startet der Webserver, aber die Site funktioniert immer noch nicht, weil

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

Wir bearbeiten die Rechte an der Datei.

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

Wir aktualisieren die Seite, gehen zur Website und finden den Schlüssel – BjarneStroustrup! Wir haben alle drei Schlüssel gefunden, unser Direktor kann arbeiten, wir haben die Buchhaltungsdateien entschlüsselt. Alle sind zufrieden und es liegt noch viel Arbeit vor Ihnen, Infrastruktur, Backups und Sicherheit im Unternehmen einzurichten.

2. Zweite Stufe

Es war notwendig, das Problem der Erfassung von Analysen zu lösen. Jeder liebt Analytics – wer nutzt sie, wo und in welchen Mengen. Wir haben uns einen Fall ausgedacht, dem alle Ingenieure in der einen oder anderen Form im Leben begegnen könnten.

2.1. Interessante Fakten

Einer unserer Spieler gab innerhalb der ersten 10 Minuten des Spiels den richtigen Schlüssel ein und innerhalb der ersten Stunde hatten wir einen Anführer, der die Aufgabe erledigte.

2.2. Übung

Sie gingen zur Arbeit in das Unternehmen, Manager kamen zu Ihnen und baten Sie herauszufinden, an wen Briefe aus Afrika geschickt wurden. Darauf aufbauend müssen wir die Top-21-Empfängeradressen aufbauen. Ausschlaggebend sind die Anfangsbuchstaben der Empfängeradressen. Eine Sache: Der Mailserver, über den die Briefe versendet wurden, lädt nicht. Jeder erwartet eine schnelle Lösung des Problems!

2.3. Lösung

1. Der Server bootet aufgrund einer nicht vorhandenen Swap-Partition in fstab nicht. Beim Laden versucht das System, sie zu mounten, und stürzt ab. Wie bootet man?

Laden Sie das Image herunter, wir haben CentOS 7 heruntergeladen, von Live-CD/DVD booten (Fehlerbehebung -> Rettung), das System mounten, bearbeiten /etc/fstab. Wir finden sofort den ersten Schlüssel – GottfriedWilhelm11646Leibniz!

Tausch erstellen:

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

2. Wie immer gibt es kein Passwort, Sie müssen das Root-Passwort auf der virtuellen Maschine ändern. Das haben wir bereits in der ersten Aufgabe gemacht. Wir ändern uns und melden uns erfolgreich beim Server an, aber er startet sofort einen Neustart. Der Server ist so schnell überlastet, dass Sie nicht einmal Zeit haben, sich alle Protokolle genau anzusehen. Wie kann man verstehen, was passiert?

Wieder booten wir von der Live-CD, studieren sorgfältig die Systemprotokolle und schauen für alle Fälle in den Cron, da eine solche Periodizität auftritt. Dort finden wir das Problem und den zweiten Schlüssel – Alan1912MathisonTuring!

Wird benötigt /etc/crontab Zeile löschen oder auskommentieren echo b > /proc/sysrq-trigger.

3. Danach ist der Server geladen und Sie können die Aufgabe des Managers abschließen: „Welche Adressen gibt es in Afrika?“ Diese Informationen sind grundsätzlich öffentlich zugänglich. Diese Informationen finden Sie im Internet unter den Begriffen „IP-Adresse Afrika“, „GeoIP-Datenbank“. Um das Problem zu lösen, können Sie frei verfügbare Adressverteilungsdatenbanken (geoip) nutzen. Wir haben die Datenbank als Standard verwendet MaxMind GeoLite2, verfügbar unter einer Creative Commons Attribution-ShareAlike 4.0-Lizenz.

Versuchen wir, unser Problem nur mit Linux-Systemdienstprogrammen zu lösen, aber im Allgemeinen kann es auf viele Arten gelöst werden: mit Textfilterdienstprogrammen und mit Skripten in verschiedenen Programmiersprachen.

Zunächst holen wir uns einfach die „Absender-Empfänger-IP“-Paare aus dem Mail-Protokoll /var/log/maillog (Lassen Sie uns eine Tabelle mit E-Mail-Empfängern erstellen – Absender-IP). Dies kann mit dem folgenden Befehl erfolgen:

$ 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

Und bevor wir mit der Zusammenstellung einer Datenbank afrikanischer Adressen fortfahren, werfen wir einen Blick auf die Top-IP-Adressen der Absender.

$ 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]

Unter allen stechen die ersten drei Empfänger von oben deutlich hervor, was die Anzahl der Briefe angeht. Wenn Sie die IP-Adressen der Absender durchsuchen, die an Adressen aus diesen Top 3 gesendet haben, werden Sie eine deutliche Dominanz bestimmter Netzwerke feststellen:

$ 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

Die meisten Netzwerke 105/8, 41/8, 196/8,197, 8/41 sind AFRINIC zugeordnet – einem der fünf regionalen Internet-Registrare, die Internetressourcen verteilen. AFRINIC verteilt Adressraum in ganz Afrika. Und 8/XNUMX bezieht sich vollständig auf AFRINIC.

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

Somit liegt die Antwort auf das Problem tatsächlich im Protokoll selbst.

$ 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]

Zu diesem Zeitpunkt erhalten wir die Zeichenfolge „LinuxBenedictTorvadst“.

Richtiger Schlüssel: „LinusBenedictTorvalds“.

Die resultierende Zeichenfolge enthält in den letzten drei Zeichen einen Tippfehler in Bezug auf den richtigen Schlüssel. Dies liegt an der Tatsache, dass die von uns ausgewählten Netzwerke nicht ausschließlich auf afrikanische Länder ausgerichtet sind, und an der Art und Weise, wie E-Mails anhand der IP-Adressen in unserem Protokoll verteilt werden.

Bei ausreichender Spezifizierung der größten den afrikanischen Ländern zugeordneten Netze lässt sich eine präzise Antwort erhalten:

$ 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]

Das Problem kann auch auf andere Weise gelöst werden.
Laden Sie MaxMind herunter, entpacken Sie es und die nächsten drei Befehle lösen auch unser Problem.

$ 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

Auf die eine oder andere Weise haben wir schließlich die Statistiken berechnet und die Manager erhielten die Daten, die sie zum Arbeiten brauchten!

3. Die dritte Stufe

Der dritte Schritt ähnelt in gewisser Weise dem ersten – Sie müssen auch die Wartung der warmen Lampe reparieren, aber alles ist komplizierter als in der ersten Aufgabe.

3.1. Interessante Fakten

In den ersten 15 Minuten fanden drei Spieler den ersten Schlüssel, 2 Stunden und 20 Minuten nach Beginn der Etappe erledigte unser Gewinner die Aufgabe.

3.2. Übung

Sie haben für ein Unternehmen gearbeitet, bei dem alle Unternehmensdokumente auf einem internen Wiki-Server gespeichert sind. Letztes Jahr bestellte ein Techniker drei neue Festplatten für den Server zusätzlich zu einer vorhandenen und argumentierte, dass die Festplatten in einer Art Array untergebracht werden müssten, damit das System fehlertolerant sei. Leider reiste der Ingenieur einige Wochen nach der Installation in den Urlaub nach Indien und kehrte nicht zurück.

Der Server funktionierte mehrere Jahre lang ohne Ausfälle, doch vor ein paar Tagen wurde das Netzwerk des Unternehmens gehackt. Gemäß den Anweisungen hat das Sicherheitspersonal die Datenträger vom Server entfernt und an Sie gesendet. Beim Transport ging eine Diskette unwiederbringlich verloren.

Wir müssen die Funktionalität des Wikis wiederherstellen; zunächst interessieren wir uns für den Inhalt der Wiki-Seiten. Ein bestimmter Text, der sich auf einer der Seiten dieses Wikis befand, ist das Passwort für den 1C-Server und wird dringend benötigt, um ihn freizuschalten.

Darüber hinaus befanden sich irgendwo auf den Wiki-Seiten oder an anderer Stelle Passwörter für den Protokollserver und den Videoüberwachungsserver, deren Wiederherstellung ebenfalls wünschenswert wäre; ohne sie ist eine Untersuchung des Vorfalls nicht möglich. Wir erwarten wie immer eine zeitnahe Lösung des Problems!

3.3. Lösung

1. Wir versuchen, eine nach der anderen von den Festplatten zu booten, die wir haben, und überall erhalten wir die gleiche Meldung:

No bootable medium found! System halted 

Sie müssen von etwas booten. Das Booten von einer Live-CD/DVD (Fehlerbehebung -> Rettung) hilft wieder. Beim Laden versuchen wir die Boot-Partition zu finden, können wir sie nicht finden, wir landen in der Shell. Wir versuchen zu untersuchen, was und wie man mit Festplatten umgeht. Es ist bekannt, dass es drei davon gibt. Weitere Tools dafür gibt es in der 7. Version von CentOS, wo es Befehle gibt blkid oder lsblk, die uns alle Informationen zu den Festplatten zeigen.

Wie und was wir tun:

$ ls /dev/sd*

Es ist sofort klar, dass

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

Wir mounten sdb1, es ist klar, dass dies die Boot-Partition von CentOS 6 ist.

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

Offensichtlich gehen wir zum Grub-Bereich und finden dort den ersten Schlüssel – James191955Gosling – in einer ungewöhnlichen Datei.

2. Wir studieren PVS und LVS, da wir mit LVM arbeiten. Wir sehen, dass es zwei physische Volumes geben sollte, eines wird nicht gefunden und beschwert sich über eine verlorene UID. Wir sehen, dass es zwei logische Volumes geben sollte: Root und Swap, während Root teilweise verloren geht (das P-Attribut des Volumes). Eine Montage ist nicht möglich, schade! Wir brauchen ihn wirklich.

Es gibt noch 2 weitere Festplatten, wir schauen sie uns an, bauen sie zusammen und montieren sie:

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

Wir schauen, wir können sehen, dass dies die Boot-Partition von CentOS 6 und ein Duplikat dessen ist, was bereits vorhanden ist /dev/sdb1, und hier noch einmal der gleiche Schlüssel - DennisBMacAlistairCRitchie!
Mal sehen, wie es zusammengebaut wird /dev/md127.

$ mdadm --detail /dev/md127

Wir sehen, dass es aus vier Scheiben hätte zusammengesetzt werden sollen, aber es wurde aus zwei Scheiben zusammengesetzt /dev/sda1 и /dev/sdc1, es hätten die Nummern 2 und 4 im System sein sollen. Wir gehen davon aus /dev/sda2 и /dev/sdc2 Sie können auch ein Array sammeln. Es ist nicht klar, warum es keine Metadaten darüber gibt, aber das liegt am Gewissen des Administrators, der sich irgendwo in Goa befindet. Wir gehen davon aus, dass es RAID10 geben sollte, obwohl es Optionen gibt. Wir sammeln:

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

Wir schauen uns blkid, pvs, lvs an. Wir stellen fest, dass wir ein physisches Volumen gesammelt haben, das uns zuvor gefehlt hat.

lvroot wurde sofort repariert, wir mounten es, aktivieren aber zunächst VG:

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

Und alles ist da, einschließlich des Schlüssels im Root-Home-Verzeichnis – /root/sweet.

3. Wir versuchen immer noch, unseren Server wiederzubeleben, damit er normal startet. Alle logischen Bände von unserem /dev/md0 (wo wir alles gefunden haben) ziehen Sie es dorthin /dev/sdb2, wo zunächst der gesamte Server funktionierte.

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

Wir schalten den Server aus, entfernen die Festplatten 1 und 3, lassen die zweite übrig und booten von der Live-CD/DVD in Rescue. Suchen Sie die Boot-Partition und stellen Sie den Bootloader in Grub wieder her:

root (hd0,0)
setup (hd0)

Wir reißen die Bootdiskette ab und laden sie erfolgreich, aber die Site funktioniert nicht.

4. Es gibt zwei Möglichkeiten, eine Website zu starten: Konfigurieren Sie Apache von Grund auf oder verwenden Sie Nginx mit bereits im Voraus konfiguriertem PHP-FPM:

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

Abschließend müssen Sie MySQL starten:

$ /etc/init.d/mysqld start

Es startet nicht und die Antwort liegt darin /var/log/mysql. Sobald Sie das Problem mit MySQL gelöst haben, funktioniert die Site. Auf der Hauptseite befindet sich ein Schlüssel - RichardGCCMathewGNUStallman! Jetzt haben wir Zugang zu 1C und die Mitarbeiter können ihre Gehälter erhalten. Und wie immer liegt noch viel Arbeit vor Ihnen, um Infrastruktur und Sicherheit im Unternehmen zu etablieren.

Wir können auch noch einmal eine Liste von Büchern veröffentlichen, die uns und unseren Teilnehmern bei der Vorbereitung auf das Spiel geholfen haben: linux.mail.ru/books.

Vielen Dank, dass Sie bei uns sind! Bleiben Sie dran für Ankündigungen der nächsten Spiele!

Source: habr.com

Kommentar hinzufügen