为什么 chkrootkit 不测试 syslogd?

4 security rsyslog syslog antivirus chkrootkit

当我用chkrootkit它扫描我的机器时,我注意到它总是说其中一个:

Checking `syslogd'...                                       not tested
Run Code Online (Sandbox Code Playgroud)

为什么这没有经过测试?是否应该对此进行测试?如果对它进行测试是一件好事,我如何才能对其进行测试?


操作系统信息:

Description:    Ubuntu 14.10
Release:    14.10
Run Code Online (Sandbox Code Playgroud)

包装信息:

chkrootkit:
  Installed: 0.49-5ubuntu1
  Candidate: 0.49-5ubuntu1
  Version table:
 *** 0.49-5ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ utopic/universe amd64 Packages
        100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)

Eli*_*gan 6

发生这种情况是因为chkrootkit查找syslogd在几个常见位置命名的可执行文件,但由于 Ubuntu 使用rsyslog,因此它的 syslog 守护进程被称为rsyslogd

要检查您机器上的 syslog 守护程序是否被专门调用rsyslogd而不是syslogd,您可以运行locate syslogd(当然,如果您确实有 rootkit,它也可能导致此命令报告错误结果):

ek@Io:~$ locate syslogd
/etc/apparmor.d/usr.sbin.rsyslogd
/etc/apparmor.d/disable/usr.sbin.rsyslogd
/etc/apparmor.d/local/usr.sbin.rsyslogd
/usr/sbin/rsyslogd
/usr/share/man/man8/rsyslogd.8.gz
Run Code Online (Sandbox Code Playgroud)

要验证这就是chkrootkit不测试 syslog 守护程序的原因,您可以chkrootkit使用-d标志运行(用于调试模式)并将输出的副本发送到文件:

sudo chkrootkit -d |& tee ~/chkrootkit.log
Run Code Online (Sandbox Code Playgroud)

然后在文本编辑器中打开日志文件并检查Checking `syslogd'...not tested消息之间的调试输出。在我的机器上它看起来像这样(在你的机器上我希望它会类似):

Checking `syslogd'...                                       + chk_syslogd
+ STATUS=1
+ SYSLOG_I_L=/usr/lib/pt07|/dev/pty[pqrs]|/dev/hd[als][0-7]|/dev/ddtz1|/dev/ptyxx|/dev/tux|syslogs\.h
+ loc syslogd syslogd /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /sbin /usr/sbin /lib /usr/lib /usr/libexec .
+ thing=syslogd
+ shift
+ dflt=syslogd
+ shift
+ :
+ test -f /usr/local/sbin/syslogd
+ :
+ test -f /usr/local/bin/syslogd
+ :
+ test -f /usr/sbin/syslogd
+ :
+ test -f /usr/bin/syslogd
+ :
+ test -f /sbin/syslogd
+ :
+ test -f /bin/syslogd
+ :
+ test -f /sbin/syslogd
+ :
+ test -f /usr/sbin/syslogd
+ :
+ test -f /lib/syslogd
+ :
+ test -f /usr/lib/syslogd
+ :
+ test -f /usr/libexec/syslogd
+ :
+ test -f ./syslogd
+ [ / = / ]
+ echo syslogd
+ exit 1
+ CMD=syslogd
+ [ ! -r syslogd ]
+ return 2
+ STATUS=2
+ [  = t ]
+ echo not tested
not tested
Run Code Online (Sandbox Code Playgroud)

由于调用的文件syslogd 不存在于任何这些位置(或根本不存在),因此无需对其进行测试。

一种可能的部分解决方法是在这些位置之一创建指向实际ryslogd可执行文件的符号链接。我认为这只是部分解决方案,因为我不知道chkrootkit检查(或应该检查)的细节,或者是否应该做任何特殊的事情来正确检查rsyslogd或者在检查符号链接和最近创建时它是否真的正常工作文件。但是,当我这样做时,chkrootkit确实报告成功检查syslogd

ek@Io:~$ sudo ln -s /usr/sbin/rsyslogd /usr/local/sbin/syslogd
ek@Io:~$ sudo chkrootkit | grep syslogd
Checking `syslogd'...                                       not infected
Run Code Online (Sandbox Code Playgroud)

sbin子目录/usr/local可能不存在,在这种情况下您可以创建它。无论哪种方式,我都建议syslogd在使用后删除符号链接。

在任何情况下,真正的解决方案bodhi.zazen所说——这应该报告为针对chkrootkitUbuntu中的软件包的错误。我建议您报告错误的方式是:

  1. 如果您还没有阅读本指南,请阅读本指南。它为编写错误报告提供了极好的指导。(这个问题是另一个很好的资源。)
  2. 运行ubuntu-bug chkrootkit
  3. Apport 会说它是“收集问题信息”。完成后,单击“发送”。这将打开一个新的浏览器选项卡,您可以在其中报告错误。
  4. 包括记录chkrootkit问题发生时输出的信息。我建议附上显示其输出的日志,最好包括调试输出。您可以附加运行时/运行时创建的日志文件sudo chkrootkit -d |& tee ~/chkrootkit.log(见上文)。您还可以在错误报告本身的文本中重现最相关的小部分。
  5. 提交错误报告。
  6. 或者,如果您对此答案发表评论,我将转到错误报告并指出我也受到影响——因为我已经能够在我的系统上重现该错误。我也可以提供其他信息——例如,我可以确认它发生在 15.04 Beta 上,如果您没有时间制作和附加日志,我可以这样做。(但我鼓励您在原始报告中提供尽可能多的相关信息。)