
Le 25 mars, nous avons ouvert les inscriptions pour , un jeu pour les passionnés et les connaisseurs du système d'exploitation Linux. Quelques statistiques : 1117 personnes se sont inscrites au jeu, parmi lesquelles 317 ont trouvé au moins une clé, 241 ont réussi la première étape, 123 la seconde et 70 ont passé la troisième étape. Aujourd'hui, notre jeu est arrivé à son terme, et nous félicitons nos gagnants !
- La première place a été remportée par Alexandre Teldikov.
Alexandre a déclaré qu'il était un administrateur système typique. Il vit à Volgograd et administre divers systèmes Unix-like depuis près de vingt ans. Il a eu l'opportunité de travailler dans des fournisseurs d'accès Internet, une banque, et un intégrateur système. Actuellement, il travaille à distance pour une petite entreprise, s'occupant de l'infrastructure cloud pour un gros client étranger. Il aime lire et écouter de la musique. Concernant le jeu, Alexandre a dit qu'il l'a globalement apprécié et qu'il aimait ce genre de défis. Lors d'un entretien dans une entreprise, il a rencontré des problèmes similaires à ceux de Hackerrank, ce qui a été intéressant. - La seconde place revient à Roman Suslov.
Roman est de Moscou. Il a 37 ans. Il travaille en tant qu'ingénieur Linux/Unix dans l'entreprise « Infostystems Jet ». Dans le cadre de son travail, il doit s'occuper de l'administration et du dépannage des systèmes Linux/Unix + SAN. Ses centres d'intérêt sont variés : systèmes Linux, programmation, reverse engineering, sécurité de l'information, Arduino. À propos du jeu, Roman a souligné qu'il l'a globalement apprécié. « J'ai un peu exercé mes neurones et me suis éloigné de la monotonie de la vie quotidienne. 🙂 J'aimerais avoir plus de tâches, car je n'ai pas eu le temps d'entrer dans le vif du sujet avant que le jeu ne se termine. » - La troisième place est pour alex3d.
Alex vit à Moscou et travaille dans le développement de logiciels. « Merci pour le concours, c'était intéressant de tester mon skill google-fu. »
Aussi dans le classement des 10 meilleurs joueurs :
- Yevgeniy Saldayev
- Markel Mokhnachevskiy
- Konstantin Konosov
- Pavel Sergeyev
- Vladimir Bovaev
- Ivan Bubnov
- Pavlo Klets
Nous comprenons qu'il existe de nombreuses solutions à tous nos problèmes, ci-dessous nous décrivons quelques-unes des solutions possibles.
1. Première étape
Nous l'avons appelée « Est-tu vraiment administrateur ? », car la tâche était assez simple : réparer un service chaleureux et convivial.
1.1. Faits intéressants :
Deux joueurs ont trouvé la première clé dans les 15 premières minutes du jeu, et au bout d'une heure, nous avions trois leaders qui avaient réussi la tâche.
1.2. Tâche
Vous avez rejoint une entreprise où il n'y avait pas de spécialiste compétent en technologies de l'information depuis longtemps. Avant de mettre de l'ordre, il faut résoudre le problème urgent qui bloque le fonctionnement du bureau.
La femme de ménage a accroché le câble d'alimentation du rack serveur avec son balai. L'alimentation a été rétablie, mais un site web très important ne fonctionne toujours pas. Ce site est crucial car l'entreprise n'est pas très préoccupée par la sécurité de l'information, et sur la page d'accueil, on peut trouver en clair le mot de passe admin de l'ordinateur du PDG.
Récemment, le mot de passe a été changé, et tout le monde a oublié le nouveau. Le directeur ne peut pas travailler. Des rumeurs circulent disant que cette machine contenait également des clés qui pourraient nous aider à déchiffrer la sauvegarde des documents comptables.
Tout le monde attend une résolution rapide de la situation !
1.3. Solution
1. Tout d'abord, il faut changer le mot de passe root sur la machine virtuelle pour pouvoir y accéder. Lorsque nous démarrons, nous remarquons que c'est un serveur Ubuntu 16.04.
Pour réinitialiser le mot de passe root, nous redémarrons la machine. Lors du démarrage, au moment où le menu grub apparaît, nous passons en mode édition du choix Ubuntu avec la touche « e ». Nous modifions la ligne linux et ajoutons à la fin init=\/bin\/bash. Nous chargeons avec Ctrl+x, et obtenons un shell. Nous remontons la racine avec rw, et changeons le mot de passe :
$ mount -o remount,rw \/dev\/mapper\/ubuntu--vg-root
$ passwdN'oublions pas le sync, et redémarrons.
2. Dans les conditions, il est dit que notre serveur web ne fonctionne pas, voyons :
$ curl localhost
Not Found
The requested URL \/ was not found on this server.
Apache\/2.4.18 Donc, en fait, Apache est lancé mais renvoie un code 404. Regardons la config :
$ vim \/etc\/apache2\/sites-enabled\/000-default.confIci se trouve la clé — StevenPaulSteveJobs.
Vérifions le chemin /usr/share/WordPress — il n'y en a pas, mais il y a /usr/share/wordpress. Nous modifions la config et redémarrons Apache.
$ systemctl restart apache23. Essayons à nouveau, et obtenons l'erreur :
Warning: mysqli_real_connect(): (HY000\/2002): Connection refused in \/usr\/share\/wordpress\/wp-includes\/wp-db.php on line 1488La base de données n'est pas lancée ?
$ systemctl status mysql
Active: active (running) Quel est le problème ? Il faut enquêter. Pour cela, il faut accéder à MySQL, comme décrit dans . Un des points de la documentation nous recommande de spécifier l'option skip-grant-tables dans /etc/mysql/mysql.conf.d/mysqld.cnf. Ici se trouve aussi une clé — AugustaAdaKingByron.
Nous corrigeons les droits pour l'utilisateur 'wp'@'localhost'. Nous lançons MySQL, le rendons accessible sur le réseau en commentant dans la config l'option skip-networking.
4. Après avoir effectué ces étapes, le serveur web démarre, mais le site ne fonctionne toujours pas, car
Avertissement : require_once(//usr/share/wordpress/wp-content/themes/twentysixteen/footer.php) : échec de l'ouverture du flux : Permission refusée dans /usr/share/wordpress/wp-includes/template.php à la ligne 562Nous corrigeons les droits sur le fichier.
$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php
Nous actualisons la page, visitons le site et trouvons la clé — BjarneStroustrup ! Nous avons trouvé toutes les trois clés, notre directeur peut travailler, nous avons déchiffré les fichiers de la comptabilité. Tout le monde est heureux, et tu as beaucoup de travail devant toi pour établir l'infrastructure, les sauvegardes et la sécurité de l'entreprise.
2. Deuxième étape
Il fallait résoudre le problème de collecte d'analytique. Tout le monde aime l'analytique — qui va d'où et en quelles quantités. Nous avons imaginé un cas, mais avec lequel tous les ingénieurs peuvent d'une manière ou d'une autre être confrontés dans leur vie.
2.1. Faits intéressants
Un de nos joueurs a saisi la bonne clé dans les 10 premières minutes de jeu, et dans la première heure, nous avons eu un leader qui a réussi la mission.
2.2. Mission
Tu es arrivé au travail dans l'entreprise, des gestionnaires sont venus vers toi et ont demandé de trouver à qui étaient envoyés les e-mails d'Afrique. Il faut construire un top 21 des adresses des destinataires. Les premières lettres des adresses des destinataires — c'est la clé. Un bémol : le serveur de messagerie à travers lequel les e-mails ont été envoyés ne se charge pas. Tout le monde attend une solution rapide à ce problème !
2.3. Solution
1. Le serveur ne se charge pas à cause d'une partition swap inexistante dans fstab, lors du démarrage, le système essaie de la monter et plante. Comment démarrer ?
Téléchargeons l'image, nous avons téléchargé CentOS 7, démarrez avec Live CD/DVD (Dépannage -> Secours), montons le système, corrigeons /etc/fstabNous trouvons tout de suite la première clé — GottfriedWilhelm11646Leibniz !
Créons un swap :
$ lvcreate -n swap centos -L 256M
$ sync && reboot2. Comme toujours, pas de mot de passe, il faut changer le mot de passe root sur la machine virtuelle. Nous avons déjà fait cela dans la première tâche. Nous changeons et accédons avec succès au serveur, mais il redémarre immédiatement. Le serveur redémarre si rapidement que nous n'avons même pas le temps de consulter tous les journaux attentivement. Comment comprendre ce qui se passe ?
Nous redémarrons avec le livecd, examinons attentivement les journaux du système et au cas où, nous jetons un œil sur cron, étant donné cette périodicité. Nous y trouvons le problème et la deuxième clé — Alan1912MathisonTuring !
Il faut /etc/crontab supprimer ou commenter la ligne echo b > /proc/sysrq-trigger.
3. Une fois que le serveur a démarré, vous pouvez exécuter la tâche des gestionnaires : « Quelles sont les adresses de l'Afrique ? » Cette information est généralement accessible au public. Vous pouvez la trouver sur Internet en cherchant des expressions telles que « adresse IP Afrique », « base de données geoip ». Pour résoudre cette tâche, vous pouvez utiliser des bases de données de distribution d'adresses accessibles librement (geoip). En guise de référence, nous avons utilisé une base de données. , disponible sous la licence Creative Commons Attribution-ShareAlike 4.0.
Essayons de résoudre notre tâche en utilisant uniquement les utilitaires systèmes Linux, mais en réalité, elle peut être résolue de nombreuses façons : avec des utilitaires de filtrage de texte et à l'aide de scripts dans divers langages de programmation.
Pour commencer, obtenons simplement les paires « IP de l'expéditeur — destinataire » à partir du journal des mails. /var/log/maillog (nous allons construire un tableau des e-mails des destinataires — 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.txtEt avant de continuer avec la construction de la base de données des adresses de l'Afrique, jetons un œil aux principales adresses IP des expéditeurs.
$ cat log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n 40
5206 L2JhbjAbM67GA99jg@mail.ru
4165 iHKTBkegOQa6fIALq@mail.ru
3739 nHkcBl7BdgXxijSYD7@mail.ru
3405 SMAzPJAzbl9vp4hAXo@mail.ru
3346 xILz6d7P@mail.ru
Parmi tous, les trois premiers destinataires se distinguent clairement par le nombre de courriels. Si nous recherchons les adresses IP des expéditeurs ayant envoyé des courriels aux adresses de ce top 3, nous pouvons noter une nette domination de certains réseaux :
$ cat log1.txt | fgrep 'L2JhbjAbM67GA99jg@mail.ru' | 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 165La majorité des réseaux 105/8, 41/8, 196/8, 197/8 est attribuée à AFRINIC — l'un des cinq registres Internet régionaux chargés de la distribution des ressources Internet. AFRINIC gère l'espace d'adressage en Afrique. Le réseau 41/8 appartient entièrement à 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 à la tâche 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 L2JhbjAbM67GA99jg@mail.ru
3313 iHKTBkegOQa6fIALq@mail.ru
2704 nHkcBl7BdgXxijSYD7@mail.ru
2215 uvRbp1O@mail.ru
1774 sPmMsmmFiV@mail.ru
1448 BtG3aHgQgCKuze2AKuRH@mail.ru
1233 eQpuuQ2uQdbwRL3@mail.ru
958 nJT5dpaBZ@mail.ru
862 ef4WbQiB@mail.ru
762 dQCqKL6eVminFfH7wLA@mail.ru
632 ifq6Rd1HxuCQOdO9@mail.ru
539 cFwm2ssypMmx1sA7@mail.ru
531 twtTnr4G@mail.ru
431 TSrczgYASrR11Hs3qCi@mail.ru
380 o3r3exc3OL@mail.ru
357 rzmjr2VAHK@mail.ru
348 vnPr6YjJ3ndw@mail.ru
312 anOjFXrwOtLP2Rl1Vcz6@mail.ru
289 dvny5zHmRW8fiT@mail.ru
282 sgg9jPxFDYvzw8Kr@mail.ru
274 tKSevzA7GntJ@mail.ruÀ ce stade, nous obtenons la chaîne «LinuxBenedictTorvadst».
Clé correcte : «LinusBenedictTorvalds».
La chaîne obtenue contient une erreur par rapport à la clé correcte dans les trois derniers caractères. Cela est dû au fait que les réseaux que nous avons choisis ne sont pas entièrement attribués aux pays d'Afrique et à la façon dont les e-mails sont distribués par adresses IP dans notre journal.
Avec suffisamment de précision sur les plus grands réseaux attribués aux pays d'Afrique, une réponse exacte 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 L2JhbjAbM67GA99jg@mail.ru
2662 iHKTBkegOQa6fIALq@mail.ru
2105 nHkcBl7BdgXxijSYD7@mail.ru
1724 uvRbp1O@mail.ru
1376 sPmMsmmFiV@mail.ru
1092 BtG3aHgQgCKuze2AKuRH@mail.ru
849 eQpuuQ2uQdbwRL3@mail.ru
712 nJT5dpaBZ@mail.ru
584 ef4WbQiB@mail.ru
463 dQCqKL6eVminFfH7wLA@mail.ru
365 ifq6Rd1HxuCQOdO9@mail.ru
269 cFwm2ssypMmx1sA7@mail.ru
225 twtTnr4G@mail.ru
168 TSrczgYASrR11Hs3qCi@mail.ru
142 o3r3exc3OL@mail.ru
111 rzmjr2VAHK@mail.ru
96 vnPr6YjJ3ndw@mail.ru
78 anOjFXrwOtLP2Rl1Vcz6@mail.ru
56 lHzWiB7ExvRtSbAcU9@mail.ru
56 dvny5zHmRW8fiT@mail.ru
40 sgg9jPxFDYvzw8Kr@mail.ru Le problème peut également être résolu par un autre moyen.
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 "Afrique" | 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 compté les statistiques, et les responsables ont obtenu les données nécessaires pour travailler !
3. Troisième étape
La troisième étape est quelque peu similaire à la première — il faut également réparer le service chaleureux et convivial, mais tout est plus compliqué que dans la première tâche.
3.1. Faits intéressants
Au cours des 15 premières minutes, trois joueurs ont trouvé la première clé, et 2 heures et 20 minutes après le début de l'étape, notre vainqueur a réussi à accomplir la tâche.
3.2. Tâche
Vous avez commencé à travailler dans 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 existant, arguant que pour la redondance du système, il fallait installer les disques en certains ensembles. Malheureusement, quelques semaines après leur installation, l'ingénieur est parti en vacances en Inde et n'est jamais revenu.
Pendant plusieurs années, le serveur a fonctionné sans interruption, mais il y a quelques jours, le réseau de l'entreprise a été piraté. Selon les instructions, le personnel de sécurité a extrait les disques du serveur et vous les a envoyés. Pendant le transport, l'un des disques a été perdu de façon irréversible.
Il est nécessaire de restaurer le fonctionnement de la Wiki, en priorité le contenu des pages Wiki. Un certain morceau de texte, qui se trouvait sur l'une des pages de cette Wiki, est le mot de passe du serveur 1C et est urgent pour le débloquer.
De plus, il y avait quelque part sur les pages de la Wiki ou ailleurs des mots de passe pour le serveur de logs et le serveur de vidéosurveillance, qui doivent également être récupérés, car sans eux, l'enquête sur l'incident est impossible. Ils attendent toujours une résolution rapide de la question !
3.3. Solution
1. Nous essayons de démarrer alternativement avec les disques que nous avons et recevons le même message partout :
Aucun support d'amorçage trouvé ! Système arrêté
Nous devons démarrer d'un support. Encore une fois, le démarrage depuis un Live CD/DVD (Dépannage -> Sauvetage) nous sauve. Lors du démarrage, nous essayons de trouver la partition de démarrage, mais nous ne la trouvons pas et tombons dans le shell. Nous essayons d'étudier ce qu'il en est des disques. Il est connu qu'il y en a trois. Les outils pour cela sont plus nombreux dans la version 7 de CentOS, où il y a les commandes blkid ou lsblk, qui nous montrent toutes les informations sur les disques.
Comment et que faisons-nous :
$ ls /dev/sd*Il est immédiatement évident que
/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий моментNous montons sdb1, et il est clair que c'est la partition de démarrage de CentOS 6.
$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1Évidemment, nous allons dans la partition grub et y trouvons la première clé — James191955Gosling dans un fichier inhabituel.
2. Nous étudions pvs et lvs, car nous travaillons avec LVM. Nous voyons qu'il devrait y avoir 2 volumes physiques, l'un d'eux est introuvable et se plaint d'un uid perdu. Nous voyons qu'il devrait y avoir 2 volumes logiques : root et swap, tandis que root est partiellement perdu (attribut P pour le volume). Il n'est pas possible de le monter, ce qui est dommage ! Il nous est très nécessaire.
Il y a encore 2 disques, nous regardons ces derniers, les assemblons et les montons :
$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127 /mnt/md127 Nous regardons, il est clair que c'est la partition de démarrage de CentOS 6 et un doublon de ce qui est déjà présent sur /dev/sdb1, et ici à nouveau la même clé — DennisBMacAlistairCRitchie !
Voyons comment il est assemblé /dev/md127.
$ mdadm --detail /dev/md127
Nous voyons qu'il aurait dû être assemblé à partir de 4 disques, il a été assemblé à partir de deux /dev/sda1 et /dev/sdc1, ils auraient dû être les numéros 2 et 4 dans le système. Nous supposons que nous pouvons également assembler un tableau à partir de /dev/sda2 et /dev/sdc2 . Il est incompréhensible pourquoi il n'y a pas de métadonnées sur eux, mais cela est de la responsabilité de l'administrateur qui est quelque part à Goa. Nous supposons qu'il devrait y avoir un RAID10 ici, bien qu'il y ait des options. Nous assemblons :
$ 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 assemblé le volume physique qui nous manquait auparavant.
Le lvroot a été réparé, nous le montons, mais d'abord nous activons le VG :
$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot
Et tout y est, y compris la clé dans le répertoire personnel root — /root/sweet.
3. Essayons tout de même de faire revivre notre serveur afin qu'il démarre correctement. Tous les volumes logiques de notre /dev/md0 (où nous avons tout trouvé) sont transférés dans /dev/sdb2, où le serveur fonctionnait à l'origine.
$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0Nous éteignons le serveur, retirons les disques 1 et 3, laissons le deuxième, et démarrons avec un Live CD/DVD en mode Rescue. Nous trouvons la partition de démarrage et restaurons le chargeur de démarrage dans grub :
root (hd0,0)
setup (hd0)
Nous retirons le disque de démarrage et démarrons avec succès, mais le site ne fonctionne pas.
4. Il y a deux options pour démarrer le site : configurer Apache à partir de zéro ou utiliser nginx déjà configuré avec php-fpm :
$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start
Enfin, il faut démarrer MySQL :
$ /etc/init.d/mysqld start Il ne démarre pas, et le mystère se cache dans /var/log/mysql. Une fois que vous aurez résolu le problème avec MySQL, le site fonctionnera, et sur la page d'accueil, il y aura une clé — RichardGCCMatthewGNUStallman ! Maintenant nous avons accès à 1C et les employés pourront recevoir leur salaire. Et comme d'habitude, il y a beaucoup de travail à faire pour établir l'infrastructure et la sécurité dans l'entreprise.
Nous pouvons également partager à nouveau la liste de livres qui ont aidé nous et nos participants à nous préparer pour le jeu : .
Merci d'avoir été avec nous ! Suivez les annonces des prochains jeux !
Source : habr.com
