我想知道某个应用程序在后台执行了什么。是否有任何监控日志或任何应用程序在后台执行的记录历史记录?我说的是任何常规应用程序,而不是系统服务或进程。
答案1
简而言之(总结如下):
使用 AppArmor
我认为,查看程序正在做什么的最佳方法是AppArmor
。 AppArmor
是内核中的 [LSM][1](Linux 安全模块)之一,对于 Ubuntu 来说“首选 LSM”它已经安装在你的系统上了:)
AppArmor + LSM 的一些背景
(你可以跳过这个解释部分并直接转到下面的食谱/解决方案)
简而言之,很可能是“过于简单”的话:
AppArmor
是一个 LSM。LSM 位于内核中,因此非常适合监控内容。例如,“用户空间”(不在内核中)中的替代方案可能不像 LSM 那样精确和防篡改AppArmor
。AppArmor
内核中的 会咨询程序对资源的所有请求。在某种程度上,它会请求程序对资源的“允许/访问”。如果程序想要访问/path/to/somefile.txt
AppArmor/LSM,则会收到通知,并可以批准或拒绝此请求。AppArmor 通过使用个人资料这样它就可以知道程序可以访问或不可以访问什么。实际上,如果没有“配置文件”,AppArmor 只会允许所有访问,而不会进行太多访问。因此,由于我们的目标是“监视”或“调查”您有疑问的程序,我们需要设置一个临时配置文件,以便 AppArmor 能够关注。通常,这种配置文件的目的实际上是限制程序。我们“只”想“监视”它。在 AppArmor 中,这称为配置文件的“投诉”模式。在这种“投诉模式”下,程序仍然可以执行所有操作,但 AppArmor 会将所有这些操作记录在日志文件中/var/log/syslog
/usr/bin/programXYZ
用于将应用程序设置为投诉模式(=监控它)的 AppArmor 配置文件是/etc/apparmor.d/
目录中的一个文本文件,如下所示:
/usr/bin/XYZ 标志(投诉){ #空的 }
有了这样的配置文件,/usr/bin/programXYZ
AppArmor 就会在投诉模式下对其进行监控,并将所有信息写入其中/var/log/syslog
。例如,如下所示。
12 月 21 日 11:13:44 ubuntu 内核:[23726.684803] type=1400 audit(1356084824.937:1445): apparmor="STATUS" operation="profile_load" name="/usr/bin/programXYZ" pid=17517 comm="apparmor_parser" 12 月 21 日 11:13:55 ubuntu 内核:[23737.312157] 类型 = 1400 审核(1356084835.589:1446):apparmor =“ALLOWED”操作 =“open”父级 = 17446 配置文件 =“/usr/bin/programXYZ”名称 =“/etc/ld.so.cache”pid = 17518 comm =“df”requested_mask =“r”denied_mask =“r”fsuid = 1000 ouid = 0 12 月 21 日 11:13:55 ubuntu 内核:[23737.312176] 类型 = 1400 审核(1356084835.589:1447):apparmor =“ALLOWED”操作 =“getattr”父级 = 17446 配置文件 =“/usr/bin/programXYZ”名称 =“/etc/ld.so.cache”pid = 17518 comm =“df”requested_mask =“r”denied_mask =“r”fsuid = 1000 ouid = 0 12 月 21 日 11:13:55 ubuntu 内核:[23737.312225] 类型 = 1400 审核(1356084835.589:1448):apparmor =“ALLOWED”操作 =“open”父级 = 17446 配置文件 =“/usr/bin/programXYZ”名称 =“/lib/i386-linux-gnu/libc-2.15.so”pid = 17518 comm =“df”requested_mask =“r”denied_mask =“r”fsuid = 1000 ouid = 0 12 月 21 日 11:13:55 ubuntu 内核:[23737.312250] 类型 = 1400 审核(1356084835.589:1449):apparmor =“ALLOWED”操作 =“getattr”父级 = 17446 配置文件 =“/usr/bin/programXYZ”名称 =“/lib/i386-linux-gnu/libc-2.15.so”pid = 17518 comm =“df”requested_mask =“r”denied_mask =“r”fsuid = 1000 ouid = 0 12 月 21 日 11:13:55 ubuntu 内核:[23737.312269] 类型 = 1400 审核(1356084835.589:1450):apparmor =“ALLOWED”操作 =“file_mmap”父级 = 17446 配置文件 =“/usr/bin/programXYZ”名称 =“/lib/i386-linux-gnu/libc-2.15.so”pid = 17518 comm =“df”requested_mask =“mr”denied_mask =“mr”fsuid = 1000 ouid = 0
如您所见,这里有/usr/bin/programXYZ
访问过(文件)和做过(即启动的进程)的所有内容的记录。
此类临时配置文件的解决方案/设置(recepie)
备注:它看起来很“复杂”(步骤很多),但实际上并非如此。我只是想很好地解释它,将其整合并解释得通俗易懂。
- 很高兴 AppArmor 已经安装在你的 Ubuntu 机器上 :)
- 找到您感兴趣的程序的路径。在终端中输入
which programXYZ
,您很可能会看到类似 的内容/path/to/programXYZ
。我们假设这是/usr/bin/programXYZ
。 - 生成 Apparmor 配置文件以将程序设置为投诉模式(请记住,这才是让 AppArmor 关心它的原因。假设您不是 root,这可以通过这个有点古怪(仍然正确)的命令来完成:
sudo bash -c " echo -e \"/usr/bin/programXYZ flags=(complain) {\n #enpty\n}\" >/etc/apparmor.d/myTempProfile"
。当然,您必须更改/usr/bin/programXYZ
为之前步骤中找到的路径。 - 接下来,您可以检查配置文件是否正确生成,
sudo cat /etc/apparmor.d/myTempProfile
其应该打印如下内容:
/usr/bin/programXYZ 标志(投诉){ #空的 }
- 知道我们必须将新创建的配置文件(在文件中
/etc/apparmor.d/myTempProfile
)设置为活动状态。这可以通过以下命令完成:sudo apparmor_parser -r /etc/apparmor.d/myTempProfile"
- 现在,一切设置完毕。您需要重新启动该程序。如果该程序已在运行,AppArmor 尚未捕获此信息。因此,您可以手动终止并重新启动该程序。或者,如果它是一种“自动启动”守护进程,则必须重新启动系统。
- 恭喜:您知道可以查看 /var/log/syslog 来查看 AppArmor 记录的有关您的 porgamXYZ 的内容。一个不错的方法是在终端中使用以下命令:
sudo cat /var/log/syslog | grep "/usr/bin/programXYZ"
如果您有任何疑问或在实施过程中遇到困难,请在此处发表评论,以便我为您提供帮助!
备注:按照这些说明,您将获得一个“相当全面的”程序所做事情的列表。AppArmor 很容易记录程序所做的事情 100 多个。毕竟,任何访问(即加载共享库)都是 AppArmor 记录的事情。如果您的程序有许多依赖项并使用大量共享对象,那么列表很容易变得很长。我这样说是为了让您不会被使用 AppArmor 投诉将为您生成的大量信息所吓倒。看透所有这些可能是一个挑战。从好的方面来说,您不会冒险忽视任何确实/usr/bin/programXYZ
发生的事情。