Missão Linux. Parabéns aos vencedores e conte-nos sobre as soluções para as tarefas

Missão Linux. Parabéns aos vencedores e conte-nos sobre as soluções para as tarefas

No dia 25 de março abrimos as inscrições para Missão Linux, este é um jogo para amantes e especialistas do sistema operacional Linux. Algumas estatísticas: 1117 pessoas se inscreveram no jogo, 317 delas encontraram pelo menos uma chave, 241 completaram com sucesso a tarefa da primeira fase, 123 completaram a segunda fase e 70 passaram da terceira fase. Hoje nosso jogo chegou ao fim e parabenizamos nossos vencedores!

  • Alexander Teldekov ficou em primeiro lugar.
    Alexander disse a si mesmo que é o administrador de sistema mais típico. Vive em Volgogrado e administra vários sistemas semelhantes ao Unix há cerca de vinte anos. Consegui trabalhar em provedores de Internet, banco e integrador de sistemas. Agora ele trabalha remotamente em uma pequena empresa, trabalhando em infraestrutura de nuvem para um grande cliente estrangeiro. Adora ler e ouvir música. Sobre o Jogo, Alexandre disse que gostou do jogo como um todo, adora essas tarefas. Durante uma entrevista em uma das empresas fiz algo parecido com o Hackerrank, foi interessante.
  • Segundo lugar - Roman Suslov.
    Um romance de Moscou. Ele tem 37 anos. Trabalha como engenheiro Linux/Unix na Jet Infosystems. No trabalho, tenho que administrar e solucionar problemas de sistemas Linux/Unix + SAN. Os interesses são variados: sistemas Linux, programação, engenharia reversa, segurança da informação, Arduino. Sobre o jogo Roman observou que gostou do jogo em geral. “Estiquei um pouco o cérebro e fiz uma pausa na vida cotidiana cinzenta do trabalho diário. 🙂 Gostaria de ter mais tarefas, caso contrário, antes que eu tivesse tempo de experimentar, o jogo já havia acabado.”
  • Terceiro - alex3d.
    Alex mora em Moscou e trabalha com desenvolvimento de software. “Obrigado pelo concurso, foi interessante testar minhas habilidades no Google Fu.”

Também no ranking dos 10 melhores jogadores:

  • Yevgeny Saldayev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovayev
  • Ivan Bubnov
  • Pavlo Klets

Entendemos que existem muitas opções para resolver todos os nossos problemas; algumas das possíveis soluções são descritas abaixo.

1. Primeira etapa

Chamamos isso de “Você é mesmo um administrador?”, já que 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 de jogo, e na primeira hora tivemos três líderes que completaram a tarefa.

1.2. Exercício

Você foi trabalhar em uma empresa onde por muito tempo não existia um especialista competente em tecnologia da informação. Antes de começar a colocar as coisas em ordem, você precisa resolver o problema candente que está bloqueando o trabalho do escritório.

A faxineira pegou o cabo de alimentação do gabinete do servidor com um esfregão. A energia foi restaurada, mas um site muito importante ainda não funciona. O site é importante porque a empresa não se preocupa muito com a segurança da informação, e na página principal deste você encontra em texto não criptografado a senha do administrador do computador do CEO.

Outro dia a senha foi trocada, mas todos esqueceram a nova, o diretor não pode trabalhar. Há rumores de que havia mais chaves nesta máquina que poderiam nos ajudar a decifrar a cópia de segurança dos documentos contábeis.

Todos esperam uma resolução rápida do problema!

1.3. Solução

1. Em primeiro lugar, você precisa alterar a senha root da máquina virtual para ter acesso a ela. Ao iniciar, notamos que este é o Ubuntu 16.04 Server.

Para redefinir a senha do root, reiniciamos a máquina, ao carregar, no momento em que o menu grub é exibido, vamos editar o item Ubuntu com o botão “e”. Edite a linha linux, adicione-a ao final init=/bin/bash. Carregamos via Ctrl+x, obtemos uma festança. Remonte o root 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 nosso servidor web não está funcionando, veja:

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

Isto é, na verdade, o Apache está rodando, mas responde com o código 404. Vejamos a configuração:

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

Há também uma chave aqui - StevenPaulSteveJobs.

Verificando o caminho /usr/share/WordPress - não existe tal coisa, mas existe /usr/share/wordpress. Edite a configuração e reinicie o Apache.

$ systemctl restart apache2

3. Tente novamente, obtemos o 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? Precisamos descobrir isso. Para fazer isso, você precisa obter acesso ao MySQL, conforme descrito em documentação. Um dos pontos de documentação recomenda que registremos a opção skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Há também uma chave aqui - AugustaAdaKingByron.

Corrigindo direitos do usuário 'wp'@'localhost'. Lançamos o MySQL, tornamos acessível pela rede, comentando a opção na configuração skip-networking.

4. Após essas etapas, o servidor web é iniciado, mas o site ainda não funciona porque

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

Editamos 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 montar infraestrutura, backups e segurança na empresa.

2. Segunda etapa

Era preciso resolver o problema de coleta de análises. Todo mundo adora análises – quem as utiliza, onde e em que quantidades. Criamos um caso que todos os engenheiros podem encontrar de uma forma ou de outra na vida.

2.1. Fatos interessantes

Um de nossos jogadores digitou a chave correta nos primeiros 10 minutos de jogo, e na primeira hora tivemos um líder que completou a tarefa.

2.2. Exercício

Você foi trabalhar na empresa, os gerentes vieram até você e pediram que você descobrisse para quem eram enviadas cartas da África. Precisamos construir os 21 principais endereços de destinatários com base neles. As primeiras letras dos endereços dos destinatários são a chave. Uma coisa: o servidor de correio através do qual as cartas foram enviadas não carrega. Todos esperam uma resolução rápida do problema!

2.3. Solução

1. O servidor não inicializa devido a uma partição swap inexistente no fstab, ao carregar o sistema tenta montá-lo e trava. Como inicializar?

Baixe a imagem, baixamos o CentOS 7, inicializamos a partir do Live CD/DVD (Solução de problemas -> Rescue), montamos o sistema, editamos /etc/fstab. Encontramos imediatamente a primeira chave - GottfriedWilhelm11646Leibniz!

Criar 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. Nós mudamos e fazemos login com sucesso no servidor, mas ele é reiniciado imediatamente. O servidor fica sobrecarregado a tal velocidade que você nem tem tempo de 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, por precaução, olhamos no cron, desde essa periodicidade. Lá encontramos o problema e a segunda chave - Alan1912MathisonTuring!

Precisa em /etc/crontab excluir ou comentar linha echo b > /proc/sysrq-trigger.

3. Depois disso, o servidor será carregado e você poderá concluir a tarefa dos gerentes: “Quais são os endereços na África?” Esta informação está geralmente disponível ao público. Você pode encontrar essas informações na Internet usando as frases “endereço IP África”, “banco de dados geoip”. Para resolver o problema, você pode usar bancos de dados de distribuição de endereços (geoip) disponíveis gratuitamente. Usamos o banco de dados como padrão MaxMind GeoLite2, disponível sob uma licença Creative Commons Attribution-ShareAlike 4.0.

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 usando scripts em várias linguagens de programação.

Para começar, simplesmente obteremos os pares “IP remetente-destinatário” do registro de e-mail /var/log/maillog (vamos construir uma tabela de destinatários de e-mail - IP do remetente). 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 compilar uma base de dados de endereços africanos, vamos dar uma olhada nos principais endereços IP dos remetentes.

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

Entre todos eles, os três primeiros destinatários do topo se destacam claramente pelo número de cartas. Se você digitar os endereços IP dos remetentes que enviaram para os endereços deste top 3, notará uma clara predominância de determinadas redes:

$ 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

A maioria das redes 105/8, 41/8, 196/8,197/8 são alocadas à AFRINIC – um dos cinco registradores regionais da Internet que distribuem recursos da Internet. AFRINIC distribui espaço de endereço em toda a África. E 41/8 refere-se completamente a AFRINIC.

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 está, na verdade, 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 [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]

Nesta fase obtemos a string “LinuxBenedictTorvadst”.

Chave correta: "LinusBenedictTorvalds".

A string resultante contém um erro de digitação em relação à chave correta nos últimos 3 caracteres. Isto deve-se ao facto das redes que seleccionámos não serem inteiramente dedicadas aos países africanos e à forma como os emails são distribuídos pelos endereços IP no nosso log.

Com especificações suficientes das maiores redes atribuídas aos países africanos, pode ser obtida uma resposta 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]

O problema também pode ser resolvido de outra maneira.
Baixe MaxMind, descompacte-o e os próximos três comandos também resolverão 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 forma ou de outra, acabamos calculando as estatísticas e os gestores receberam os dados de que precisavam para trabalhar!

3. Terceira etapa

A terceira etapa é um pouco semelhante à primeira - você também precisa consertar a lâmpada quente, mas tudo é mais complicado 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. Exercício

Você foi trabalhar para uma empresa onde todos os documentos da empresa são armazenados em um servidor Wiki interno. No ano passado, um engenheiro encomendou três novos discos para o servidor, além de um já existente, argumentando que para o sistema ser tolerante a falhas, os discos precisavam ser colocados em algum tipo de array. Infelizmente, algumas semanas após a instalação, o engenheiro saiu de férias para a Índia e não voltou.

O servidor funcionou sem falhas durante vários anos, mas há alguns dias a rede da empresa foi hackeada. De acordo com as instruções, a equipe de segurança retirou os discos do servidor e os enviou para você. Durante o transporte, um disco foi irremediavelmente perdido.

Precisamos restaurar a funcionalidade do Wiki; em primeiro lugar, estamos interessados ​​no conteúdo das páginas wiki. Um determinado trecho de texto que estava em uma das páginas deste wiki é a senha do servidor 1C e é necessário com urgência para desbloqueá-lo.

Além disso, em algum lugar das páginas wiki ou em outro local havia senhas para o servidor de log e para o servidor de videovigilância, que também seria desejável recuperar; sem elas a investigação do incidente é impossível. Como sempre, esperamos uma resolução imediata do problema!

3.3. Solução

1. Tentamos inicializar um por um a partir dos discos que temos e em todos os lugares recebemos a mesma mensagem:

No bootable medium found! System halted 

Você precisa inicializar de alguma coisa. Inicializar a partir de um Live CD/DVD (Solução de problemas -> Rescue) ajuda novamente. Ao carregar, tentamos encontrar a partição de boot, não conseguimos encontrar, acabamos no shell. Estamos tentando estudar o que e como fazer com os discos. Sabe-se que existem três deles. Existem mais ferramentas para isso na 7ª versão do CentOS, onde existem comandos blkid ou lsblk, que nos mostra todas as informações sobre os discos.

Como e o que fazemos:

$ ls /dev/sd*

É imediatamente claro que

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

Montamos o sdb1, é claro que esta é a partição de boot 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, pois trabalhamos com LVM. Vemos que deveria haver 2 volumes físicos, um não está localizado e reclama de perda de uid. Vemos que deve haver 2 volumes lógicos: root e swap, enquanto o root está parcialmente perdido (o atributo P do volume). Não é possível montar, o que é uma pena! Nós realmente precisamos dele.

São mais 2 discos, olhamos, montamos e montamos:

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

Olhamos, podemos ver que esta é a partição de boot do CentOS 6 e uma duplicata do que já está instalado /dev/sdb1, e aqui novamente a mesma chave - DennisBMacAlistairCRitchie!
Vamos ver como está montado /dev/md127.

$ mdadm --detail /dev/md127

Vemos que deveria ter sido montado a partir de 4 discos, mas foi montado a partir de dois /dev/sda1 и /dev/sdc1, eles deveriam ser os números 2 e 4 no sistema. Assumimos que a partir /dev/sda2 и /dev/sdc2 Você também pode coletar uma matriz. Não está claro por que não há metadados sobre eles, mas isso está na consciência do administrador, que está em algum lugar de Goa. Assumimos que deveria haver RAID10, embora existam 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 tínhamos.

O lvroot foi reparado imediatamente, nós o montamos, mas primeiro ativamos o VG:

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

E tudo está lá, incluindo a chave no diretório inicial raiz - /root/sweet.

3. Ainda estamos tentando reanimar nosso servidor para que ele inicie normalmente. Todos os volumes lógicos do nosso /dev/md0 (onde encontramos tudo) arraste-o para /dev/sdb2, onde todo o servidor funcionou inicialmente.

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

Desligamos o servidor, removemos os discos 1 e 3, deixamos o segundo, inicializamos a partir do Live CD/DVD no Rescue. Encontre a partição de boot e restaure o bootloader no grub:

root (hd0,0)
setup (hd0)

Retiramos o disco de inicialização e carregamos com sucesso, mas o site não funciona.

4. Existem duas opções para lançar um site: configurar o Apache do zero ou usar o nginx com o php-fpm já configurado previamente:

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

Finalmente, você precisa iniciar o MySQL:

$ /etc/init.d/mysqld start

Não vai começar, e a resposta está em /var/log/mysql. Assim que você resolver o problema com o MySQL, o site funcionará, na página principal haverá uma chave - RichardGCCMatthewGNUStallman! Agora temos acesso ao 1C e os funcionários poderão receber seus salários. E como sempre, você tem muito trabalho pela frente para estabelecer infraestrutura e segurança na empresa.

Também podemos compartilhar mais uma vez uma lista de livros que ajudaram a nós e aos nossos participantes na preparação para o jogo: linux.mail.ru/books.

Obrigado por estar conosco! Fique ligado nos anúncios dos próximos jogos!

Fonte: habr.com

Adicionar um comentário