Linux 探索。 恭喜得獎者並告訴我們任務的解決方案

Linux 探索。 恭喜得獎者並告訴我們任務的解決方案

25月XNUMX日我們開始報名 Linux 探索,這是一款針對Linux作業系統愛好者和專家的遊戲。 一些統計:1117人註冊了遊戲,其中317人找到了至少一把鑰匙,241人成功完成第一階段任務,123人完成第二階段任務,70人通過第三階段任務。 今天我們的比賽結束了,恭喜我們的得獎者!

  • 亞歷山大·特爾德科夫獲得第一名。
    亞歷山大對自己說,他是最典型的系統管理員。 住在伏爾加格勒,管理各種類 Unix 系統已經大約二十年了。 我曾在網路供應商、銀行和系統整合商工作過。 現在他在一家小公司遠距工作,為一家大型外國客戶開發雲端基礎設施。 喜歡閱讀和聽音樂。 關於遊戲,亞歷山大說他喜歡整個遊戲,他喜歡這樣的任務。 在一家公司的面試中,我做了一些類似 Hackerrank 的事情,這很有趣。
  • 第二名-羅曼·蘇斯洛夫。
    一部來自莫斯科的小說。 他今年 37 歲。 在 Jet Infosystems 擔任 Linux/Unix 工程師。 在工作中,我必須對 Linux/Unix 系統 + SAN 進行管理和故障排除。 興趣多元:Linux 系統、程式設計、逆向工程、資訊安全、Arduino。 關於遊戲 羅曼表示他總體上喜歡這款遊戲。 「我稍微動了一下腦筋,從日常工作的灰色日常生活中得到了休息。 🙂 我想要更多的任務,不然還來不及嚐嚐,遊戲就已經結束了。”
  • 第三-alex3d。
    亞歷克斯住在莫斯科,從事軟體開發工作。 “謝謝你們參加比賽,測試我的 google-fu 技能很有趣。”

另外在10名最佳球員的排名中:

  • 葉夫根尼·薩爾達耶夫
  • 馬克爾·莫赫納切夫斯基
  • 康斯坦丁·科諾索夫
  • 帕維爾·謝爾蓋夫
  • 弗拉基米爾·博瓦耶夫
  • 伊凡·布布諾夫
  • 帕夫洛·克萊茨

我們知道解決所有問題有多種選擇;下面描述了一些可能的解決方案。

1. 第一階段

我們稱之為“你真的是管理員嗎?”,因為任務非常簡單 - 修復暖燈服務。

1.1. 有趣的事實:

兩名玩家在遊戲的前 15 分鐘內找到了第一把鑰匙,在第一個小時內我們就有了三位領導者完成了任務。

1.2. 鍛鍊

您去一家公司工作,該公司長期以來沒有稱職的資訊科技專家。 在開始整理事情之前,您需要解決阻礙辦公室工作的緊迫問題。

清潔阿姨用拖把夾住了伺服器機櫃的電源線。 電力已經恢復,但一個非常重要的網站仍然無法運作。 該網站很重要,因為該公司不太關心資訊安全,在該網站的主頁上您可以以明文形式找到執行長電腦的管理員密碼。

前幾天改了密碼,但大家都忘了新密碼,導演無法工作。 有傳言說這台機器上還有更多鑰匙可以幫助我們破解會計憑證的備份副本。

大家都期盼問題能夠盡快解決!

1.3.解決方案

1. 首先,您需要更改虛擬機器上的 root 密碼才能存取它。 啟動時,我們注意到這是 Ubuntu 16.04 Server。

要重設root密碼,我們重新啟動機器,載入時,在顯示grub選單的那一刻,使用「e」按鈕編輯Ubuntu專案。 編輯 linux 行,將其新增至末尾 init=/bin/bash。 我們透過 Ctrl+x 加載,我們得到了 bash。 用rw重新掛載root,修改密碼:

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

不要忘記同步,重新啟動。

2. 條件表示我們的網路伺服器不工作,看:

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

也就是說,實際上 Apache 正在運行,但響應代碼為 404。讓我們來看看配置:

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

這裡還有一把鑰匙-StevenPaulSteveJobs。

檢查路徑 /usr/share/WordPress - 沒有這樣的事情,但是有 /usr/share/wordpress。 編輯配置並重新啟動 Apache。

$ systemctl restart apache2

3.再試一次,我們得到錯誤:

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

資料庫沒有運作?

$ systemctl status mysql
Active: active (running)

怎麼了? 我們需要弄清楚。 為此,您需要獲得對 MySQL 的存取權限,如中所述 文件。 文件要點之一建議我們註冊該選項 skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf。 這裡還有一把鑰匙-AugustaAdaKingByron。

修正使用者權限 'wp'@'localhost'。 我們啟動 MySQL,使其可以透過網路訪問,在配置中註釋該選項 skip-networking.

4.執行完這些步驟後,Web伺服器啟動,但網站仍然無法運作,因為

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

我們編輯該檔案的權限。

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

我們刷新頁面,進入網站並找到鑰匙 - BjarneStroustrup! 我們找到了所有三把鑰匙,我們的主管可以工作,我們解密了會計文件。 每個人都很高興,而且您還有很多工作要做,需要在公司中建立基礎設施、備份和安全性。

2.第二階段

有必要解決收集分析的問題。 每個人都喜歡分析——誰使用它、在哪裡使用它以及使用的數量。 我們想出了一個所有工程師在生活中都可能遇到的案例。

2.1. 有趣的事實

我們的一位玩家在遊戲的前 10 分鐘內輸入了正確的金鑰,並且在第一個小時內我們就有了一位完成任務的領導者。

2.2. 鍛鍊

你去公司上班,經理來找你,要你查信是從非洲寄給誰的。 我們需要根據它們建立前 21 個收件人地址。 收件人地址的第一個字母是關鍵。 一件事:發送信件的郵件伺服器無法載入。 大家都期盼問題能夠盡快解決!

2.3.解決方案

1. 由於fstab中不存在交換分割區,伺服器無法啟動;載入時,系統嘗試掛載並崩潰。 如何開機?

下載鏡像,我們下載了CentOS 7,從Live CD/DVD啟動(故障排除->救援),掛載系統,編輯 /etc/fstab。 我們立刻找到了第一把鑰匙-GottfriedWilhelm11646Leibniz!

創建交換:

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

2.一如既往,沒有密碼,需要更改虛擬機器上的root密碼。 我們已經在第一個任務中做到了這一點。 我們更改並成功登入伺服器,但它立即重新啟動。 伺服器超載的速度如此之快,以至於您甚至沒有時間仔細查看所有日誌。 如何理解正在發生的事情?

我們再次從 livecd 啟動,仔細研究系統日誌,並且為了以防萬一,請查看 cron,因為有這樣的週期性。 在那裡我們找到了問題和第二把鑰匙 - Alan1912MathisonTuring!

需要在 /etc/crontab 刪除或註解掉行 echo b > /proc/sysrq-trigger.

3.伺服器載入完成後,您可以完成管理員的任務:“非洲的位址是多少?” 此資訊通常向公眾公開。 您可以使用短語“非洲 IP 位址”、“地理 IP 資料庫”在互聯網上找到此資訊。 為了解決這個問題,您可以使用免費的地址分配資料庫(geoip)。 我們使用資料庫作為標準 MaxMind GeoLite2,可依知識共享署名-相同方式分享 4.0 授權使用。

讓我們嘗試僅使用 Linux 系統實用程式來解決我們的問題,但通常可以透過多種方式來解決:使用文字過濾實用程式以及使用各種程式語言中的腳本。

首先,我們只需從郵件日誌中取得「寄件者-收件者 IP」對 /var/log/maillog (讓我們建立一個電子郵件收件者 - 寄件者 IP 表)。 這可以透過以下命令來完成:

$ 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

在我們繼續編譯非洲地址資料庫之前,讓我們先來看看寄件者的主要 IP 位址。

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

其中,從信件數量上看,前三位收件人的信件數量明顯突出。 如果您 grep 傳送到前 3 個位址的寄件者的 IP 位址,您會發現某些網路明顯占主導地位:

$ 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/41 分配給 AFRINIC - 分配網路資源的五個區域網路註冊商之一。 AFRINIC 在整個非洲分配地址空間。 而8/XNUMX完全指的是AFRINIC。

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

因此,問題的答案實際上就在日誌本身。

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

在這個階段,我們得到字串「LinuxBenedictTorvadst」。

正確的金鑰:「LinusBenedictTorvalds」。

產生的字串在最後 3 個字元中包含與正確鍵相關的拼字錯誤。 這是因為我們選擇的網路並非完全專用於非洲國家,以及電子郵件在我們日誌中的 IP 位址之間分配的方式。

透過充分說明分配給非洲國家的最大網絡,可以獲得準確的答案:

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

該問題還可以透過另一種方式解決。
下載MaxMind,解壓縮,接下來的三個指令也解決了我們的問題。

$ 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

不管怎樣,我們最終計算出了統計數據,經理們收到了他們工作所需的數據!

3、第三階段

第三階段與第一階段有些相似 - 您還需要修復暖燈服務,但一切都比第一個任務更複雜。

3.1. 有趣的事實

前15分鐘,三名選手找到了第一把鑰匙;賽段開始後2小時20分鐘,我們的勝利者完成了任務。

3.2. 鍛鍊

您去一家公司工作,該公司的所有文件都儲存在內部 Wiki 伺服器上。 去年,一名工程師除了現有的一個磁碟之外,還為伺服器訂購了 3 個新磁碟,他認為為了使系統具有容錯能力,需要將這些磁碟放置在某種陣列中。 不幸的是,安裝幾週後,工程師去印度度假,沒有回來。

該伺服器連續幾年沒有故障,但幾天前該公司的網路遭到駭客攻擊。 根據指示,安全人員將磁碟從伺服器上取出並發送給您。 在運送過程中,一張磁碟遺失且無法挽回。

我們需要恢復 Wiki 的功能;首先,我們對 Wiki 頁面的內容感興趣。 該 wiki 頁面上的一段文字是 1C 伺服器的密碼,迫切需要解鎖它。

此外,在維基頁面的某個地方或其他地方有日誌伺服器和視訊監控伺服器的密碼,這些密碼也需要恢復;沒有它們,就不可能對事件進行調查。 一如既往,我們期待問題能迅速解決!

3.3.解決方案

1. 我們嘗試從我們擁有的磁碟一張一張地啟動,但到處都收到相同的訊息:

No bootable medium found! System halted 

你需要從某些東西啟動。 從 Live CD/DVD 啟動(故障排除 -> 救援)再次有所幫助。 載入時,我們嘗試找到啟動分割區,但找不到它,最終進入了 shell。 我們正在嘗試研究磁碟的用途和用途。 據了解,他們一共有三個人。 CentOS 7 版本中有更多這方面的工具,其中有指令 blkidlsblk,它向我們顯示有關磁碟的所有資訊。

我們如何做以及做什麼:

$ ls /dev/sd*

顯而易見的是

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

我們掛載sdb1,顯然這是CentOS 6的啟動分割區。

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

顯然,我們進入 grub 部分並在一個不尋常的文件中找到第一個密鑰 - James191955Gosling。

2.我們研究pvs和lvs,因為我們使用LVM。 我們看到應該有 2 個物理卷,其中一個未找到並抱怨 uid 丟失。 我們看到應該有2個邏輯磁碟區:root和swap,而root部分遺失(磁碟區的P屬性)。 無法掛載,有點可惜! 我們真的需要他。

還有2個磁碟,我們查看它們,組裝並掛載它們:

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

我們來看看,我們可以看到這是 CentOS 6 的啟動分區,並且是已有分區的副本 /dev/sdb1,這裡又是同樣的鍵 - DennisBMacAlistairCRitchie!
讓我們看看它是如何組裝的 /dev/md127.

$ mdadm --detail /dev/md127

我們看到它應該是由 4 個圓盤組裝而成,但它是由兩個圓盤組裝而成 /dev/sda1 и /dev/sdc1,它們應該是系統中的數字 2 和 4。 我們假設從 /dev/sda2 и /dev/sdc2 您也可以收集數組。 目前尚不清楚為什麼它們沒有元數據,但這是出於位於果阿某個地方的管理員的良心。 我們假設應該有 RAID10,儘管有選項。 我們收集:

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

我們看blkid、pvs、lvs。 我們發現我們已經收集了以前缺少的物理卷。

lvroot 立即被修復,我們掛載它,但首先啟動 VG:

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

一切都在那裡,包括根主目錄中的金鑰 - /root/sweet。

3. 我們仍在嘗試恢復我們的伺服器以使其正常啟動。 我們的所有邏輯卷 /dev/md0 (我們找到所有東西的地方)將其拖到 /dev/sdb2,整個伺服器最初工作的地方。

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

我們關閉伺服器,取出磁碟 1 和 3,保留第二個磁碟,從 Live CD/DVD 啟動進入 Rescue。 找到引導分割區並在grub中還原引導程式:

root (hd0,0)
setup (hd0)

我們撕下啟動碟並成功加載,但該網站無法運行。

4. 啟動網站有兩種選擇:從頭開始設定 Apache 或使用 nginx 並預先設定 php-fpm:

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

最後,你需要啟動MySQL:

$ /etc/init.d/mysqld start

它不會啟動,答案就在 /var/log/mysql。 一旦你解決了MySQL的問題,網站就可以工作了,主頁上會有一個鍵-RichardGCCMatthewGNUStallman! 現在我們可以訪問1C,員工將能夠領取工資。 像往常一樣,您還有大量工作需要在公司內建立基礎設施和安全性。

我們也可以再次分享幫助我們和參與者準備比賽的書籍清單: linux.mail.ru/書籍.

感謝您與我們同在! 請繼續關注下一場比賽的公告!

來源: www.habr.com

添加評論