我想知道应用程序在后台做什么。是否有任何监控日志或任何应用程序在后台执行的操作的任何记录历史记录?我说的是任何常规应用程序,而不是系统服务或进程。
简而言之(以下摘要):
在我看来,了解该程序正在做什么的最佳选择之一是AppArmor。 AppArmor是内核中的 [LSM][1](Linux 安全模块)之一,对于 Ubuntu,它是已安装在您的系统上的“选择的 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已访问(文件)和完成(即进程启动)的所有内容的记录。
备注:看起来“复杂”(很多步骤),实际上并非如此。我只是想把它解释得很好,配合并解释得很好理解。
which programXYZ,您很可能会看到类似的内容/path/to/programXYZ。我们假设这里是/usr/bin/programXYZ。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"sudo cat /var/log/syslog | grep "/usr/bin/programXYZ"如果有任何疑问或您在实施时遇到困难,请在这里发表评论,以便我可以帮助您!
备注:按照这些说明,您将获得一个“相当包含”程序所做的事情的广泛列表。AppArmor 可以轻松记录程序执行的 100 多项操作。毕竟任何访问(即加载共享库)始终是 AppArmor 记录的内容。如果您的程序有许多依赖项并使用相当数量的共享对象,那么该列表很容易变得相当冗长。我这样说是为了让您不会被使用 AppArmor 抱怨会生成的大量信息吓到。看透这一切可能是一个挑战。从好的方面来说,你不会冒险去监督任何这样/usr/bin/programXYZ做的事情。