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 版本中有更多这方面的工具,其中有命令 blkid или lsblk,它向我们显示有关磁盘的所有信息。

我们如何做以及做什么:

$ 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/书籍.

感谢您与我们在一起! 请继续关注下一场比赛的公告!

来源: habr.com

添加评论