Linux Quest. Félicitations aux gagnants et discutez de la résolution des problèmes



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

  • La première place a été prise par Alexander Teldekov.
    Alexander s'est dit qu'il est l'administrateur système le plus typique. Vit à Volgograd, administre divers systèmes de type Unix depuis vingt ans. Géré pour travailler dans les fournisseurs Internet, banque, intégrateur de système. Maintenant, il travaille à distance dans une petite entreprise, il est engagé dans une infrastructure cloud pour un grand client étranger. Aime lire, écouter de la musique. A propos du jeu, Alexander a dit qu'il aimait le jeu dans son ensemble, il aime ces puzzles. Dans l'une des entreprises à l'interview, j'étais engagé dans une entreprise similaire à Hackerrank, c'était intéressant.
  • Deuxième place - Roman Suslov.
    Un roman de Moscou. Il a 37 ans. Il travaille comme ingénieur Linux / Unix chez Jet Infosystems. Pour le travail, je dois administrer et dépanner les systèmes Linux / Unix + SAN. Les intérêts sont très différents: systèmes Linux, programmation, rétro-ingénierie, sécurité de l'information, Arduino. À propos du jeu, Roman a noté qu'il aimait généralement le jeu. «J'ai un peu fléchi mon gyrus et j'ai été distrait de la vie quotidienne grise du travail quotidien. :) Je voudrais plus de tâches, sinon je n'ai pas eu le temps de voir comment le jeu était déjà terminé. "
  • Le troisième est alex3d.
    Alex vit à Moscou, est engagé dans le développement de logiciels. "Merci pour le concours, c'était intéressant de vérifier vos compétences google-fu."

Aussi dans le classement des 10 meilleurs joueurs:

  • Yevgeniy saldayev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo klets

Nous comprenons qu'il existe de nombreuses options pour résoudre tous nos problèmes, l'une des solutions possibles est décrite ci-dessous.

1. La première étape


Nous l'avons appelé «Êtes-vous sûr de l'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 jeu, et dans la première heure, nous avons eu trois dirigeants qui ont fait face à la tâche.

1.2. Tâche


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

Une femme de ménage a essuyé le câble d'alimentation de l'armoire du serveur. Le courant est rétabli, mais un site Web très important ne fonctionne toujours pas. Le site Web est important car l'entreprise n'est pas très préoccupée par la sécurité des informations, et sur la page principale de celui-ci, vous pouvez trouver le mot de passe administrateur de l'ordinateur du PDG en texte clair.

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. La rumeur veut qu'il y ait des clés sur cette machine qui pourraient nous aider à décrypter la sauvegarde des documents comptables.

Tout le monde attend une solution rapide au problème!

1.3. Solution


1. Tout d'abord, vous devez changer le mot de passe root dans la machine virtuelle pour y accéder. Au démarrage, nous remarquons qu'il s'agit du serveur Ubuntu 16.04.

Pour réinitialiser le mot de passe root, nous redémarrons la machine, au démarrage, lorsque le menu grub s'affiche, passez à l'édition de l'élément Ubuntu avec le bouton «e». Nous éditons la ligne linux, ajoutons init=/bin/bash à la fin. On charge via Ctrl + x, on obtient bash. Remontez la racine 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 dit que le serveur web ne fonctionne pas pour nous, nous regardons:

 $ 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. Nous regardons la configuration:

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

Il y a aussi une clé - StevenPaulSteveJobs.

Nous vérifions le chemin /usr/share/WordPress - ce n'est pas le cas, mais il y a /usr/share/wordpress . Nous corrigeons la configuration et redémarrons Apache.

 $ systemctl restart apache2 

3. Nous réessayons, nous obtenons une 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) 

Quelle est la question? Il faut comprendre. Pour ce faire, vous devez accéder à MySQL, la procédure à suivre est décrite dans la documentation . L'un des points de la documentation recommande d'écrire l'option skip-grant-tables dans /etc/mysql/mysql.conf.d/mysqld.cnf . Voici également la clé - AugustaAdaKingByron.

Nous fixons les droits de l'utilisateur 'wp'@'localhost' . Nous démarrons MySQL, le rendons accessible sur le réseau, en commentant l'option skip-networking dans la configuration.

4. Après les actions entreprises, le serveur Web démarre, mais le site ne fonctionne toujours pas,

 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 corrigeons les droits sur le fichier.

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

Nous rafraîchissons 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 heureux et vous avez beaucoup de travail à faire pour établir l'infrastructure, les sauvegardes et la sécurité dans l'entreprise.

2. La 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 et où et en quelles quantités vont. Nous avons trouvé un cas que tous les ingénieurs de la vie peuvent rencontrer sous une forme ou une autre.

2.1. Faits intéressants


Un de nos joueurs a entré la bonne clé dans les 10 premières minutes du jeu, et dans la première heure, nous avons eu un leader qui a fait face à la tâche.

2.2. Tâche


Vous êtes allé travailler pour l'entreprise, les managers sont venus vers vous et ont demandé à qui étaient envoyées les lettres d'Afrique. Vous devez y créer les 21 meilleures adresses de destinataires. Les premières lettres des adresses des destinataires sont la clé. Une chose: le serveur de messagerie via lequel les lettres ont été envoyées ne se charge pas. Tout le monde attend une solution rapide au problème!

2.3. Solution


1. Le serveur n'est pas chargé en raison de la partition de swap inexistante dans fstab, au démarrage, le système tente de le monter et se bloque. 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, éditez /etc/fstab . Ici, nous trouvons la première clé - GottfriedWilhelm11646Leibniz!

Créez 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 changeons et allons avec succès au serveur, mais il passe immédiatement au redémarrage. Le serveur est surchargé à une vitesse telle qu'il n'y a pas de temps pour même regarder attentivement tous les journaux. Comment comprendre ce qui se passe?

Encore une fois, nous démarrons à partir de livecd, étudions attentivement les journaux du système et juste au cas où nous regardions dans des couronnes, depuis une telle fréquence. Là, nous trouvons le problème et la deuxième clé est Alan1912MathisonTuring!

Il est nécessaire de supprimer ou de commenter la ligne echo b > /proc/sysrq-trigger dans /etc/crontab .

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

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 façons: en utilisant des utilitaires de filtrage de texte et en utilisant des scripts dans divers langages de programmation.

Pour commencer, nous obtenons simplement les paires «IP expéditeur - destinataire» du mail log /var/log/maillog (construisons un tableau des destinataires email - IP sender). 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 de la base de données des adresses africaines, nous examinons les meilleures 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 d'en haut se distinguent clairement par le nombre de lettres. Si vous saluez les adresses IP des expéditeurs qui ont été envoyés aux adresses de ce top-3, vous pouvez voir la nette prédominance 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 165 

La plupart des réseaux 105/8, 41/8, 196 / 8,197 / 8 sont attribués par AFRINIC - l'un des cinq bureaux d'enregistrement Internet régionaux qui distribuent les ressources Internet. AFRINIC distribue l'espace d'adressage en Afrique. Et 41/8 fait complètement 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 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».

La clé correcte est LinusBenedictTorvalds.

La chaîne résultante contient une faute de frappe par rapport à la clé correcte en 3 caractères extrêmes. Cela est dû au fait que les réseaux que nous avons choisis ne sont pas entièrement attribués aux pays africains et à la façon dont les e-mails sont distribués par les adresses IP dans notre journal.

Avec une clarification suffisante des plus grands réseaux alloués aux pays africains, vous pouvez obtenir la réponse exacte:

 $ 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 d'une autre manière.
Téléchargez MaxMind, décompressez et les trois équipes 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 compté les statistiques et les managers ont obtenu 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 lampe chaude, mais c'est plus difficile 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 20 minutes après le début de l'étape, notre vainqueur a terminé la tâche.

3.2. Tâche


Vous êtes allé travailler dans une entreprise où tous les documents de l'entreprise sont stockés sur le 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 tolérance aux pannes du système, il est nécessaire de placer des disques dans certaines baies. Malheureusement, quelques semaines après leur installation, l'ingénieur est allé se reposer en Inde et n'est pas revenu.

Pendant plusieurs années, le serveur a fonctionné sans échec, mais il y a quelques jours le réseau de l'entreprise a été piraté. Selon les instructions, les agents de sécurité ont retiré les disques du serveur et vous les ont envoyés. Pendant le transport, un disque a été irrémédiablement perdu.

Vous devez restaurer le wiki, tout d'abord, le contenu des pages wiki est intéressant. Un morceau de texte qui se trouvait sur l'une des pages de ce wiki est un mot de passe provenant d'un serveur 1C et est urgent pour le déverrouiller.

De plus, quelque part sur les pages wiki ou ailleurs, il y avait des mots de passe du serveur de journaux et du serveur de surveillance vidéo, qui sont également souhaitables à récupérer, sans eux, il est impossible d'enquêter sur l'incident. Comme toujours, ils sont attendus d'une solution opérationnelle au problème!

3.3. Solution


1. Nous essayons de démarrer à tour de rôle à partir des disques que nous avons et partout nous obtenons le même message:

 No bootable medium found! System halted 

Il est nécessaire de démarrer à partir de quelque chose. Récupère à nouveau le démarrage à partir d'un CD / DVD Live (Dépannage -> Sauvetage). Lors du chargement, nous essayons de trouver la partition de démarrage, nous ne la trouvons pas, nous entrons dans le shell. Nous essayons d'apprendre quoi et comment avec les disques. On sait qu'il y en a trois. Il y a plus d'outils pour cela dans la 7ème version de CentOS, où il y a des lsblk blkid ou lsblk qui nous montrent toutes les informations sur les disques.

Comment et quoi faire:

 $ ls /dev/sd* 

Il est immédiatement clair que

 /dev/sdb1 - ext4 /dev/sdb2 -  lvm /dev/sda1  /dev/sdc1 -   /dev/sda2  /dev/sdc2 -         

Montez 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 en travaillant avec LVM. On voit qu'il devrait y avoir 2 volumes physiques, l'un n'est pas localisé et jure sur le uid perdu. On voit qu'il devrait y avoir logiquement 2 volumes: root et swap, tandis que root est partiellement perdu (l'attribut P du volume). Le montage ne fonctionne pas, mais désolé! Nous avons vraiment besoin de lui.

Il y a 2 autres disques, regardez-les, assemblez et montez:

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

Nous regardons, il est clair qu'il s'agit de la partition de démarrage CentOS 6 et d'une prise de ce qui est déjà sur /dev/sdb1 , et là encore la même clé est James191955Gosling!

Nous regardons comment /dev/md127 .

 $ mdadm --detail /dev/md127 

Nous voyons qu'il devait être assemblé à partir de 4 disques, assemblés à partir de deux /dev/sda1 et /dev/sdc1 , ils devraient être les numéros 2 et 4 dans le système. Nous supposons que vous pouvez également créer un tableau à partir de /dev/sda2 et /dev/sdc2 . 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 est 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 constatons que nous avons collecté un volume physique, ce qui nous manquait auparavant.

Nous avons immédiatement corrigé lvroot, le monté, mais d'abord activé VG:

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

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

3. Néanmoins, nous essayons de relancer notre serveur pour qu'il démarre normalement. Tout le volume logique c de notre /dev/md0 (où nous avons tout) est glissé vers /dev/sdb2 , où tout le serveur fonctionnait initialement.

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

Nous éteignons le serveur, supprimons 1 et 3 disques, laissons le second, démarrons à partir du Live CD / DVD dans Rescue. Nous trouvons la section de démarrage, restaurez le chargeur de démarrage dans grub:

 root (hd0,0) setup (hd0) 

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

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

 $ /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 solution se trouve dans /var/log/mysql . Dès que vous aurez résolu le problème avec MySQL, le site fonctionnera, il y aura une clé sur la page principale - RichardGCCMatthewGNUStallman! Maintenant, nous avons accès à 1C, et les employés pourront être payés. Et comme toujours, vous avez beaucoup de travail à faire pour construire l'infrastructure et la sécurité dans l'entreprise.

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

Merci d'être avec nous! Suivez les annonces des prochains jeux!

Source: https://habr.com/ru/post/fr447222/


All Articles