Quête Linux. Félicitations aux gagnants et parlez-nous des solutions aux tâches

Quête Linux. Félicitations aux gagnants et parlez-nous des solutions aux tâches

Le 25 mars, nous avons ouvert les inscriptions pour Quête Linux, c'est un jeu pour les amateurs et les experts du système d'exploitation Linux. Quelques statistiques : 1117 317 personnes se sont inscrites au jeu, 241 d'entre elles ont trouvé au moins une clé, 123 ont réussi la tâche de la première étape, 70 ont réussi la deuxième et XNUMX ont réussi la troisième étape. Aujourd'hui, notre jeu est terminé et nous félicitons nos gagnants !

  • Alexander Teldekov a pris la première place.
    Alexander s'est dit qu'il était l'administrateur système le plus typique. Vit à Volgograd, administre divers systèmes de type Unix depuis une vingtaine d'années. J'ai réussi à travailler chez des fournisseurs Internet, une banque et un intégrateur de systèmes. Il travaille désormais à distance dans une petite entreprise, travaillant sur l'infrastructure cloud d'un grand client étranger. Aime lire et écouter de la musique. À propos du jeu, Alexander a déclaré qu'il aimait le jeu dans son ensemble et qu'il adorait de telles tâches. Lors d'un entretien dans l'une des entreprises, j'ai fait quelque chose de similaire à Hackerrank, c'était intéressant.
  • Deuxième place - Roman Suslov.
    Un roman de Moscou. Il a 37 ans. Travaille en tant qu'ingénieur Linux/Unix chez Jet Infosystems. Au travail, je dois administrer et dépanner les systèmes Linux/Unix + SAN. Les intérêts sont variés : systèmes Linux, programmation, rétro-ingénierie, sécurité de l'information, Arduino. À propos du jeu, Roman a indiqué qu'il aimait le jeu dans son ensemble. «J'ai un peu étiré mon cerveau et j'ai fait une pause dans la vie quotidienne grise du travail quotidien. 🙂 J’aimerais avoir plus de tâches, sinon avant d’avoir eu le temps d’y goûter, le jeu était déjà terminé.
  • Troisièmement - alex3d.
    Alex vit à Moscou et travaille dans le développement de logiciels. "Merci pour le concours, c'était intéressant de tester mes compétences en google-fu."

Egalement dans le classement des 10 meilleurs joueurs :

  • Eugène Saldaïev
  • Markel Mokhnatchevski
  • Constantin Konossov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Boubnov
  • Pavlo Klets

Nous comprenons qu'il existe de nombreuses options pour résoudre tous nos problèmes ; certaines des solutions possibles sont décrites ci-dessous.

1. Première étape

Nous l'avons appelé « Êtes-vous vraiment un administrateur ? », car la tâche était assez simple : réparer un service de lampe chaude.

1.1. Faits intéressants:

Deux joueurs ont trouvé la première clé dans les 15 premières minutes du match, et dans la première heure, nous avons eu trois leaders qui ont accompli la tâche.

1.2. Exercice

Vous êtes allé travailler dans une entreprise où pendant longtemps il n’y avait pas de spécialiste informatique compétent. Avant de commencer à mettre les choses en ordre, vous devez résoudre le problème brûlant qui bloque le travail du bureau.

La femme de ménage a attrapé le câble d'alimentation de l'armoire serveur avec une vadrouille. Le courant a été rétabli, mais un site Internet très important ne fonctionne toujours pas. Le site Web est important car l'entreprise ne se soucie pas beaucoup de la sécurité des informations, et sur la page principale de celui-ci, vous pouvez trouver en texte clair le mot de passe administrateur de l'ordinateur du PDG.

L'autre jour, le mot de passe a été changé, mais tout le monde a oublié le nouveau, le réalisateur ne peut pas travailler. Des rumeurs courent selon lesquelles cette machine contenait d'autres clés qui pourraient nous aider à déchiffrer la copie de sauvegarde des documents comptables.

Tout le monde attend une résolution rapide du problème !

1.3. La solution

1. Tout d'abord, vous devez modifier le mot de passe root sur la machine virtuelle afin d'y accéder. Au démarrage, on remarque qu'il s'agit du serveur Ubuntu 16.04.

Pour réinitialiser le mot de passe root, on redémarre la machine, lors du chargement, au moment où le menu grub s'affiche, allez éditer l'élément Ubuntu avec le bouton « e ». Modifiez la ligne Linux, ajoutez-la à la fin init=/bin/bash. On charge via Ctrl+x, on obtient un bash. Remontez le root avec rw, changez le mot de passe :

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

N'oubliez pas la synchronisation, redémarrez.

2. La condition indique que notre serveur Web ne fonctionne pas, regardez :

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

Autrement dit, Apache est en cours d'exécution, mais répond avec le code 404. Regardons la configuration :

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

Il y a aussi une clé ici - StevenPaulSteveJobs.

Vérification du chemin /usr/share/WordPress - cela n'existe pas, mais il existe /usr/share/wordpress. Modifiez la configuration et redémarrez Apache.

$ systemctl restart apache2

3. Réessayez, nous obtenons l'erreur :

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

La base de données ne fonctionne pas ?

$ systemctl status mysql
Active: active (running)

Quel est le problème? Nous devons le comprendre. Pour ce faire, vous devez accéder à MySQL, comme décrit dans documentation. L'un des points de la documentation nous recommande d'enregistrer l'option skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Il y a aussi une clé ici - AugustaAdaKingByron.

Correction des droits des utilisateurs 'wp'@'localhost'. Nous lançons MySQL, le rendons accessible sur le réseau, en commentant l'option dans la configuration skip-networking.

4. Après ces étapes, le serveur Web démarre, mais le site ne fonctionne toujours pas car

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

Nous modifions les droits sur le fichier.

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

Nous actualisons la page, allons sur le site et trouvons la clé - BjarneStroustrup ! Nous avons trouvé les trois clés, notre directeur peut travailler, nous avons décrypté les fichiers comptables. Tout le monde est content et vous avez beaucoup de travail devant vous pour mettre en place l'infrastructure, les sauvegardes et la sécurité dans l'entreprise.

2. Deuxième étape

Il était nécessaire de résoudre le problème de la collecte d'analyses. Tout le monde aime l'analyse : qui l'utilise, où et en quelles quantités. Nous avons imaginé un cas que tous les ingénieurs peuvent rencontrer sous une forme ou une autre dans la vie.

2.1. Faits intéressants

Un de nos joueurs a saisi la bonne clé dans les 10 premières minutes du jeu, et dès la première heure, nous avions un leader qui a accompli la tâche.

2.2. Exercice

Vous êtes allé travailler dans l'entreprise, des dirigeants sont venus vers vous et vous ont demandé de savoir à qui des lettres étaient envoyées depuis l'Afrique. Nous devons créer les 21 principales adresses de destinataires en fonction de celles-ci. Les premières lettres des adresses des destinataires constituent la clé. Une chose : le serveur de messagerie par lequel les lettres ont été envoyées ne se charge pas. Tout le monde attend une résolution rapide du problème !

2.3. La solution

1. Le serveur ne démarre pas en raison d'une partition d'échange inexistante dans fstab : lors du chargement, le système tente de le monter et plante. Comment démarrer ?

Téléchargez l'image, nous avons téléchargé CentOS 7, démarrez à partir du Live CD/DVD (Dépannage -> Rescue), montez le système, modifiez /etc/fstab. Nous trouvons immédiatement la première clé - GottfriedWilhelm11646Leibniz !

Créer un échange :

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

2. Comme toujours, il n'y a pas de mot de passe, vous devez changer le mot de passe root sur la machine virtuelle. Nous l'avons déjà fait dans la première tâche. Nous modifions et nous connectons avec succès au serveur, mais il redémarre immédiatement. Le serveur est surchargé à une telle vitesse que vous n’avez même pas le temps de consulter attentivement tous les journaux. Comment comprendre ce qui se passe ?

Encore une fois, nous démarrons à partir du livecd, étudions attentivement les journaux système et, juste au cas où, examinons le cron, depuis une telle périodicité. Là nous trouvons le problème et la deuxième clé - Alan1912MathisonTuring !

Besoin en /etc/crontab supprimer ou commenter la ligne echo b > /proc/sysrq-trigger.

3. Après quoi le serveur est chargé et vous pouvez terminer la tâche des gestionnaires : « Quelles sont les adresses en Afrique ? Ces informations sont généralement accessibles au public. Vous pouvez trouver ces informations sur Internet en utilisant les expressions « adresse IP Afrique », « base de données géoip ». Pour résoudre le problème, vous pouvez utiliser des bases de données de distribution d'adresses disponibles gratuitement (geoip). Nous avons utilisé la base de données comme standard MaxMind GeoLite2, disponible sous licence Creative Commons Attribution-ShareAlike 4.0.

Essayons de résoudre notre problème en utilisant uniquement les utilitaires système Linux, mais en général, il peut être résolu de nombreuses manières : en utilisant des utilitaires de filtrage de texte et en utilisant des scripts dans divers langages de programmation.

Pour commencer, nous allons simplement récupérer les paires « IP expéditeur-destinataire » du journal de messagerie. /var/log/maillog (créons un tableau des destinataires des e-mails - IP de l'expéditeur). Cela peut être fait avec la commande suivante :

$ 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

Et avant de poursuivre la compilation d'une base de données d'adresses africaines, jetons un coup d'œil aux principales adresses IP des expéditeurs.

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

Parmi eux, les trois premiers destinataires en partant du haut se distinguent clairement par le nombre de lettres. Si vous récupérez les adresses IP des expéditeurs qui ont envoyé vers des adresses de ce top 3, vous remarquerez une nette prédominance de certains réseaux :

$ 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

La plupart des réseaux 105/8, 41/8, 196/8,197, 8/41 sont attribués à AFRINIC - l'un des cinq bureaux d'enregistrement Internet régionaux qui distribuent des ressources Internet. AFRINIC distribue de l'espace d'adressage dans toute l'Afrique. Et 8/XNUMX fait entièrement référence à AFRINIC.

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

Ainsi, la réponse au problème se trouve en fait dans le journal lui-même.

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

A ce stade, nous obtenons la chaîne « LinuxBenedictTorvadst ».

Clé correcte : "LinusBenedictTorvalds".

La chaîne résultante contient une faute de frappe concernant la clé correcte dans les 3 derniers caractères. Cela est dû au fait que les réseaux que nous avons sélectionnés ne sont pas entièrement dédiés aux pays africains et à la manière dont les emails sont répartis par adresses IP dans notre log.

Avec une spécification suffisante des plus grands réseaux alloués aux pays africains, une réponse précise peut être obtenue :

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

Le problème peut également être résolu d’une autre manière.
Téléchargez MaxMind, décompressez-le et les trois commandes suivantes résolvent également notre problème.

$ 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

D'une manière ou d'une autre, nous avons finalement calculé les statistiques, et les managers ont reçu les données dont ils avaient besoin pour travailler !

3. La troisième étape

La troisième étape est quelque peu similaire à la première - vous devez également réparer le service de la lampe chaude, mais tout est plus compliqué que dans la première tâche.

3.1. Faits intéressants

Dans les 15 premières minutes, trois joueurs ont trouvé la première clé ; 2 heures et 20 minutes après le début de l'étape, notre vainqueur a terminé la tâche.

3.2. Exercice

Vous êtes allé travailler pour une entreprise où tous les documents de l'entreprise sont stockés sur un serveur Wiki interne. L'année dernière, un ingénieur a commandé 3 nouveaux disques pour le serveur en plus d'un disque existant, arguant que pour que le système soit tolérant aux pannes, les disques devaient être placés dans une sorte de matrice. Malheureusement, quelques semaines après leur installation, l'ingénieur partit en vacances en Inde et n'en revint pas.

Le serveur a fonctionné sans panne pendant plusieurs années, mais il y a quelques jours, le réseau de l'entreprise a été piraté. Conformément aux instructions, le personnel de sécurité a retiré les disques du serveur et vous les a envoyés. Pendant le transport, un disque a été irrémédiablement perdu.

Nous devons restaurer les fonctionnalités du Wiki ; tout d’abord, nous nous intéressons au contenu des pages wiki. Un certain morceau de texte qui se trouvait sur l'une des pages de ce wiki est le mot de passe du serveur 1C et est nécessaire de toute urgence pour le déverrouiller.

De plus, quelque part sur les pages wiki ou à un autre endroit se trouvaient des mots de passe pour le serveur de journalisation et le serveur de vidéosurveillance, qu'il serait également souhaitable de récupérer ; sans eux, une enquête sur l'incident est impossible. Comme toujours, nous attendons une résolution rapide du problème !

3.3. La solution

1. Nous essayons de démarrer un par un à partir des disques dont nous disposons et partout nous recevons le même message :

No bootable medium found! System halted 

Vous devez démarrer à partir de quelque chose. Démarrer à partir d'un Live CD/DVD (Dépannage -> Rescue) est encore une fois utile. Au chargement, on essaie de trouver la partition de démarrage, on ne la trouve pas, on se retrouve dans le shell. Nous essayons d'étudier quoi et comment faire avec les disques. On sait qu'il y en a trois. Il existe plus d'outils pour cela dans la 7ème version de CentOS, où se trouvent les commandes blkid ou lsblk, qui nous montre toutes les informations sur les disques.

Comment et ce que nous faisons :

$ ls /dev/sd*

Il est immédiatement clair que

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

On monte sdb1, il est clair qu'il s'agit de la partition de démarrage de CentOS 6.

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

Évidemment, nous allons dans la section grub et y trouvons la première clé - James191955Gosling dans un fichier inhabituel.

2. Nous étudions les pvs et les lvs, puisque nous travaillons avec LVM. On voit qu'il devrait y avoir 2 volumes physiques, un n'est pas localisé et se plaint d'un uid perdu. On voit qu'il doit y avoir 2 volumes logiques : root et swap, tandis que root est partiellement perdu (l'attribut P du volume). Il n'est pas possible de monter, c'est dommage ! Nous avons vraiment besoin de lui.

Il y a 2 autres disques, on les regarde, on les assemble et on les monte :

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

On regarde, on voit qu'il s'agit de la partition de démarrage de CentOS 6 et d'un double de ce qui est déjà dessus /dev/sdb1, et là encore la même clé - DennisBMacAlistairCRitchie !
Voyons comment il est assemblé /dev/md127.

$ mdadm --detail /dev/md127

On voit qu'il aurait dû être assemblé à partir de 4 disques, mais il a été assemblé à partir de deux /dev/sda1 и /dev/sdc1, ils auraient dû être les numéros 2 et 4 dans le système. Nous supposons qu'à partir de /dev/sda2 и /dev/sdc2 Vous pouvez également collecter un tableau. On ne sait pas pourquoi il n'y a pas de métadonnées sur eux, mais c'est sur la conscience de l'administrateur, qui se trouve quelque part à Goa. Nous supposons qu'il devrait y avoir RAID10, bien qu'il existe des options. Nous collectons :

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

Nous regardons blkid, pvs, lvs. Nous découvrons que nous avons collecté un volume physique qui nous manquait auparavant.

lvroot a été immédiatement réparé, on le monte, mais on active d'abord VG :

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

Et tout est là, y compris la clé dans le répertoire racine - /root/sweet.

3. Nous essayons toujours de relancer notre serveur pour qu'il démarre normalement. Tous les volumes logiques de notre /dev/md0 (où nous avons tout trouvé) faites-le glisser vers /dev/sdb2, où l'ensemble du serveur fonctionnait initialement.

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

Nous éteignons le serveur, supprimons les disques 1 et 3, laissons le second, démarrons depuis le Live CD/DVD dans Rescue. Recherchez la partition de démarrage et restaurez le chargeur de démarrage dans grub :

root (hd0,0)
setup (hd0)

Nous déchirons le disque de démarrage et chargeons avec succès, mais le site ne fonctionne pas.

4. Il existe deux options pour lancer un site Web : configurer Apache à partir de zéro ou utiliser nginx avec php-fpm déjà configuré à l'avance :

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

Enfin, vous devez démarrer MySQL :

$ /etc/init.d/mysqld start

Il ne démarre pas et la réponse réside dans /var/log/mysql. Dès que vous aurez résolu le problème avec MySQL, le site fonctionnera, sur la page principale il y aura une clé - RichardGCCMatthewGNUStallman ! Nous avons désormais accès au 1C et les salariés pourront percevoir leur salaire. Et comme toujours, vous avez beaucoup de travail à faire pour établir l’infrastructure et la sécurité de l’entreprise.

Nous pouvons également partager une fois de plus une liste de livres qui nous ont aidés, nous et nos participants, à préparer le jeu : linux.mail.ru/books.

Merci d'être avec nous! Restez à l'écoute des annonces des prochains jeux !

Source: habr.com

Ajouter un commentaire