
Il 25 marzo abbiamo aperto le registrazioni per , è un gioco per appassionati e esperti del sistema operativo Linux. Alcune statistiche: si sono registrate 1117 persone per il gioco, di cui 317 hanno trovato almeno una chiave, 241 hanno completato con successo il primo compito, 123 il secondo e 70 hanno superato il terzo compito. Oggi il nostro gioco è giunto al termine e congratuliamo i nostri vincitori!
- Il primo posto è stato conquistato da Aleksandr Teldikov.
Aleksandr ha detto di sé che è il tipico amministratore di sistema. Vive a Volgograd e gestisce vari sistemi Unix-like da circa vent'anni. Ha lavorato in provider di internet, banche, e integratori di sistemi. Attualmente lavora da remoto per una piccola azienda, occupandosi di infrastruttura cloud per un grande cliente straniero. Ama leggere e ascoltare musica. Riguardo al gioco, Aleksandr ha detto che nel complesso gli è piaciuto, gli piacciono questo tipo di sfide. In una delle aziende, durante un colloquio, ha svolto 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 per la società "Informatica Jet". Nella sua professione si occupa di amministrazione e risoluzione di problemi nei sistemi Linux/Unix + SAN. Ha interessi molto vari: sistemi Linux, programmazione, reverse engineering, sicurezza informatica, Arduino. Riguardo al gioco, Roman ha notato che gli è piaciuto nel complesso. «Ho un po' scaldato le mie sinapsi e mi sono distratto dalla grigia quotidianità del lavoro. 🙂 Mi sarebbe piaciuto avere più compiti, perché non ho fatto in tempo a entrare nel ritmo che il gioco era già finito». - Il terzo è alex3d.
Alex vive a Mosca e si occupa di sviluppo software. «Grazie per il contest, è stato interessante mettere alla prova la mia abilità con google-fu.»
Allo stesso modo, nella classifica dei 10 migliori giocatori:
- Yevgeniy Saldayev
- Markel Mokhnachevskiy
- Konstantin Konosov
- Pavel Sergeev
- Vladimir Bovaev
- Ivan Bubnov
- Pavlo Klets
Comprendiamo che ci sono molte soluzioni per tutti i nostri compiti, qui di seguito sono descritte alcune possibili soluzioni.
1. Primo livello
Lo abbiamo chiamato «Sei davvero un admin?», poiché il compito era piuttosto semplice: riparare un caldo e tradizionale servizio.
1.1. Fatti interessanti:
Due giocatori hanno trovato la prima chiave nei primi 15 minuti del gioco, e nel primo ora abbiamo avuto tre leader che hanno completato il compito.
1.2. Compito
Sei entrato a lavorare in un'azienda dove a lungo non c'era uno specialista competente in tecnologie dell'informazione. Prima di iniziare a sistemare le cose, bisogna risolvere un problema urgente che blocca il lavoro dell'ufficio.
La collaboratrice ha urtato il cavo di alimentazione del server con il moccio. L'alimentazione è stata ripristinata, ma un sito web molto importante continua a non funzionare. Il sito è di grande importanza perché l'azienda non è molto attenta alla sicurezza informatica e sulla pagina principale è possibile trovare pubblicamente la password dell'amministratore per il computer del direttore generale.
Di recente hanno cambiato la password, ma nessuno si ricorda di quella nuova, il direttore non riesce a lavorare. Si vocifera che su quella macchina c'erano anche delle chiavi che potrebbero aiutarci nella decifratura del backup dei documenti contabili.
Tutti aspettano una soluzione rapida al problema!
1.3. Soluzione
1. La prima cosa da fare è cambiare la password root sulla macchina virtuale per poterci accedere. All'avvio notiamo che si tratta di Ubuntu 16.04 Server.
Per reimpostare la password di root riavviamo la macchina, durante il caricamento, nel momento in cui appare il menu di grub, passiamo in modalità di modifica della voce Ubuntu premendo il tasto «e». Modifichiamo la riga linux, aggiungendo alla fine init=/bin/bash. Avviamo con Ctrl+x e otteniamo una bash. Rimontiamo la radice in modalità rw e cambiamo la password:
$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwdNon dimentichiamo di fare sync e poi riavviamo.
2. Nella situazione si dice che il nostro server web non funziona, controlliamo:
$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18 Cioè, di fatto Apache è avviato, ma risponde con codice 404. Controlliamo la configurazione:
$ vim /etc/apache2/sites-enabled/000-default.confQui troviamo la chiave - StevenPaulSteveJobs.
Controlliamo il percorso /usr/share/WordPress — non esiste, ma c'è /usr/share/wordpress. Modifichiamo la configurazione e riavviamo Apache.
$ systemctl restart apache23. Proviamo di nuovo, riceviamo l'errore:
Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488Il database non è avviato?
$ systemctl status mysql
Active: active (running) Qual è il problema? Dobbiamo indagare. Per fare ciò, è necessario accedere a MySQL, come descritto in . Uno dei punti della documentazione ci consiglia di specificare l'opzione skip-grant-tables in /etc/mysql/mysql.conf.d/mysqld.cnf. Qui si trova anche la chiave - AugustaAdaKingByron.
Correggiamo i permessi per l'utente 'wp'@'localhost'. Avviamo MySQL, rendendolo accessibile in rete, commentando l'opzione skip-networking.
4. Dopo le operazioni svolte, il server web si avvia, ma il sito continua a non funzionare, poiché
Attenzione: require_once(\/usr\/share\/wordpress\/wp-content\/themes\/twentysixteen\/footer.php): apertura stream fallita: Permesso negato in \/usr\/share\/wordpress\/wp-includes\/template.php alla linea 562Correggiamo i permessi sul file.
$ chmod 644 \/usr\/share\/wordpress\/wp-content\/themes\/twentysixteen\/footer.php
Aggiorniamo la pagina, entriamo nel sito e troviamo la chiave — BjarneStroustrup! Abbiamo trovato tutte e tre le chiavi, il nostro direttore può lavorare, abbiamo decrittato i file di 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 problema della raccolta dell'analisi. L'analisi piace a tutti: chi, da dove e in quali quantità si muove. Abbiamo ideato un caso, ma con cui tutti gli ingegneri possono comunque imbattersi nella vita.
2.1. Fatti interessanti
Uno dei nostri giocatori ha inserito la chiave corretta nei primi 10 minuti di gioco, e in un'ora abbiamo avuto un leader che ha completato il compito.
2.2. Compito
Sei entrato a lavorare in azienda, ti sono venuti a trovare i manager e ti hanno chiesto di trovare a chi erano stati inviati i messaggi dall'Africa. Devi costruire una top-21 degli indirizzi dei destinatari. Le prime lettere degli indirizzi dei destinatari sono la chiave. Tuttavia, il server di posta attraverso cui sono stati inviati i messaggi non si carica. Tutti aspettano una soluzione operativa!
2.3. Soluzione
1. Il server non si carica a causa di una partizione swap inesistente in fstab; al caricamento, il sistema cerca di montarlo e si blocca. Come fare per avviarlo?
Scarichiamo l'immagine, abbiamo scaricato CentOS 7, ci 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\n$ sync && reboot2. Come sempre non c'è password, è necessario cambiare la password di root sulla macchina virtuale. L'abbiamo già fatto nel primo compito. Cambiamo e accediamo con successo al server, ma subito si riavvia. Il server si riavvia così velocemente che non riesco nemmeno a controllare attentamente tutti i log. Come capire cosa sta succedendo?
Riavviamo di nuovo con livecd, esaminiamo attentamente i log di sistema e di tanto in tanto controlliamo il cron, dato il suo andamento periodico. Lì troviamo il problema e la seconda chiave — Alan1912MathisonTuring!
È necessario /etc/crontab rimuovere o commentare la riga echo b > \/proc\/sysrq-trigger.
3. Dopo che il server si è avviato, possiamo svolgere il compito dei manager: «Quali sono gli indirizzi dell'Africa?» Queste informazioni sono generalmente accessibili al pubblico. Puoi trovare queste informazioni su Internet utilizzando frasi come «ip address africa», «geoip database». Per risolvere il compito, puoi utilizzare banche dati di distribuzione degli indirizzi liberamente disponibili (geoip). Noi abbiamo utilizzato come riferimento un database. , disponibile sotto licenza Creative Commons Attribution-ShareAlike 4.0.
Cerchiamo di risolvere il nostro problema utilizzando solo utilità di sistema Linux, ma in realtà ci sono molti modi per farlo: utilizzando strumenti di filtraggio del testo e script in vari linguaggi di programmazione.
Innanzitutto, otteniamo semplicemente coppie «IP-del mittente — destinatario» dal registro delle email /var/log/maillog (costruiremo una tabella degli email dei destinatari — IP del mittente). Possiamo farlo 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.txtE prima di continuare con la creazione della banca dati degli indirizzi dell'Africa, diamo un'occhiata ai migliori 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 spiccano per numero di email i primi tre destinatari della lista. Se facciamo un grep degli indirizzi IP dei mittenti che hanno inviato email agli indirizzi del top-3, possiamo notare un chiaro predominio 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 165La maggior parte delle reti 105/8, 41/8, 196/8, 197/8 è assegnata ad AFRINIC — uno dei cinque registri internet regionali che gestiscono la distribuzione delle risorse internet. AFRINIC assegna lo spazio degli indirizzi nel 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 compito è presente 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.ruIn questa fase, otteniamo la stringa «LinuxBenedictTorvadst».
Chiave corretta: «LinusBenedictTorvalds».
La stringa ottenuta contiene un errore rispetto alla chiave corretta nei 3 caratteri finali. Questo è dovuto al fatto che le reti selezionate non sono completamente assegnate ai paesi africani e a come sono distribuiti gli indirizzi email negli IP registrati nei nostri log.
Con un'adeguata analisi delle principali reti 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 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ò anche essere risolto in un altro modo.
Scarichiamo MaxMind, decomprimiamo e le seguenti tre comandi risolvono anche il nostro compito.
$ 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 calcolato le statistiche, e i manager hanno ricevuto i dati necessari per il loro lavoro!
3. Fase tre
La terza fase è in qualche modo simile alla prima: bisogna comunque riparare il servizio caldo e piacevole, ma è 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 conservati su un server interno Wiki. L'anno scorso, un ingegnere ha ordinato 3 nuovi dischi per il server oltre a uno esistente, motivando questa decisione con la necessità di installare i dischi in alcuni array per garantire la ridondanza del sistema. Sfortunatamente, dopo alcune settimane dalla loro installazione, l'ingegnere è partito per una vacanza in India e non è tornato.
Il server ha funzionato senza problemi per diversi anni, ma alcuni 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 è andato irrimediabilmente perso.
È necessario ripristinare il funzionamento di Wiki, in particolare sono interessato al contenuto delle pagine wiki. Un certo frammento di testo che era su una delle pagine di questo wiki è la password del server 1C e serve urgentemente per sbloccarlo.
Inoltre, da qualche parte nelle pagine wiki o in un altro luogo c'erano le password per il server dei log e il server di videosorveglianza, che è anche auspicabile recuperare; senza di esse, l'indagine sull'incidente è impossibile. Come sempre, ci si aspetta una soluzione operativa al problema!
3.3. Soluzione
1. Proviamo a avviare a turno dai dischi che abbiamo e ovunque riceviamo lo stesso messaggio:
No bootable medium found! System halted
Deve esserci un modo per avviarsi. Ancora una volta, l'avvio da Live CD/DVD (Troubleshooting -> Rescue) ci salva. Durante l'avvio cerchiamo di trovare la partizione di avvio, non la troviamo e finiamo nello shell. Cerchiamo di capire cosa e come con i dischi. Si sa che ce ne sono tre. Gli strumenti per questo sono di più nella settima versione di CentOS, dove ci sono i comandi blkid o lsblk, che ci mostrano tutte le informazioni sui dischi.
Cosa e come facciamo:
$ ls /dev/sd*È subito evidente che
/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий моментMuntiamo sdb1, si vede che è la partizione di avvio di CentOS 6.
$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1Ovviamente andiamo nella sezione 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 è trovato e si lamenta per uid perso. Vediamo che dovrebbero esserci 2 volumi logici: root e swap, mentre root è parzialmente perso (attributo P per il volume). Non si riesce a montare, peccato! Ne abbiamo molto bisogno.
Ci sono altri 2 dischi, li esaminiamo, raccogliamo e montiamo:
$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127 /mnt/md127 Guardiamo, si vede che è la partizione di avvio di CentOS 6 e un duplicato di ciò che è già presente su /dev/sdb1, e qui di nuovo la stessa chiave: DennisBMacAlistairCRitchie!
Vediamo come è assemblato /dev/md127.
$ mdadm --detail /dev/md127
Vediamo che dovrebbe essere assemblato da 4 dischi, è stato assemblato da due /dev/sda1 e /dev/sdc1, dovrebbero essere quelli numeri 2 e 4 nel sistema. Supponiamo che anche da /dev/sda2 e /dev/sdc2 sia possibile assemblare un array. Non è chiaro perché non abbia metadata, ma questo è un problema dell'amministratore, che si trova da qualche parte a Goa. Supponiamo che qui dovrebbe esserci RAID10, anche se ci sono 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 ripristinato lvroot, lo montiamo, ma prima attiviamo VG:
$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot
E c'è tutto lì, incluso la chiave nella directory home di root — /root/sweet.
3. Proviamo comunque a far ripartire il nostro server affinché possa avviarsi correttamente. Tutti i volumi logici del nostro /dev/md0 (dove abbiamo trovato tutto) li spostiamo in /dev/sdb2, dove inizialmente funzionava tutto il server.
$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0Spegnere il server, rimuovere i dischi 1 e 3, lasciare il secondo, avviarsi con Live CD/DVD in Rescue. Troviamo la partizione di avvio, ripristiniamo il bootloader in grub:
root (hd0,0)
setup (hd0)
Togliamo il disco di avvio e facciamo il boot con successo, ma il sito non funziona.
4. Ci sono due opzioni per avviare il sito: configurare Apache da zero oppure utilizzare nginx già configurato precedentemente con php-fpm:
$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start
Infine, bisogna avviare MySQL:
$ /etc/init.d/mysqld start Non si avvia, e la chiave si trova in /var/log/mysql. Non appena si risolve il problema con MySQL, il sito funzionerà, sulla pagina principale ci sarà la chiave — RichardGCCMatthewGNUStallman! Ora abbiamo accesso a 1C, e i dipendenti potranno ricevere il salario. E tu hai come sempre molto lavoro da fare per sistemare l'infrastruttura e la sicurezza in azienda.
Possiamo anche condividere di nuovo l'elenco dei libri che ci hanno aiutato noi e i nostri partecipanti a prepararci per il gioco: .
Grazie per essere stati con noi! Seguite gli annunci dei prossimi giochi!
Fonte: habr.com
