侦察客户的环境
目标
首次进入既没有文档也没有仪表板的客户服务器后,能够在 30 分钟内绘制一页环境地图。
为什么重要
在陌生环境中,代价最高的错误是随意打开某个日志。日志如同大海,在不知道大小和格式的情况下进入,只会浪费时间。侦察的目的不是寻找答案,而是确定探索范围。知道文件有多少行,就能估计一次 grep 要花几秒;知道采集区间,就能判断问题发生时刻的日志是否原本就存在。检查容量时必须同时查看两项——块和 inode 是不同资源,即使磁盘容量仍有剩余,inode 用尽后也无法创建文件。实际工作中,经常有人只看 df 就回复客户“磁盘空间充足”,随后问题再次出现。
步骤
- 创建
/root/recon目录。 - 创建
/root/recon/os.txt,其中包含该系统的发行版名称。 - 将
/opt/data下的文件列表连同大小保存到/root/recon/files.txt。 - 将
/opt/data顶层容量最大的文件名写入/root/recon/biggest.txt,只写文件名。 - 将
/opt/data/web.log的总行数以数字写入/root/recon/weblog_lines.txt。 - 将文件系统容量和 inode 使用量两者都保存到
/root/recon/disk.txt。 - 将
/opt/data/web.log中最早和最晚的时间写入/root/recon/timerange.txt。 - 将上述信息整理成一页
/root/recon/map.md。必须包含发行版、最大文件名、web.log 行数和日志采集区间。
参考
cat /etc/os-release、ls -lS、du -h、wc -l、df -h、df -i- 若要将两个命令的输出汇总到同一文件,可使用
>>依次追加。 - 常见错误 1:只检查
df,遗漏 inode。容量和 inode 是不同资源。 - 常见错误 2:第 4 步连同路径一起写入。这里只需要文件名。
创建侦察工作目录
创建 /root/recon 目录。
将产出物集中到一处,日后才能整合为报告。mkdir 添加 -p 后,即使目录已存在也不会报错。
确认发行版
创建 /root/recon/os.txt,其中包含该系统的发行版名称。
发行版信息以 key=value 形式保存在 /etc/os-release 中。该值决定日志路径和软件包命令。
创建数据清单
将 /opt/data 下的文件列表连同大小保存到 /root/recon/files.txt。
列出 /opt/data 及其文件大小。可以直接将 ls -l 或 du 的输出重定向到文件。
找出最大文件
将 /opt/data 顶层容量最大的文件名写入 /root/recon/biggest.txt,只写文件名。
不要目视判断,应进行排序。ls 有按大小排序的选项,du 可与 sort 组合使用。只写文件名。
统计 Web 日志行数
将 /opt/data/web.log 的总行数以数字写入 /root/recon/weblog_lines.txt。
知道行数,才能估计一次 grep 需要几秒。使用 wc 的行计数选项。
同时记录容量和 inode
将文件系统容量和 inode 使用量两者都保存到 /root/recon/disk.txt。
df 默认只显示块信息。查看 inode 有单独的选项,两种输出都必须位于同一个文件中。
确定日志采集区间
将 /opt/data/web.log 中最早和最晚的时间写入 /root/recon/timerange.txt。
web.log 的第二个字段是时间。只提取该字段并排序后,最早和最晚值会出现在两端。
整理成一页环境地图
将上述信息整理成一页 /root/recon/map.md。必须包含发行版、最大文件名、web.log 行数和日志采集区间。
将前面步骤得到的值汇总到一页 Markdown 中。必须包含发行版、最大文件、日志行数和采集区间。