Linux Arayışı. Kazananları tebrik ederiz ve bize görevlerin çözümlerini anlatın

Linux Arayışı. Kazananları tebrik ederiz ve bize görevlerin çözümlerini anlatın

25 Mart'ta kayıtlarımızı açtık. Linux GöreviBu, Linux işletim sistemini sevenler ve uzmanlar için bir Oyundur. Bazı istatistikler: Oyuna 1117 kişi kaydoldu, 317'si en az bir anahtar buldu, 241'i ilk aşamadaki görevi başarıyla tamamladı, 123 - ikinci ve 70 kişi üçüncü aşamayı geçti. Bugün oyunumuz sona erdi ve kazananlarımızı tebrik ediyoruz!

  • Alexander Teldekov birinci oldu.
    Alexander kendi kendine en tipik sistem yöneticisi olduğunu söyledi. Volgograd'da yaşıyor, yaklaşık yirmi yıldır Unix benzeri çeşitli sistemleri yönetiyor. İnternet sağlayıcılarında, bir bankada ve bir sistem entegratöründe çalışmayı başardım. Artık küçük bir şirkette uzaktan çalışıyor ve büyük bir yabancı müşteri için bulut altyapısı üzerinde çalışıyor. Okumayı ve müzik dinlemeyi sever. Oyun Hakkında Alexander, oyunu genel olarak beğendiğini, bu tür görevleri sevdiğini söyledi. Hackerrank'a benzer bir şey yaptığım şirketlerden birinde bir röportaj sırasında ilginçti.
  • İkinci sıra - Roman Suslov.
    Moskova'dan bir roman. 37 yaşındadır. Jet Infosystems'de Linux/Unix mühendisi olarak çalışıyor. İş yerinde Linux/Unix sistemlerini + SAN'ı yönetmem ve sorunlarını gidermem gerekiyor. İlgi alanları çeşitlidir: Linux sistemleri, programlama, tersine mühendislik, bilgi güvenliği, Arduino. Oyun Hakkında Roman, oyunu genel olarak beğendiğini belirtti. “Beynimi biraz esnettim ve günlük işlerin gri günlük yaşamına biraz ara verdim. 🙂 Daha fazla görevim olmasını isterdim, aksi halde daha tadına bakmaya vakit bulamadan oyun çoktan bitmişti.”
  • Üçüncüsü - alex3d.
    Alex Moskova'da yaşıyor ve yazılım geliştirme alanında çalışıyor. "Yarışma için teşekkürler, google-fu becerilerimi test etmek ilginçti."

Ayrıca en iyi 10 oyuncu sıralamasında:

  • Yevgeniy Saldayev
  • Markel Mokhnaçevski
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovayev
  • Ivan Bubnov
  • Pavlo Klets

Tüm sorunlarımızı çözmek için birçok seçeneğin olduğunun farkındayız; olası çözümlerden bazıları aşağıda açıklanmıştır.

1. İlk aşama

Görev oldukça basit olduğu için buna "Gerçekten yönetici misiniz?" adını verdik - sıcak lamba servisini düzeltmek.

1.1. İlginç gerçekler:

Oyunun ilk 15 dakikasında iki oyuncu ilk anahtarı buldu ve ilk saatte görevi tamamlayan üç liderimiz oldu.

1.2. Görev

Uzun süredir yetkin bir bilgi teknolojisi uzmanının bulunmadığı bir şirkette çalışmaya gittiniz. İşleri düzene koymaya başlamadan önce ofisin çalışmasını engelleyen yanma sorununu çözmeniz gerekiyor.

Temizlikçi kadın sunucu dolabının elektrik kablosunu paspasla yakaladı. Elektrik geldi ancak çok önemli bir web sitesi hâlâ çalışmıyor. Web sitesi önemlidir çünkü şirket bilgi güvenliği konusunda çok fazla endişe duymamaktadır ve bunun ana sayfasında CEO'nun bilgisayarının yönetici şifresini açık metin olarak bulabilirsiniz.

Geçen gün şifre değiştirildi ama herkes yenisini unuttu, yönetmen çalışamıyor. Bu makinede muhasebe belgelerinin yedek kopyasını çözmemize yardımcı olabilecek daha fazla anahtar olduğuna dair söylentiler var.

Herkes sorunun bir an önce çözülmesini bekliyor!

1.3. karar

1. Öncelikle sanal makineye erişim sağlamak için root şifresini değiştirmeniz gerekmektedir. Başlarken bunun Ubuntu 16.04 Sunucusu olduğunu fark ediyoruz.

Kök şifresini sıfırlamak için makineyi yeniden başlatıyoruz, yükleme sırasında grub menüsü görüntülendiği anda “e” tuşuyla Ubuntu öğesini düzenlemeye gidiyoruz. Linux satırını düzenleyin, sonuna ekleyin init=/bin/bash. Ctrl+x ile yüklüyoruz, bir bash alıyoruz. Kökü rw ile yeniden bağlayın, şifreyi değiştirin:

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

Senkronizasyonu unutmayın, yeniden başlatın.

2. Durum web sunucumuzun çalışmadığını söylüyor, bakın:

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

Yani aslında Apache çalışıyor ancak 404 koduyla yanıt veriyor. Yapılandırmaya bakalım:

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

Burada ayrıca bir anahtar var: StevenPaulSteveJobs.

Yolu kontrol etmek /usr/share/WordPress - öyle bir şey yok ama var /usr/share/wordpress. Yapılandırmayı düzenleyin ve Apache'yi yeniden başlatın.

$ systemctl restart apache2

3. Tekrar deneyin, şu hatayı alıyoruz:

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

Veritabanı çalışmıyor mu?

$ systemctl status mysql
Active: active (running)

Sorun ne? Bunu çözmemiz gerekiyor. Bunu yapmak için MySQL'e şurada açıklandığı gibi erişmeniz gerekir: belgeleme. Belge noktalarından biri seçeneği kaydetmemizi tavsiye ediyor skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Burada ayrıca bir anahtar var - AugustaAdaKingByron.

Kullanıcı haklarının düzeltilmesi 'wp'@'localhost'. MySQL'i başlatıyoruz, ağ üzerinden erişilebilir hale getiriyoruz, yapılandırmadaki seçeneği yorumluyoruz skip-networking.

4. Bu adımlardan sonra web sunucusu başlıyor ancak site hala çalışmıyor çünkü

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

Dosyanın haklarını düzenliyoruz.

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

Sayfayı yeniliyoruz, siteye gidiyoruz ve anahtarı buluyoruz - BjarneStroustrup! Üç anahtarı da bulduk, müdürümüz çalışabilir, muhasebe dosyalarının şifresini çözdük. Herkes mutlu ve şirkette altyapı, yedekleme ve güvenlik kurulumu konusunda önünüzde yapılacak çok iş var.

2. İkinci aşama

Analitik toplama sorununu çözmek gerekiyordu. Analitiği herkes sever; kim, nerede ve ne miktarda kullanır. Her mühendisin hayatında şu ya da bu şekilde karşılaşabileceği bir durum ortaya çıkardık.

2.1. İlginç gerçekler

Oyunun ilk 10 dakikasında oyuncularımızdan biri doğru anahtarı girdi ve ilk saat içinde görevi tamamlayan bir liderimiz oldu.

2.2. Görev

Şirkette çalışmaya gittiniz, yöneticiler yanınıza geldi ve sizden Afrika'dan kime mektup gönderildiğini bulmanızı istedi. İlk 21 alıcı adresini bunlara göre oluşturmamız gerekiyor. Alıcıların adreslerinin ilk harfleri anahtardır. Bir şey var: Mektupların gönderildiği posta sunucusu yüklenmiyor. Herkes sorunun bir an önce çözülmesini bekliyor!

2.3. karar

1. Sunucu, fstab'da mevcut olmayan bir takas bölümü nedeniyle önyükleme yapmıyor; yükleme sırasında sistem onu ​​bağlamaya çalışır ve çöker. Nasıl önyükleme yapılır?

Görüntüyü indirin, CentOS 7'yi indirdik, Canlı CD/DVD'den önyükleme yapın (Sorun Giderme -> Kurtarma), sistemi bağlayın, düzenleyin /etc/fstab. Hemen ilk anahtarı buluyoruz - GottfriedWilhelm11646Leibniz!

Takas oluştur:

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

2. Her zaman olduğu gibi şifre yoktur, sanal makine üzerinde root şifresini değiştirmeniz gerekmektedir. Bunu zaten ilk görevde yapmıştık. Sunucuyu değiştirip başarılı bir şekilde oturum açıyoruz, ancak hemen yeniden başlatılıyor. Sunucu o kadar hızlı yüklenmiştir ki, tüm loglara dikkatlice bakacak vaktiniz bile yoktur. Ne olduğunu nasıl anlayabilirim?

Yine livecd'den önyükleme yapıyoruz, sistem günlüklerini dikkatlice inceliyoruz ve her ihtimale karşı böyle bir periyodiklikten dolayı crona bakıyoruz. Burada sorunu ve ikinci anahtarı buluyoruz: Alan1912MathisonTuring!

ihtiyaç /etc/crontab satırı sil veya yorum yap echo b > /proc/sysrq-trigger.

3. Sunucu yüklendikten sonra yöneticilerin görevini tamamlayabilirsiniz: "Afrika'daki adresler nelerdir?" Bu bilgiler genel olarak kamuoyuna açıktır. Bu bilgiyi internette “ip adresi afrika”, “geoip veritabanı” ifadelerini kullanarak bulabilirsiniz. Sorunu çözmek için ücretsiz olarak kullanılabilen adres dağıtım veritabanlarını (geoip) kullanabilirsiniz. Veritabanını standart olarak kullandık MaxMind GeoLite2, Creative Commons Attribution-ShareAlike 4.0 lisansı kapsamında mevcuttur.

Sorunumuzu yalnızca Linux sistem yardımcı programlarını kullanarak çözmeye çalışalım, ancak genel olarak bu çok sayıda yolla çözülebilir: metin filtreleme yardımcı programlarının kullanılması ve çeşitli programlama dillerindeki komut dosyalarının kullanılması.

Başlangıç ​​olarak, posta günlüğünden "gönderen-alıcı IP" çiftlerini alacağız /var/log/maillog (bir e-posta alıcıları tablosu oluşturalım - gönderenin IP'si). Bu, aşağıdaki komutla yapılabilir:

$ 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

Afrika adreslerinden oluşan bir veritabanı derlemeye devam etmeden önce, gönderenlerin en önemli IP adreslerine bir göz atalım.

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

Bunların arasında en üstten ilk üç alıcı, harf sayısı açısından açıkça öne çıkıyor. Bu ilk 3 adrese gönderilen gönderenlerin IP adreslerini incelerseniz, belirli ağların açık bir şekilde baskın olduğunu fark edeceksiniz:

$ 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

105/8, 41/8, 196/8,197/8 ağlarının çoğu, İnternet kaynaklarını dağıtan beş bölgesel İnternet kayıt şirketinden biri olan AFRINIC'e tahsis edilmiştir. AFRINIC, adres alanını Afrika'nın her yerine dağıtır. Ve 41/8 tamamen AFRİNIC'i ifade ediyor.

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

Dolayısıyla sorunun cevabı aslında günlüğün kendisindedir.

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

Bu aşamada “LinuxBenedictTorvadst” stringini elde ediyoruz.

Doğru anahtar: "LinusBenedictTorvalds".

Ortaya çıkan dize, son 3 karakterdeki doğru anahtara ilişkin bir yazım hatası içeriyor. Bunun nedeni, seçtiğimiz ağların tamamen Afrika ülkelerine özel olmaması ve e-postaların günlüğümüzdeki IP adresleri arasında dağıtılma şeklidir.

Afrika ülkelerine tahsis edilen en büyük ağların yeterli şekilde belirtilmesiyle kesin bir cevap elde edilebilir:

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

Sorun başka bir şekilde de çözülebilir.
MaxMind'i indirin, paketini açın ve sonraki üç komut da sorunumuzu çözecektir.

$ 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

Öyle ya da böyle, sonunda istatistikleri hesapladık ve yöneticiler çalışmak için ihtiyaç duydukları verileri aldılar!

3. Üçüncü aşama

Üçüncü aşama birincisine biraz benziyor - ayrıca sıcak lamba servisini de düzeltmeniz gerekiyor, ancak her şey ilk görevden daha karmaşık.

3.1. İlginç gerçekler

İlk 15 dakikada üç oyuncu ilk anahtarı buldu; etabın başlamasından 2 saat 20 dakika sonra kazananımız görevi tamamladı.

3.2. Görev

Tüm şirket belgelerinin dahili bir Wiki sunucusunda saklandığı bir şirkette çalışmaya gittiniz. Geçen yıl bir mühendis, sistemin hataya dayanıklı olması için disklerin bir tür dizilere yerleştirilmesi gerektiğini öne sürerek, sunucu için mevcut bir diske ek olarak 3 yeni disk sipariş etti. Maalesef kurulumdan birkaç hafta sonra mühendis tatile Hindistan'a gitti ve geri dönmedi.

Sunucu birkaç yıl boyunca hatasız çalıştı ancak birkaç gün önce şirketin ağı hacklendi. Talimatlara göre güvenlik personeli diskleri sunucudan çıkarıp size gönderdi. Taşıma sırasında bir disk geri alınamayacak şekilde kayboldu.

Wiki'nin işlevselliğini geri kazanmamız gerekiyor; her şeyden önce wiki sayfalarının içeriğiyle ilgileniyoruz. Bu wiki'nin sayfalarından birinde bulunan belirli bir metin parçası, 1C sunucusunun şifresidir ve kilidinin açılması için acilen ihtiyaç duyulmaktadır.

Ek olarak, wiki sayfalarının bir yerinde veya başka bir yerde, günlük sunucusu ve video gözetim sunucusu için de kurtarılması arzu edilen şifreler vardı; bunlar olmadan olayın araştırılması imkansızdır. Her zaman olduğu gibi sorunun hızlı bir şekilde çözülmesini bekliyoruz!

3.3. karar

1. Sahip olduğumuz disklerden tek tek önyükleme yapmaya çalışıyoruz ve her yerde aynı mesajı alıyoruz:

No bootable medium found! System halted 

Bir şeyden önyükleme yapmanız gerekiyor. Canlı CD/DVD'den önyükleme yapmak (Sorun Giderme -> Kurtarma) yine yardımcı olur. Yükleme sırasında önyükleme bölümünü bulmaya çalışıyoruz, bulamıyoruz, kabuğa düşüyoruz. Disklerle ne ve nasıl yapılacağını araştırmaya çalışıyoruz. Bunlardan üç tane olduğu biliniyor. Komutların bulunduğu CentOS'un 7. sürümünde bunun için daha fazla araç var. blkid veya lsblk, bize disklerle ilgili tüm bilgileri gösterir.

Nasıl ve ne yapıyoruz:

$ ls /dev/sd*

Hemen belli ki

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

Sdb1'i monte ediyoruz, bunun CentOS 6'nın önyükleme bölümü olduğu açık.

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

Açıkçası, grup bölümüne gidiyoruz ve orada ilk anahtarı buluyoruz - James191955Gosling alışılmadık bir dosyada.

2. LVM ile çalıştığımız için pvs ve lvs üzerinde çalışıyoruz. 2 adet fiziksel cilt olması gerektiğini görüyoruz, biri bulunmuyor ve kayıp sıvıdan şikayetçi. 2 mantıksal birimin olması gerektiğini görüyoruz: root ve swap, root kısmen kaybolmuş (hacmin P özelliği). Montajı mümkün değil, ki bu üzücü! Ona gerçekten ihtiyacımız var.

2 disk daha var, onlara bakıyoruz, birleştirip monte ediyoruz:

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

Bakıyoruz, bunun CentOS 6'nın önyükleme bölümü olduğunu ve halihazırda mevcut olanın bir kopyası olduğunu görebiliyoruz. /dev/sdb1, ve burada yine aynı anahtar - DennisBMacAlistairCRitchie!
Bakalım nasıl monte ediliyor /dev/md127.

$ mdadm --detail /dev/md127

4 diskten toplanması gerektiğini görüyoruz ama iki diskten toplandı /dev/sda1 и /dev/sdc1, sistemde 2 ve 4 numara olmaları gerekirdi. Bunu varsayıyoruz /dev/sda2 и /dev/sdc2 Ayrıca bir dizi de toplayabilirsiniz. Neden bunlarda meta veri bulunmadığı açık değil, ancak bu Goa'da bir yerlerde bulunan yöneticinin vicdanındadır. Seçenekler olmasına rağmen RAID10'un olması gerektiğini varsayıyoruz. Biz topluyoruz:

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

Blkid, pvs, lvs'ye bakıyoruz. Daha önce sahip olmadığımız bir fiziksel hacmi biriktirdiğimizi keşfediyoruz.

lvroot hemen onarıldı, monte ettik ama önce VG'yi etkinleştirdik:

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

Ve kök ana dizinindeki anahtar da dahil olmak üzere her şey oradadır - /root/sweet.

3. Sunucumuzu normal şekilde başlaması için hala canlandırmaya çalışıyoruz. Bizim tüm mantıksal ciltlerimiz /dev/md0 (her şeyi bulduğumuz yer) onu sürükleyin /dev/sdb2, tüm sunucunun başlangıçta çalıştığı yer.

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

Sunucuyu kapatıyoruz, 1 ve 3 numaralı diskleri çıkarıyoruz, ikinciyi bırakıyoruz, Live CD/DVD'den Rescue'ya önyükleme yapıyoruz. Önyükleme bölümünü bulun ve önyükleyiciyi gruba geri yükleyin:

root (hd0,0)
setup (hd0)

Önyükleme diskini yırtıp başarıyla yüklüyoruz ancak site çalışmıyor.

4. Bir web sitesi başlatmak için iki seçenek vardır: Apache'yi sıfırdan yapılandırmak veya önceden yapılandırılmış php-fpm ile nginx'i kullanmak:

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

Son olarak MySQL'i başlatmanız gerekiyor:

$ /etc/init.d/mysqld start

Başlamayacak ve cevap yatıyor /var/log/mysql. Sorunu MySQL ile çözdüğünüz anda site çalışacak, ana sayfada bir anahtar olacak - RichardGCCMatthewGNUStallman! Artık 1C'ye erişimimiz var ve çalışanlar maaşlarını alabilecek. Ve her zaman olduğu gibi şirkette altyapı ve güvenlik oluşturmak için önünüzde çok iş var.

Ayrıca bize ve katılımcılarımıza oyuna hazırlanmamızda yardımcı olan kitapların listesini bir kez daha paylaşabiliriz: linux.mail.ru/books.

Bizimle birlikte olduğun için teşekkür ederiz! Sonraki oyunların duyuruları için bizi takip etmeye devam edin!

Kaynak: habr.com

Yorum ekle