Ricerca su Linux. Congratulazioni ai vincitori e raccontaci le soluzioni ai compiti

Ricerca su Linux. Congratulazioni ai vincitori e raccontaci le soluzioni ai compiti

Il 25 marzo abbiamo aperto le iscrizioni per Ricerca su Linux, questo è un gioco per amanti ed esperti del sistema operativo Linux. Alcune statistiche: 1117 persone si sono registrate al gioco, 317 di loro hanno trovato almeno una chiave, 241 hanno completato con successo il compito della prima fase, 123 la seconda e 70 hanno superato la terza fase. Oggi il nostro gioco è giunto al termine e ci congratuliamo con i nostri vincitori!

  • Il primo posto è andato ad Alexander Teldekov.
    Alexander ha detto a se stesso di essere l'amministratore di sistema più tipico. Vive a Volgograd, amministra vari sistemi simili a Unix da circa vent'anni. Sono riuscito a lavorare presso provider Internet, una banca e un integratore di sistema. Ora lavora da remoto in una piccola azienda, lavorando sull'infrastruttura cloud per un grande cliente straniero. Ama leggere e ascoltare musica. Riguardo al gioco, Alexander ha detto che gli è piaciuto il gioco nel suo insieme, adora questi compiti. Durante un colloquio presso una delle aziende ho fatto qualcosa di simile a Hackerrank, è stato interessante.
  • Secondo posto: Roman Suslov.
    Un romanzo da Mosca. Ha 37 anni. Lavora come ingegnere Linux/Unix presso Jet Infosystems. Al lavoro devo amministrare e risolvere i problemi dei sistemi Linux/Unix + SAN. Gli interessi sono vari: sistemi Linux, programmazione, reverse engineering, sicurezza informatica, Arduino. Informazioni sul gioco Roman ha notato che il gioco nel complesso gli è piaciuto. “Ho stimolato un po’ il cervello e mi sono preso una pausa dalla grigia quotidianità del lavoro quotidiano. 🙂 Vorrei avere più compiti, altrimenti prima che avessi il tempo di assaggiarli, il gioco era già finito.”
  • Terzo: alex3d.
    Alex vive a Mosca e lavora nello sviluppo di software. "Grazie per il concorso, è stato interessante mettere alla prova le mie abilità con google-fu."

Anche nella classifica dei 10 migliori giocatori:

  • Evgenij Saldaev
  • Markel Mokhnachevskij
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Comprendiamo che esistono molte opzioni per risolvere tutti i nostri problemi; alcune delle possibili soluzioni sono descritte di seguito.

1. Prima fase

L'abbiamo chiamato "Sei davvero un amministratore?", poiché il compito era abbastanza semplice: riparare un servizio di lampade calde.

1.1. Fatti interessanti:

Due giocatori hanno trovato la prima chiave nei primi 15 minuti di gioco e nella prima ora abbiamo avuto tre leader che hanno completato l'attività.

1.2. Esercizio

Sei andato a lavorare in un'azienda dove per molto tempo non esisteva uno specialista competente in informatica. Prima di iniziare a mettere le cose in ordine, è necessario risolvere il problema scottante che blocca il lavoro dell'ufficio.

La donna delle pulizie ha afferrato il cavo di alimentazione del mobiletto del server con uno straccio. La corrente è stata ripristinata, ma un sito molto importante continua a non funzionare. Il sito web è importante perché l'azienda non è molto attenta alla sicurezza delle informazioni, e nella pagina principale di questo si può trovare in chiaro la password dell'amministratore per il computer dell'amministratore delegato.

L'altro giorno è stata cambiata la password, ma tutti hanno dimenticato quella nuova, il direttore non può lavorare. Si dice che su questa macchina ci fossero più chiavi che potrebbero aiutarci a decifrare la copia di backup dei documenti contabili.

Tutti si aspettano una pronta risoluzione del problema!

1.3. decisione

1. Prima di tutto, è necessario modificare la password di root sulla macchina virtuale per potervi accedere. All'avvio, notiamo che si tratta di Ubuntu 16.04 Server.

Per reimpostare la password di root riavviamo la macchina, in fase di caricamento, nel momento in cui viene visualizzato il menu di grub, andiamo a modificare la voce Ubuntu con il pulsante “e”. Modifica la riga linux, aggiungila alla fine init=/bin/bash. Carichiamo tramite Ctrl+x, otteniamo una bash. Rimontare il root con rw, cambiare la password:

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

Non dimenticare la sincronizzazione, riavvia.

2. La condizione dice che il nostro server web non funziona, guarda:

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

Cioè, infatti, Apache è in esecuzione, ma risponde con il codice 404. Diamo un'occhiata alla configurazione:

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

C'è anche una chiave qui: StevenPaulSteveJobs.

Controllo del percorso /usr/share/WordPress - non esiste una cosa del genere, ma c'è /usr/share/wordpress. Modifica la configurazione e riavvia Apache.

$ systemctl restart apache2

3. Riprova, viene visualizzato l'errore:

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

Il database non è in esecuzione?

$ systemctl status mysql
Active: active (running)

Qual è il problema? Dobbiamo capirlo. Per fare ciò, è necessario accedere a MySQL, come descritto in documentazione. Uno dei punti della documentazione consiglia di registrare l'opzione skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. C'è anche una chiave qui: AugustaAdaKingByron.

Correzione dei diritti utente 'wp'@'localhost'. Lanciamo MySQL, lo rendiamo accessibile tramite la rete, commentando l'opzione nel file config skip-networking.

4. Dopo questi passaggi, il server web si avvia, ma il sito continua a non funzionare perché

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

Modifichiamo i diritti sul file.

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

Aggiorniamo la pagina, andiamo al sito e troviamo la chiave: BjarneStroustrup! Abbiamo trovato tutte e tre le chiavi, il nostro direttore può lavorare, abbiamo decriptato i file contabili. Tutti sono contenti e hai molto lavoro davanti a te per impostare l'infrastruttura, i backup e la sicurezza in azienda.

2. Seconda fase

Era necessario risolvere il problema della raccolta delle analisi. Tutti amano l'analisi: chi la usa, dove e in quali quantità. Abbiamo ideato un caso che tutti gli ingegneri potrebbero incontrare in un modo o nell'altro nella vita.

2.1. Fatti interessanti

Uno dei nostri giocatori ha inserito la chiave corretta entro i primi 10 minuti di gioco ed entro la prima ora abbiamo avuto un leader che ha completato il compito.

2.2. Esercizio

Sei andato a lavorare in azienda, i manager sono venuti da te e ti hanno chiesto di scoprire a chi venivano inviate le lettere dall'Africa. Dobbiamo costruire i primi 21 indirizzi dei destinatari in base ad essi. La chiave è costituita dalle prime lettere degli indirizzi dei destinatari. Una cosa: il server di posta attraverso il quale sono state inviate le lettere non si carica. Tutti si aspettano una pronta risoluzione del problema!

2.3. decisione

1. Il server non si avvia a causa di una partizione di swap inesistente in fstab; durante il caricamento il sistema tenta di montarlo e si blocca. Come avviare?

Scarica l'immagine, abbiamo scaricato CentOS 7, avvia da Live CD/DVD (Risoluzione dei problemi -> Rescue), monta il sistema, modifica /etc/fstab. Troviamo immediatamente la prima chiave: GottfriedWilhelm11646Leibniz!

Crea scambio:

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

2. Come sempre, non esiste una password, è necessario modificare la password di root sulla macchina virtuale. Lo abbiamo già fatto nel primo compito. Modifichiamo e accediamo con successo al server, ma si riavvia immediatamente. Il server è sovraccaricato a una velocità tale che non hai nemmeno il tempo di guardare attentamente tutti i log. Come capire cosa sta succedendo?

Ancora una volta avviamo dal livecd, studiamo attentamente i log di sistema e, per ogni evenienza, esaminiamo il cron, poiché tale periodicità. Lì troviamo il problema e la seconda chiave: Alan1912MathisonTuring!

bisogno in /etc/crontab eliminare o commentare la riga echo b > /proc/sysrq-trigger.

3. Dopodiché il server è stato caricato e puoi completare il compito dei gestori: "Quali sono gli indirizzi in Africa?" Queste informazioni sono generalmente disponibili al pubblico. Potete trovare queste informazioni su Internet usando le frasi “indirizzo ip africa”, “database geoip”. Per risolvere il problema è possibile utilizzare le banche dati di distribuzione degli indirizzi disponibili gratuitamente (geoip). Abbiamo utilizzato il database come standard MaxMindGeoLite2, disponibile con licenza Creative Commons Attribuzione-Condividi allo stesso modo 4.0.

Proviamo a risolvere il nostro problema utilizzando solo le utilità di sistema Linux, ma in generale può essere risolto in molti modi: utilizzando utilità di filtraggio del testo e utilizzando script in vari linguaggi di programmazione.

Per cominciare, otterremo semplicemente le coppie “IP mittente-destinatario” dal registro della posta /var/log/maillog (creiamo una tabella dei destinatari delle email - IP del mittente). Questo può essere fatto con il seguente comando:

$ 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

E prima di continuare con la compilazione di un database di indirizzi africani, diamo un'occhiata ai principali indirizzi IP dei mittenti.

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

Tra tutti spiccano nettamente per numero di lettere i primi tre destinatari dall'alto. Se raccogli gli indirizzi IP dei mittenti che hanno inviato agli indirizzi di questi primi 3, noterai una chiara predominanza di alcune reti:

$ 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 maggior parte delle reti 105/8, 41/8, 196/8,197/8 sono assegnate ad AFRINIC, uno dei cinque registrar Internet regionali che distribuiscono risorse Internet. AFRINIC distribuisce spazi di indirizzi in tutta l'Africa. E 41/8 si riferisce completamente ad AFRINIC.

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

Pertanto, la risposta al problema è, in effetti, nel registro stesso.

$ 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 questo punto otteniamo la stringa “LinuxBenedictTorvadst”.

Chiave corretta: "LinusBenedictTorvalds".

La stringa risultante contiene un errore di battitura in relazione alla chiave corretta negli ultimi 3 caratteri. Ciò è dovuto al fatto che le reti da noi selezionate non sono interamente dedicate ai paesi africani e al modo in cui le email vengono distribuite per indirizzi IP nel nostro log.

Specificando sufficientemente le reti più grandi assegnate ai paesi africani, si può ottenere una risposta precisa:

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

Il problema può essere risolto anche in un altro modo.
Scarica MaxMind, decomprimilo e anche i prossimi tre comandi risolvono il nostro problema.

$ 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

In un modo o nell'altro, alla fine abbiamo calcolato le statistiche e i manager hanno ricevuto i dati di cui avevano bisogno per lavorare!

3. Terza fase

La terza fase è in qualche modo simile alla prima: devi anche correggere il servizio della lampada calda, ma tutto è più complicato rispetto al primo compito.

3.1. Fatti interessanti

Nei primi 15 minuti, tre giocatori hanno trovato la prima chiave; 2 ore e 20 minuti dopo l'inizio della tappa, il nostro vincitore ha completato l'operazione.

3.2. Esercizio

Sei andato a lavorare per un'azienda in cui tutti i documenti aziendali sono archiviati su un server Wiki interno. L'anno scorso, un ingegnere ha ordinato 3 nuovi dischi per il server oltre a uno esistente, sostenendo che affinché il sistema fosse tollerante agli errori, i dischi dovevano essere posizionati in una sorta di array. Sfortunatamente, poche settimane dopo l’installazione, l’ingegnere andò in vacanza in India e non tornò più.

Il server ha funzionato senza problemi per diversi anni, ma un paio di giorni fa la rete dell’azienda è stata violata. Secondo le istruzioni, il personale di sicurezza ha rimosso i dischi dal server e te li ha inviati. Durante il trasporto un disco andò irrimediabilmente perduto.

Dobbiamo ripristinare la funzionalità del Wiki; prima di tutto ci interessa il contenuto delle pagine wiki. Un certo pezzo di testo che si trovava su una delle pagine di questa wiki è la password per il server 1C ed è urgentemente necessario per sbloccarlo.

Inoltre, da qualche parte nelle pagine wiki o altrove si trovavano le password per il server di registro e per il server di videosorveglianza, che sarebbe anche auspicabile recuperare; senza di esse l'indagine sull'incidente è impossibile. Come sempre ci aspettiamo una pronta risoluzione del problema!

3.3. decisione

1. Proviamo ad avviare uno per uno dai dischi che abbiamo e ovunque riceviamo lo stesso messaggio:

No bootable medium found! System halted 

Devi avviare da qualcosa. L'avvio da un Live CD/DVD (Risoluzione dei problemi -> Rescue) aiuta ancora. Durante il caricamento proviamo a trovare la partizione di avvio, non riusciamo a trovarla, finiamo nella shell. Stiamo cercando di studiare cosa e come fare con i dischi. È noto che ce ne sono tre. Ci sono più strumenti per questo nella settima versione di CentOS, dove ci sono i comandi blkid o lsblk, che ci mostrano tutte le informazioni sui dischi.

Come e cosa facciamo:

$ ls /dev/sd*

È subito chiaro che

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

Montiamo sdb1, è chiaro che questa è la partizione di boot di CentOS 6.

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

Ovviamente andiamo nella sezione grub e lì troviamo la prima chiave: James191955Gosling in un file insolito.

2. Studiamo pvs e lvs, poiché lavoriamo con LVM. Vediamo che dovrebbero esserci 2 volumi fisici, uno non si trova e lamenta una perdita di fluido. Vediamo che dovrebbero esserci 2 volumi logici: root e swap, mentre root è parzialmente perso (l'attributo P del volume). Non è possibile montarlo, peccato! Abbiamo davvero bisogno di lui.

Ci sono altri 2 dischi, li guardiamo, li assembliamo e li montiamo:

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

Guardiamo, possiamo vedere che questa è la partizione di avvio di CentOS 6 e un duplicato di ciò che è già attivo /dev/sdb1, e anche qui la stessa chiave: DennisBMacAlistairCRitchie!
Vediamo come è assemblato /dev/md127.

$ mdadm --detail /dev/md127

Vediamo che avrebbe dovuto essere assemblato da 4 dischi, ma è stato assemblato da due /dev/sda1 и /dev/sdc1, avrebbero dovuto essere i numeri 2 e 4 nel sistema. Lo assumiamo da /dev/sda2 и /dev/sdc2 Puoi anche raccogliere un array. Non è chiaro il motivo per cui non ci siano metadati su di loro, ma questo è sulla coscienza dell'amministratore, che si trova da qualche parte a Goa. Partiamo dal presupposto che dovrebbe esserci RAID10, sebbene ci siano delle opzioni. Raccogliamo:

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

Guardiamo blkid, pvs, lvs. Scopriamo di aver raccolto un volume fisico che prima ci mancava.

lvroot è stato subito riparato, lo montiamo, ma prima attiviamo VG:

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

E c'è tutto, inclusa la chiave nella directory home root - /root/sweet.

3. Stiamo ancora cercando di ripristinare il nostro server in modo che si avvii normalmente. Tutti i volumi logici dal ns /dev/md0 (dove abbiamo trovato tutto) trascinalo su /dev/sdb2, dove inizialmente funzionava l'intero server.

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

Spegniamo il server, rimuoviamo i dischi 1 e 3, lasciamo il secondo, avviamo dal Live CD/DVD in Rescue. Trova la partizione di avvio e ripristina il bootloader in grub:

root (hd0,0)
setup (hd0)

Strappiamo il disco di avvio e lo carichiamo correttamente, ma il sito non funziona.

4. Esistono due opzioni per avviare un sito Web: configurare Apache da zero o utilizzare nginx con php-fpm già configurato in anticipo:

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

Infine, devi avviare MySQL:

$ /etc/init.d/mysqld start

Non si avvierà e la risposta sta dentro /var/log/mysql. Non appena risolvi il problema con MySQL, il sito funzionerà, nella pagina principale ci sarà una chiave: RichardGCCMatthewGNUStallman! Ora abbiamo accesso a 1C e i dipendenti potranno ricevere i loro stipendi. E come sempre, hai molto lavoro da fare per stabilire l'infrastruttura e la sicurezza in azienda.

Possiamo anche condividere ancora una volta un elenco di libri che hanno aiutato noi e i nostri partecipanti a prepararci per il gioco: linux.mail.ru/books.

Grazie per essere con noi! Restate sintonizzati per gli annunci dei prossimi giochi!

Fonte: habr.com

Aggiungi un commento