Linux Quest. Congratulazioni ai vincitori e presentiamo le soluzioni alle sfide

Linux Quest. Congratulazioni ai vincitori e presentiamo le soluzioni alle sfide

Il 25 marzo abbiamo aperto le iscrizioni per Linux Quest, un gioco per gli appassionati e gli esperti del sistema operativo Linux. Alcuni dati: si sono registrate 1117 persone al gioco, di cui 317 hanno trovato almeno una chiave, 241 hanno completato con successo il primo stage, 123 il secondo e 70 hanno superato il terzo stage. Oggi il nostro gioco è giunto al termine e congratuliamo i nostri vincitori!

  • Il primo posto è andato ad Alexander Teldikov.
    Alexander ha commentato di essere un tipico amministratore di sistema. Vive a Volgograd e amministra diversi sistemi Unix-like da circa vent'anni. Ha avuto esperienze presso provider internet, banche e integratori di sistema. Attualmente lavora in remoto per una piccola azienda, occupandosi di infrastrutture cloud per un importante cliente straniero. Ama leggere e ascoltare musica. Riguardo al gioco, Alexander ha detto che gli è piaciuto nel complesso e che ama questo tipo di sfide. In una delle aziende durante un colloquio aveva affrontato qualcosa di simile a Hackerrank, ed è stato interessante.
  • Il secondo posto va a Roman Suslov.
    Roman di Mosca. Ha 37 anni. Lavora come ingegnere Linux/Unix presso la "Infostystems Jet". Nel suo lavoro si occupa di amministrazione e troubleshooting dei sistemi Linux/Unix + SAN. Ha interessi molto vari: sistemi Linux, programmazione, reverse engineering, sicurezza informatica, Arduino. Riguardo al gioco, Roman ha commentato che in generale gli è piaciuto. "Ho un po' allenato le mie capacità mentali e mi sono distratto dalla grigia routine quotidiana. 🙂 Mi sarebbero piaciuti più compiti, perché non sono riuscito a entrare nel ritmo prima che il gioco finisse."
  • Terzo — alex3d.
    Alex vive a Mosca e si occupa di sviluppo software. "Grazie per il contest, è stato interessante mettere alla prova la mia abilità in google-fu."

Altri nel ranking dei 10 migliori giocatori:

  • Yevgeniy Saldayev
  • Markel Mokhnachyovski
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Comprendiamo che ci sono molte soluzioni per affrontare i nostri problemi, qui di seguito sono descritte alcune possibili soluzioni.

1. Primo step

Lo abbiamo chiamato "Sei davvero un admin?", poiché il compito era piuttosto semplice: riparare un servizio caldo e accogliente.

1.1. Fatti interessanti:

Due giocatori hanno trovato la prima chiave nei primi 15 minuti di gioco, e nel primo ora abbiamo avuto tre leader che hanno completato il compito.

1.2. Compito

Sei entrato a far parte di un'azienda che per molto tempo non ha avuto un esperto di tecnologie informatiche. Prima di mettere ordine, è necessario risolvere un problema urgente che blocca il lavoro dell'ufficio.

La donna delle pulizie ha toccato il cavo di alimentazione del server con il mocio. L'alimentazione è stata ripristinata, ma un sito web molto importante continua a non funzionare. Questo sito è cruciale perché l'azienda non è molto attenta alla sicurezza informatica e sulla homepage si può trovare visibile la password dell'amministratore del computer del direttore generale.

Recentemente hanno cambiato la password, e nessuno si ricorda quella nuova, il direttore non può lavorare. Si vocifera che su questa macchina ci fossero anche delle chiavi che potrebbero aiutarci a decifrare il backup dei documenti contabili.

Tutti si aspettano una soluzione rapida al problema!

1.3. Soluzione

Innanzitutto, è necessario cambiare la password root sulla macchina virtuale per poter accedervi. All'avvio notiamo che si tratta di Ubuntu 16.04 Server.

Per reimpostare la password di root, riavviamo la macchina e, al momento della visualizzazione del menu grub, passiamo alla modifica della voce Ubuntu premendo il tasto «e». Modifichiamo la riga linux, aggiungendo alla fine init=/bin/bash. Avviamo tramite Ctrl+x e accediamo alla shell. Rimontiamo la radice in modalità rw e cambiamo la password:

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

Non dimentichiamo di fare sync e riavviamo.

2. Nella condizione è indicato che il nostro server web non funziona, verifichiamo:

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

Significa che in effetti Apache è avviato, ma risponde con un codice 404. Controlliamo la configurazione:

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

Qui si trova la chiave — StevenPaulSteveJobs.

Verifichiamo il percorso /usr/share/WordPress — non esiste, ma c'è /usr/share/wordpress. Correggiamo la configurazione e riavviamo Apache.

$ systemctl restart apache2

3. Proviamo di nuovo, otteniamo 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 è avviato?

$ systemctl status mysql
Active: active (running)

Qual è il problema? Dobbiamo indagare. Per fare ciò dobbiamo accedere a MySQL, come descritto in documentazione. Uno dei punti della documentazione ci consiglia di impostare l'opzione skip-grant-tables in /etc/mysql/mysql.conf.d/mysqld.cnf. Qui troviamo anche la chiave — AugustaAdaKingByron.

Correggiamo i permessi per l'utente 'wp'@'localhost'. Avviamo MySQL, rendendolo accessibile in rete, commentando nel file di configurazione l'opzione skip-networking.

4. Dopo aver eseguito queste operazioni, il server web si avvia, ma il sito non funziona ancora, poiché

Warning: require_once(/usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): impossibile aprire il flusso: Accesso negato in /usr/share/wordpress/wp-includes/template.php on line 562

Correggiamo i permessi del file.

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

Aggiorniamo la pagina, accediamo al sito e troviamo la chiave — BjarneStroustrup! Abbiamo trovato tutte e tre le chiavi, il nostro direttore può lavorare, abbiamo decrittato i file della contabilità. Tutti sono felici, e tu hai molto lavoro da fare per sistemare l'infrastruttura, i backup e la sicurezza dell'azienda.

2. Seconda fase

Era necessario risolvere il compito di raccolta analitica. Le analisi piacciono a tutti: chi e da dove e in che quantità visitano. Abbiamo inventato un caso con cui ogni ingegnere potrebbe imbattersi nella vita, in un modo o nell'altro.

2.1. Fatti interessanti

Uno dei nostri giocatori ha inserito la chiave corretta nei primi 10 minuti di gioco, e nel primo ora abbiamo avuto un leader che ha completato il compito.

2.2. Compito

Sei entrato al lavoro in azienda, e i manager ti hanno chiesto di trovare a chi sono stati inviati i messaggi dall'Africa. Devi costruire una classifica dei 21 indirizzi dei destinatari. Le prime lettere degli indirizzi sono la chiave. C'è però un problema: il server di posta attraverso cui sono stati inviati i messaggi non si avvia. Tutti stanno aspettando una soluzione rapida a questo problema!

2.3. Soluzione

1. Il server non si avvia a causa di una sezione swap mancante in fstab; durante l'avvio, il sistema tenta di montarlo e va in crash. Come possiamo avviarci?

Scarichiamo un'immagine, abbiamo scaricato CentOS 7, avviamo con Live CD/DVD (Troubleshooting -> Rescue), montiamo il sistema e modifichiamo /etc/fstab. Qui troviamo la prima chiave — GottfriedWilhelm11646Leibniz!

Creiamo lo swap:

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

2. Come sempre non ci sono password, dobbiamo cambiare la password di root sulla macchina virtuale. Abbiamo già fatto questo nel primo incarico. Cambiamo e accediamo con successo al server, ma si riavvia immediatamente. Il server si riavvia con tale rapidità che non riesci nemmeno a guardare tutti i log attentamente. Come possiamo capire cosa sta succedendo?

Stiamo di nuovo avviando il livecd, esaminando attentamente i log di sistema e controllando il cron, data la periodicità. Lì troviamo il problema e la seconda chiave — Alan1912MathisonTuring!

È necessario /etc/crontab rimuovere o commentare la riga echo b > /proc/sysrq-trigger.

3. Dopodiché, il server si è avviato e possiamo svolgere il compito dei manager: «Quali sono gli indirizzi dell'Africa?» Queste informazioni sono, in generale, pubbliche. Si possono trovare in rete cercando espressioni come «ip address africa», «geoip database». Per risolvere il compito si possono utilizzare database pubblicamente accessibili sulla distribuzione degli indirizzi (geoip). Come riferimento, abbiamo utilizzato il DB MaxMind GeoLite2, disponibile sotto licenza Creative Commons Attribution-ShareAlike 4.0.

Cerchiamo di risolvere il nostro compito utilizzando solo strumenti di sistema Linux, ma ci sono in realtà molti modi per farlo: utilizzando strumenti di filtraggio del testo e script in vari linguaggi di programmazione.

Iniziamo semplicemente ottenendo coppie «IP mittente — destinatario» dai log delle email /var/log/maillog (costruiremo una tabella email destinatari — IP 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 creazione del database degli indirizzi in Africa, diamo un'occhiata ai principali indirizzi IP dei mittenti.

$ 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

Tra tutti, i primi tre destinatari si distinguono chiaramente per numero di messaggi. Se facciamo un grep sugli indirizzi IP dei mittenti che hanno inviato ai top-3, possiamo notare una netta predominanza di determinate reti:

$ 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 maggior parte delle reti 105/8, 41/8, 196/8, 197/8 è assegnata a AFRINIC — uno dei cinque registri internet regionali che gestiscono la distribuzione delle risorse internet. AFRINIC distribuisce lo spazio degli indirizzi sul territorio africano. E 41/8 appartiene 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 log 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 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

A questo punto, otteniamo la stringa «LinuxBenedictTorvadst».

La chiave corretta è: «LinusBenedictTorvalds».

La stringa ottenuta contiene un errore rispetto alla chiave corretta negli ultimi 3 caratteri. Ciò è dovuto al fatto che le reti selezionate non sono completamente assegnate ai paesi africani e a come sono distribuite le email sugli indirizzi IP nel nostro log.

Con un'adeguata precisazione delle più importanti reti assegnate ai paesi africani, è possibile 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 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

Il compito può essere risolto anche in un altro modo.
Scarichiamo MaxMind, estraiamo e le seguenti tre comandi risolvono anche il nostro problema.

$ cat GeoLite2-Country-Locations-ru.csv | grep "Africa" | 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 conteggiato le statistiche e i manager hanno ottenuto i dati necessari per il loro lavoro!

3. Terza fase

La terza fase è simile alla prima: è necessario riparare il servizio a lampadina calda, ma è tutto più complesso rispetto al primo compito.

3.1. Fatti interessanti

Nei primi 15 minuti, tre giocatori hanno trovato la prima chiave, dopo 2 ore e 20 minuti dall'inizio della fase, il nostro vincitore ha completato il compito.

3.2. Compito

Sei entrato a lavorare in un'azienda dove tutti i documenti sono archiviati su un server interno Wiki. L'anno scorso, un ingegnere ha ordinato 3 nuovi dischi per il server, oltre a uno esistente, sostenendo che per la resilienza del sistema è necessario disporre i dischi in particolari array. Purtroppo, qualche settimana dopo la loro installazione, l'ingegnere è partito per una vacanza in India e non è tornato.

Per alcuni anni, il server ha funzionato senza intoppi, ma qualche giorno fa la rete aziendale è stata violata. Seguendo le istruzioni, il personale di sicurezza ha estratto i dischi dal server e li ha inviati a te. Durante il trasporto, un disco è andato irrimediabilmente perduto.

È necessario ripristinare la funzionalità di Wiki; è fondamentale recuperare il contenuto delle pagine wiki. Un certo pezzo di testo che si trovava su una delle pagine di questo wiki è la password per il server 1C e serve urgentemente per sbloccarlo.

Inoltre, su qualche pagina wiki o altrove c'erano password per il server dei log e per il server di videosorveglianza, che è preferibile recuperare, senza di esse è impossibile indagare sull'incidente. Come sempre, ci aspettiamo una soluzione tempestiva!

3.3. Soluzione

1. Proviamo a partire a turno dai dischi che abbiamo e ovunque riceviamo lo stesso messaggio:

Nessun supporto avviabile trovato! Sistema bloccato 

Dobbiamo avviare da qualche parte. Ancora una volta ci salva l'avvio da Live CD/DVD (Troubleshooting -> Rescue). All'avvio cerchiamo di trovare la partizione di avvio, non la troviamo e finiamo nella shell. Cerchiamo di capire cosa e come con i dischi. È noto che ce ne sono tre. Gli strumenti sono maggiormente disponibili nella settima versione di CentOS, dove ci sono comandi blkid o lsblk, che ci mostrano tutte le informazioni sui dischi.

Cosa facciamo:

$ ls /dev/sd*

È subito evidente che

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

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

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

Ovviamente procediamo nella cartella grub e 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 viene trovato e segnala un uid mancante. Dobbiamo avere 2 volumi logici: root e swap, mentre root è parzialmente perso (attributo P del volume). Non riusciamo a montarlo, peccato! Ci serve molto.

Ci sono anche 2 dischi, li esaminiamo, li raccogliamo e li montiamo:

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

Controlliamo, è chiaro che si tratta della partizione di avvio di CentOS 6 e di una copia di ciò che è già presente su /dev/sdb1, e qui c'è di nuovo la stessa chiave — DennisBMacAlistairCRitchie!
Controlliamo come è assemblato /dev/md127.

$ mdadm --detail /dev/md127

Vediamo che doveva essere assemblato da 4 dischi, si è assemblato con due /dev/sda1 e /dev/sdc1, dovevano essere i numeri 2 e 4 nel sistema. Supponiamo che da /dev/sda2 e /dev/sdc2 si possa assemblare un array. Non è chiaro perché non ci siano metadati, ma è responsabilità dell'amministratore, che si trova da qualche parte a Goa. Supponiamo che qui debba esserci RAID10, anche se ci sono delle opzioni. Assembliamo:

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

Controlliamo blkid, pvs, lvs. Scopriamo che abbiamo assemblato il volume fisico che ci mancava prima.

Subito si è sistemato lvroot, lo montiamo, ma prima attiviamo VG:

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

E lì c'è tutto, compreso la chiave nella home directory di root — /root/sweet.

3. Cerchiamo di riavviare il nostro server affinché parta correttamente. Tutti i volumi logici dal nostro /dev/md0 (dove abbiamo trovato tutto) vengono trasferiti in /dev/sdb2, dove originariamente funzionava l'intero server.

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

Spegniamo il server, rimuoviamo il disco 1 e 3, lasciando il secondo, e avviamo dal Live CD/DVD in modalità Rescue. Troviamo la partizione di avvio e ripristiniamo il bootloader in grub:

root (hd0,0)
setup (hd0)

Rimuoviamo il disco di avvio e riavviamo con successo, ma il sito non funziona.

4. Ci sono due opzioni per avviare il sito: configurare Apache da zero o utilizzare nginx già configurato in precedenza con php-fpm:

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

Infine, è necessario avviare MySQL:

$ /etc/init.d/mysqld start

Non si avvia, e la soluzione è nascosta in /var/log/mysql. Non appena risolvi il problema con MySQL, il sito funzionerà, sulla pagina principale troverai la chiave — RichardGCCMatthewGNUStallman! Ora abbiamo accesso a 1C e i dipendenti possono ricevere il salario. E tu hai sempre molto lavoro da fare per sistemare l'infrastruttura e la sicurezza in azienda.

Possiamo anche condividere nuovamente l'elenco dei libri che ci hanno aiutato e hanno aiutato i nostri partecipanti a prepararsi per il gioco: linux.mail.ru/books.

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

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster