
25 de março, abrimos o registro para o
Linux Quest , este é um jogo para fãs e especialistas no sistema operacional Linux. Algumas estatísticas: 1117 pessoas registradas para o jogo, 317 delas encontraram pelo menos uma chave, 241 concluíram com êxito a tarefa da primeira etapa, 123 - a segunda e 70 passaram a terceira etapa. Hoje nosso jogo chegou ao fim e parabenizamos nossos vencedores!
- O primeiro lugar foi ocupado por Alexander Teldekov.
Alexander disse a si mesmo que ele é o administrador de sistemas mais típico. Vive em Volgogrado, administra vários sistemas semelhantes ao Unix por vinte anos. Conseguiu trabalhar em provedores de Internet, banco, integrador de sistemas. Agora ele trabalha remotamente em uma pequena empresa, ele está envolvido em infraestrutura de nuvem para um grande cliente estrangeiro. Gosta de ler, ouvir música. Sobre o jogo, Alexander disse que gostou do jogo como um todo, ele ama esses quebra-cabeças. Em uma das empresas na entrevista em que participei de um Hackerrank semelhante, foi interessante. - Segundo lugar - Roman Suslov.
Um romance de Moscou. Ele tem 37 anos. Ele trabalha como engenheiro Linux / Unix na Jet Infosystems. Para o trabalho, tenho que administrar e solucionar problemas de sistemas Linux / Unix + SAN. Os interesses são muito diferentes: sistemas Linux, programação, engenharia reversa, segurança da informação, Arduino. Sobre o jogo, Roman observou que geralmente gostava do jogo. “Flexionei um pouco meu giro e me distraí da vida cotidiana cinzenta do trabalho cotidiano. :) Gostaria de mais tarefas, caso contrário não teria tempo de provar como o jogo já havia terminado. " - O terceiro é alex3d.
Alex mora em Moscou, está envolvido no desenvolvimento de software. "Obrigado pelo concurso, foi interessante verificar sua habilidade no google-fu".
Também no ranking dos 10 melhores jogadores:
- Yevgeniy saldayev
- Markel Mokhnachevsky
- Konstantin Konosov
- Pavel Sergeev
- Vladimir Bovaev
- Ivan Bubnov
- Pavlo klets
Entendemos que existem muitas opções para resolver todos os nossos problemas. Uma das soluções possíveis é descrita abaixo.
1. A primeira etapa
Nós o chamamos de “Você tem certeza do administrador?”, Porque a tarefa era bastante simples - consertar um serviço de lâmpada quente.
1.1 Fatos interessantes:
Dois jogadores encontraram a primeira chave nos primeiros 15 minutos do jogo e, na primeira hora, tivemos três líderes que lidaram com a tarefa.
1.2 Tarefa
Você foi trabalhar para uma empresa em que por um longo tempo não havia um especialista em TI competente. Antes de começar a limpar, você precisa resolver um problema de queima que bloqueia o trabalho do escritório.
Uma faxineira passou o cabo de força no gabinete do servidor. Energia restaurada, mas um site muito importante ainda não funciona. O site é importante porque a empresa não está muito preocupada com a segurança das informações e, na página principal, você encontra a senha do administrador no computador do CEO em texto não criptografado.
Outro dia, a senha foi alterada, mas todo mundo esqueceu a nova, o diretor não pode trabalhar. Dizem que havia chaves nesta máquina que poderiam nos ajudar a descriptografar o backup de documentos contábeis.
Todo mundo está esperando uma solução rápida para o problema!
1.3 Solução
1. Primeiro, você precisa alterar a senha root na máquina virtual para obter acesso a ela. Na inicialização, percebemos que este é o Ubuntu 16.04 Server.
Para redefinir a senha root, reiniciamos a máquina, na inicialização, quando o menu grub é exibido, vá para a edição do item Ubuntu com o botão "e". Editamos a linha linux, adicionamos
init=/bin/bash
ao final. Carregamos através de Ctrl + x, obtemos o bash. Remonte a raiz com rw, altere a senha:
$ mount -o remount,rw /dev/mapper/ubuntu--vg-root $ passwd
Não se esqueça da sincronização, reinicie.
2. A condição diz que o servidor da web não funciona para nós, procuramos:
$ curl localhost Not Found The requested URL / was not found on this server. Apache/2.4.18
Na verdade, o Apache está em execução, mas responde com o código 404. Observamos a configuração:
$ vim /etc/apache2/sites-enabled/000-default.conf
Há também uma chave - StevenPaulSteveJobs.
Verificamos o caminho
/usr/share/WordPress
- não é, mas existe
/usr/share/wordpress
. Corrigimos a configuração e reiniciamos o Apache.
$ systemctl restart apache2
3. Tentamos novamente, recebemos um erro:
Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488
O banco de dados não está em execução?
$ systemctl status mysql Active: active (running)
Qual é o problema? É necessário entender. Para fazer isso, você precisa acessar o MySQL, como fazer isso é descrito na
documentação . Um dos pontos na documentação recomenda que escrevamos a opção
skip-grant-tables
em
/etc/mysql/mysql.conf.d/mysqld.cnf
. Aqui também está a chave - AugustaAdaKingByron.
Nós corrigimos os direitos do usuário
'wp'@'localhost'
. Iniciamos o MySQL, o tornamos acessível através da rede, comentando a opção
skip-networking
na configuração.
4. Após as ações tomadas, o servidor da web é iniciado, mas o site ainda não funciona, como
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
Corrigimos os direitos do arquivo.
$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php
Atualizamos a página, acessamos o site e encontramos a chave - BjarneStroustrup! Encontramos as três chaves, nosso diretor pode trabalhar, descriptografamos os arquivos contábeis. Todos estão felizes e você tem muito trabalho pela frente para estabelecer infraestrutura, backups e segurança na empresa.
2. A segunda etapa
Foi necessário resolver o problema de coletar análises. Todo mundo adora análises - quem, onde e em que quantidades. Chegamos a um caso que todos os engenheiros da vida podem encontrar de uma forma ou de outra.
2.1 Fatos interessantes
Um de nossos jogadores digitou a chave correta nos primeiros 10 minutos do jogo e, na primeira hora, conseguimos um líder que lidou com a tarefa.
2.2 Tarefa
Você foi trabalhar na empresa, os gerentes foram até você e pediram para descobrir para quem as cartas foram enviadas da África. Você precisa criar os 21 principais endereços de destinatários. As primeiras letras dos endereços dos destinatários são a chave. Uma coisa: o servidor de correio pelo qual as cartas foram enviadas não carrega. Todo mundo está esperando uma solução rápida para o problema!
2.3 Solução
1. O servidor não é carregado devido à partição de swap inexistente no fstab, na inicialização, o sistema tenta montá-lo e trava. Como inicializar?
Faça o download da imagem, baixamos o CentOS 7, inicialize a partir do Live CD / DVD (Solução de problemas -> Recuperação), monte o sistema, edite o
/etc/fstab
. Aqui encontramos a primeira chave - GottfriedWilhelm11646Leibniz!
Crie uma troca:
$ lvcreate -n swap centos -L 256M $ sync && reboot
2. Como sempre, não há senha, você precisa alterar a senha root na máquina virtual. Já fizemos isso na primeira tarefa. Mudamos e vamos com sucesso para o servidor, mas ele é imediatamente reiniciado. O servidor está sobrecarregado a uma velocidade que você nem tem tempo para examinar todos os logs com atenção. Como entender o que está acontecendo?
Novamente, inicializamos a partir do livecd, estudamos cuidadosamente os logs do sistema e, no caso de procurarmos em coroas, desde essa frequência. Aí encontramos o problema e a segunda chave é Alan1912MathisonTuring!
É necessário excluir ou comentar a linha
echo b > /proc/sysrq-trigger
em
/etc/crontab
.
3. Depois disso, o servidor inicializou e você pode concluir a tarefa dos gerentes: "Quais são os endereços da África?" Esta informação está geralmente disponível ao público. Você pode encontrar essas informações na Internet usando as frases “ip address africa”, “geoip database”. Para resolver o problema, você pode usar as bases de distribuição de endereços disponíveis gratuitamente (geoip). Utilizamos o banco de dados
MaxMind GeoLite2 , disponível sob a licença Creative Commons Attribution-ShareAlike 4.0, como referência.
Vamos tentar resolver nosso problema usando apenas utilitários de sistema Linux, mas em geral ele pode ser resolvido de várias maneiras: usando utilitários de filtragem de texto e scripts em várias linguagens de programação.
Para começar, apenas obtemos os pares "IP remetente - destinatário" no log de correio
/var/log/maillog
(
/var/log/maillog
criar uma tabela de destinatários por email - remetente IP). Isso pode ser feito com o seguinte 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 antes de continuarmos a compilação do banco de dados de endereços africanos, examinamos os principais endereços IP dos remetentes.
$ 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
Entre todos, os três primeiros destinatários do topo destacam-se claramente pelo número de letras. Se você cumprimentar os endereços IP dos remetentes que foram enviados para os endereços deste top 3, poderá ver a clara predominância de determinadas redes:
$ 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
A maioria das redes 105/8, 41/8, 196 / 8.197 / 8 é alocada pelo AFRINIC - um dos cinco registradores regionais da Internet que distribuem recursos da Internet. AFRINIC distribui espaço de endereço na África. E 41/8 refere-se ao AFRINIC completamente.
https://www.nic.ru/whois/?searchWord=105.0.0.0 https://www.nic.ru/whois/?searchWord=41.0.0.0
Assim, a resposta para o problema, de fato, está no próprio log.
$ 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
Neste ponto, obtemos a string "LinuxBenedictTorvadst".
A chave correta é LinusBenedictTorvalds.
A sequência resultante contém um erro de digitação em relação à chave correta em 3 caracteres extremos. Isso se deve ao fato de que as redes que escolhemos não são totalmente alocadas aos países africanos e como os e-mails são distribuídos por endereços IP em nosso registro.
Com esclarecimentos suficientes das maiores redes alocadas aos países africanos, você pode obter a resposta exata:
$ 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
O problema também pode ser resolvido de outra maneira.
Baixe o MaxMind, descompacte e as três equipes a seguir também resolvem nosso 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
De uma maneira ou de outra, finalmente contamos as estatísticas e os gerentes obtiveram os dados necessários para trabalhar!
3. Terceira etapa
O terceiro estágio é um pouco semelhante ao primeiro - você também precisa corrigir o serviço da lâmpada quente, mas é mais difícil do que na primeira tarefa.
3.1 Fatos interessantes
Nos primeiros 15 minutos, três jogadores encontraram a primeira chave, 2 horas e 20 minutos após o início da etapa, nosso vencedor completou a tarefa.
3.2 Tarefa
Você foi trabalhar em uma empresa na qual todos os documentos da empresa são armazenados no servidor Wiki interno. No ano passado, um engenheiro encomendou três novos discos para o servidor, além de um existente, argumentando que, para tolerância a falhas do sistema, é necessário colocar discos em algumas matrizes. Infelizmente, algumas semanas após a instalação, o engenheiro foi descansar na Índia e não voltou.
Por vários anos, o servidor funcionou sem falhas, mas há alguns dias a rede da empresa foi invadida. De acordo com as instruções, os agentes de segurança removeram os discos do servidor e os enviaram para você. Durante o transporte, um disco foi irremediavelmente perdido.
Você precisa restaurar o wiki, antes de tudo, o conteúdo das páginas do wiki é interessante. Um pedaço de texto que estava em uma das páginas deste wiki é uma senha de um servidor 1C e é urgentemente necessário para desbloqueá-lo.
Além disso, em algum lugar nas páginas wiki ou em outro lugar, havia senhas do servidor de registro e do servidor de vigilância por vídeo, que também são desejáveis de serem recuperadas, sem elas é impossível investigar o incidente. Como sempre, eles são esperados de uma solução operacional para o problema!
3.3 Solução
1. Tentamos inicializar a partir das unidades que possuímos e em todos os lugares recebemos a mesma mensagem:
No bootable medium found! System halted
É necessário inicializar a partir de algo. Recupera novamente a inicialização de um Live CD / DVD (Solução de problemas -> Recuperar). Ao inicializar, tentamos encontrar a partição de inicialização, não encontramos, entramos no shell. Estamos tentando aprender o que e como com os discos. Sabe-se que existem três deles. Existem mais ferramentas para isso na 7ª versão do CentOS, onde existem
lsblk
ou
lsblk
que nos mostram todas as informações sobre os discos.
Como e o que fazer:
$ ls /dev/sd*
É imediatamente claro que
/dev/sdb1 - ext4 /dev/sdb2 - lvm /dev/sda1 /dev/sdc1 - /dev/sda2 /dev/sdc2 -
Monte sdb1, é claro que esta é a partição de inicialização do CentOS 6.
$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1
Obviamente, vamos para a seção grub e encontramos a primeira chave lá - James191955Gosling em um arquivo incomum.
2. Estudamos pvs e lvs, enquanto trabalhamos com o LVM. Vemos que deve haver 2 volumes físicos, um não está localizado e xinga o uid perdido. Vemos que deve haver 2 volumes logicamente: root e swap, enquanto o root está parcialmente perdido (o atributo P do volume). Mount não funciona, mas desculpe! Nós realmente precisamos dele.
Existem mais 2 discos, olhe para eles, monte e monte:
$ mdadm --examine --verbose --scan $ mdadm --assemble --verbose --scan $ mkdir /mnt/md127 && mount /dev/md127 /mnt/md127
Olhamos, está claro que esta é a partição de inicialização do CentOS 6 e uma amostra do que já está em
/dev/sdb1
, e aqui novamente a mesma chave é James191955Gosling!
Nós olhamos como o
/dev/md127
.
$ mdadm --detail /dev/md127
Vimos que ele teve que ser montado a partir de 4 discos, montado a partir de dois
/dev/sda1
e
/dev/sdc1
, eles deveriam ser os números 2 e 4 no sistema. Assumimos que você também pode criar uma matriz a partir de
/dev/sda2
e
/dev/sdc2
. Não está claro por que não há metadados neles, mas isso está na consciência do administrador, que está em algum lugar em Goa. Assumimos que deve haver RAID10, embora haja opções. Nós coletamos:
$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2
Olhamos para blkid, pvs, lvs. Descobrimos que coletamos um volume físico que antes não possuíamos.
Nós imediatamente corrigimos o lvroot, montamos, mas primeiro ativamos o VG:
$ vgchange -ay $ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot
E tudo está lá, incluindo a chave DennisBMacAlistairCRitchie - no diretório inicial raiz -
/root/sweet
.
3. No entanto, estamos tentando reviver nosso servidor para que ele inicie normalmente. Todo o volume lógico c do nosso
/dev/md0
(onde temos tudo) é arrastado para
/dev/sdb2
, onde todo o servidor trabalhou inicialmente.
$ pvmove /dev/md0 /dev/sdb2 $ vgreduce vg_c6m1 /dev/md0
Extinguímos o servidor, removemos 1 e 3 discos, deixamos o segundo, inicializamos a partir do Live CD / DVD no Rescue. Encontramos a seção de inicialização, restaure o gerenciador de inicialização no grub:
root (hd0,0) setup (hd0)
Separamos o disco de inicialização e inicializamos com êxito, mas o site não funciona.
4. Existem duas opções para iniciar o site: configure o Apache a partir do zero ou use o nginx já configurado previamente com o php-fpm:
$ /etc/init.d/nginx start $ /etc/init.d/php-fpm start
Finalmente, você precisa iniciar o MySQL:
$ /etc/init.d/mysqld start
Ele não inicia e a solução está em
/var/log/mysql
. Assim que você resolver o problema com o MySQL, o site funcionará, haverá uma chave na página principal - RichardGCCMatthewGNUStallman! Agora temos acesso ao 1C, e os funcionários poderão receber o pagamento. E, como sempre, você tem muito trabalho pela frente para construir infraestrutura e segurança na empresa.
Também podemos compartilhar novamente uma lista de livros que nos ajudaram e nossos participantes a se prepararem para o jogo:
linux.mail.ru/books .
Obrigado por estar conosco! Siga os anúncios dos próximos jogos!