如何知道应用程序在后台做什么?

Amr*_*him 5 log

我想知道应用程序在后台做什么。是否有任何监控日志或任何应用程序在后台执行的操作的任何记录历史记录?我说的是任何常规应用程序,而不是系统服务或进程。

hum*_*ace 3

简而言之(以下摘要):

使用AppArmor

在我看来,了解该程序正在做什么的最佳选择之一是AppArmorAppArmor是内核中的 [LSM][1](Linux 安全模块)之一,对于 Ubuntu,它是已安装在您的系统上的“选择的 LSM” :)

AppArmor + LSM 的一些背景

(您可以跳过此说明部分,直接转到下面的食谱/解决方案)

简而言之,最有可能“过于简化”的话: AppArmor是一个LSM。LSM 位于内核中,因此非常适合监视内容。例如,“用户空间”(而不是内核)中的替代方案可能不像AppArmor. AppArmor程序对资源的所有请求都会咨询内核中的。在某种程度上,它被要求“允许/访问”程序所使用的资源。如果程序想要访问/path/to/somefile.txtAppArmor/LSM,则会收到通知,并且可以批准或拒绝此操作。AppArmor 通过使用配置文件进行配置,以便它可以知道程序可以访问或不可以访问哪些内容。实际上,如果没有“配置文件”,AppArmor 只允许所有访问,并且不会太多。因此,由于我们的目标是“监控”或“调查”您有疑问的程序,因此我们需要设置一些临时配置文件,以便 AppArmor 真正关心。通常,此类配置文件的目的实际上是限制程序。我们“只是”想“监控”它。在 AppArmor 中,这称为 Profile 的“抱怨”模式。在这种“抱怨模式”下,程序仍然可以执行所有操作,但 AppArmor 会将所有这些操作记录在日志文件中:/var/log/syslog

/usr/bin/programXYZ用于将应用程序设置为抱怨模式(=监视它)的AppArmor 配置文件是/etc/apparmor.d/目录中的一个文本文件,如下所示:

/usr/bin/XYZ 标志(抱怨){
#空的
}

通过这样的投诉模式配置文件,/usr/bin/programXYZAppArmor 会监视它并将所有信息写入/var/log/syslog. 例如,这看起来像这样。

12月21日11:13:44 ubuntu内核:[23726.684803]类型= 1400审核(1356084824.937:1445):apparmor =“STATUS”操作=“profile_load”名称=“/usr/bin/programXYZ”pid=17517 comm=“apparmor_parser” ”
12月21日11:13:55 ubuntu内核:[23737.312157] type = 1400审核(1356084835.589:1446):apparmor =“允许”操作=“打开”parent = 17446配置文件=“/usr/bin/programXYZ”名称=“/等/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] type=1400 审核(1356084835.589:1447): apparmor="ALLOWED" 操作="getattr"parent=17446 profile="/usr/bin/programXYZ" name="/等/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] type=1400audit(1356084835.589:1448): apparmor="ALLOWED" operation="open"parent=17446 profile="/usr/bin/programXYZ"name="/ 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] type=1400audit(1356084835.589:1449): apparmor="ALLOWED" operation="getattr"parent=17446 profile="/usr/bin/programXYZ" name="/ 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] type = 1400审核(1356084835.589:1450):apparmor =“允许”操作=“file_mmap”parent = 17446 profile =“/usr/bin/programXYZ”name =“/ 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)

备注:看起来“复杂”(很多步骤),实际上并非如此。我只是想把它解释得很好,配合并解释得很好理解。

  1. 很高兴 AppArmor 已经安装在你的 Ubuntu 盒子上:)
  2. 找出您感兴趣的程序的路径。在终端类型中 which programXYZ,您很可能会看到类似的内容/path/to/programXYZ。我们假设这里是/usr/bin/programXYZ
  3. 生成一个 AppArmor 配置文件以将程序设置为抱怨模式(请记住,这就是 AppArmor 关心它的原因。假设您不是 root,这将通过这个有点奇怪(仍然正确)的命令来完成: 。当然,您必须 sudo bash -c " echo -e \"/usr/bin/programXYZ flags=(complain) {\n #enpty\n}\" >/etc/apparmor.d/myTempProfile"更改/usr/bin/programXYZ为您在之前的步骤中找到的路径。
  4. 接下来,您可以检查配置文件是否正确生成,sudo cat /etc/apparmor.d/myTempProfile应该打印如下内容:
/usr/bin/programXYZ 标志(抱怨){
#空的
}
  1. 知道我们必须将新创建的配置文件(在文件中/etc/apparmor.d/myTempProfile)设置为活动状态。这是通过以下命令完成的:sudo apparmor_parser -r /etc/apparmor.d/myTempProfile"
  2. 现在一切都已设置完毕。您需要重新启动该程序。如果程序已经在运行,则 AppArmor 尚未捕获该程序。因此,您可以手动终止并重新启动程序。或者,如果它是一种“自动启动”守护程序,您必须重新启动系统。
  3. 恭喜:您知道可以查看 /var/log/syslog 以查看 AppArmor 记录的有关您 porgamXYZ 的内容。一个很好的方法是在终端中使用以下命令:sudo cat /var/log/syslog | grep "/usr/bin/programXYZ"

如果有任何疑问或您在实施时遇到困难,请在这里发表评论,以便我可以帮助您!

备注:按照这些说明,您将获得一个“相当包含”程序所做的事情的广泛列表。AppArmor 可以轻松记录程序执行的 100 多项操作。毕竟任何访问(即加载共享库)始终是 AppArmor 记录的内容。如果您的程序有许多依赖项并使用相当数量的共享对象,那么该列表很容易变得相当冗长。我这样说是为了让您不会被使用 AppArmor 抱怨会生成的大量信息吓到。看透这一切可能是一个挑战。从好的方面来说,你不会冒险去监督任何这样/usr/bin/programXYZ做的事情。